blob: 27cfc4f367013b0d7060ab0532d8b3f670d75634 [file]
import pytest
from app.objects.secondclass.c_fact import Fact
from app.utility.base_parser import BaseParser
@pytest.fixture
def mock_parser():
return BaseParser(dict(
mappers=None,
used_facts=[
Fact('trait1', value='value1'),
Fact('trait2', value='value2')
],
source_facts=None
))
class TestBaseParser:
def test_set_value(self, mock_parser):
assert len(mock_parser.used_facts) == 2
assert BaseParser.set_value('', 'testmatch', mock_parser.used_facts) is None
assert BaseParser.set_value('testsearch', 'testmatch', mock_parser.used_facts) == 'testmatch'
assert BaseParser.set_value('trait2', 'testmatch', mock_parser.used_facts) == 'value2'
def test_parsing(self):
# Email
assert BaseParser.email('notanemail') == []
assert BaseParser.email('test@example.com') == ['test@example.com']
assert BaseParser.email('blah test@example.com blah blah test2@example2.org blah') == ['test@example.com', 'test2@example2.org']
# Filename
assert BaseParser.filename('noextension') == []
assert BaseParser.filename('test.xml') == ['test.xml']
assert BaseParser.filename('blah blah test2.png blah test.xml blahblah') == ['test2.png', 'test.xml']
# Line splitting
assert BaseParser.line('singleline') == ['singleline']
assert BaseParser.line('two\nlines') == ['two', 'lines']
assert BaseParser.line('three\r\nline\r\nexample') == ['three', 'line', 'example']
# IP address
assert BaseParser.ip('notanip') == []
assert BaseParser.ip('not.an.ip.address') == []
assert BaseParser.ip('1.2.3') == []
assert BaseParser.ip('1.2.3.4') == ['1.2.3.4']
assert BaseParser.ip('blah 1.2.3.4 1.2. 1.2.3. 5.6.7.8 blah') == ['1.2.3.4', '5.6.7.8']
# Broadcast
assert BaseParser.broadcastip('notbroadcast') == []
assert BaseParser.broadcastip('broadcast 1.2.3.4') == ['1.2.3.4']
# JSON
assert BaseParser.load_json('{"a":"b"}') == dict(a='b')
assert BaseParser.load_json('{"a":"b"') is None # malformed