From 457758b3507f9b0fd11ef8ad7adf03d54dd1d539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Thu, 3 May 2018 21:36:40 +0200 Subject: [PATCH] fix: Test cases & attributes automatically getting an UUID --- pymisp/mispevent.py | 6 ++- tests/mispevent_testfiles/def_param.json | 2 +- tests/test_mispevent.py | 50 ++++++++++++++++-------- tests/test_offline.py | 6 +++ 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/pymisp/mispevent.py b/pymisp/mispevent.py index 70d906a..cd23c83 100644 --- a/pymisp/mispevent.py +++ b/pymisp/mispevent.py @@ -134,7 +134,7 @@ class MISPAttribute(AbstractMISP): def add_proposal(self, shadow_attribute=None, **kwargs): """Alias for add_shadow_attribute""" - self.add_shadow_attribute(shadow_attribute, **kwargs) + return self.add_shadow_attribute(shadow_attribute, **kwargs) def add_shadow_attribute(self, shadow_attribute=None, **kwargs): """Add a tag to the attribute (by name or a MISPTag object)""" @@ -150,6 +150,7 @@ class MISPAttribute(AbstractMISP): raise PyMISPError("The shadow_attribute is in an invalid format (can be either string, MISPShadowAttribute, or an expanded dict): {}".format(shadow_attribute)) self.shadow_attributes.append(misp_shadow_attribute) self.edited = True + return misp_shadow_attribute def from_dict(self, **kwargs): if kwargs.get('type') and kwargs.get('category'): @@ -534,7 +535,7 @@ class MISPEvent(AbstractMISP): def add_proposal(self, shadow_attribute=None, **kwargs): """Alias for add_shadow_attribute""" - self.add_shadow_attribute(shadow_attribute, **kwargs) + return self.add_shadow_attribute(shadow_attribute, **kwargs) def add_shadow_attribute(self, shadow_attribute=None, **kwargs): """Add a tag to the attribute (by name or a MISPTag object)""" @@ -550,6 +551,7 @@ class MISPEvent(AbstractMISP): raise PyMISPError("The shadow_attribute is in an invalid format (can be either string, MISPShadowAttribute, or an expanded dict): {}".format(shadow_attribute)) self.shadow_attributes.append(misp_shadow_attribute) self.edited = True + return misp_shadow_attribute def get_attribute_tag(self, attribute_identifier): '''Return the tags associated to an attribute or an object attribute. diff --git a/tests/mispevent_testfiles/def_param.json b/tests/mispevent_testfiles/def_param.json index 9226fdd..46ccca3 100644 --- a/tests/mispevent_testfiles/def_param.json +++ b/tests/mispevent_testfiles/def_param.json @@ -42,7 +42,7 @@ "name": "whois", "sharing_group_id": 0, "template_uuid": "429faea1-34ff-47af-8a00-7c62d3be5a6a", - "template_version": 9, + "template_version": 10, "uuid": "a" } ], diff --git a/tests/test_mispevent.py b/tests/test_mispevent.py index 4472ad2..0b0e55a 100644 --- a/tests/test_mispevent.py +++ b/tests/test_mispevent.py @@ -54,8 +54,9 @@ class TestMISPEvent(unittest.TestCase): def test_attribute(self): self.init_event() - self.mispevent.add_attribute('filename', 'bar.exe') - self.mispevent.add_attribute_tag('osint', 'bar.exe') + a = self.mispevent.add_attribute('filename', 'bar.exe') + del a.uuid + a = self.mispevent.add_attribute_tag('osint', 'bar.exe') attr_tags = self.mispevent.get_attribute_tag('bar.exe') self.assertEqual(self.mispevent.attributes[0].tags[0].name, 'osint') self.assertEqual(attr_tags[0].name, 'osint') @@ -71,12 +72,14 @@ class TestMISPEvent(unittest.TestCase): def test_object_tag(self): self.mispevent.add_object(name='file', strict=True) - self.mispevent.objects[0].add_attribute('filename', value='bar', Tag=[{'name': 'blah'}]) + a = self.mispevent.objects[0].add_attribute('filename', value='bar', Tag=[{'name': 'blah'}]) + del a.uuid self.assertEqual(self.mispevent.objects[0].attributes[0].tags[0].name, 'blah') self.assertTrue(self.mispevent.objects[0].has_attributes_by_relation(['filename'])) self.assertEqual(len(self.mispevent.objects[0].get_attributes_by_relation('filename')), 1) self.mispevent.add_object(name='url', strict=True) - self.mispevent.objects[1].add_attribute('url', value='https://www.circl.lu') + a = self.mispevent.objects[1].add_attribute('url', value='https://www.circl.lu') + del a.uuid self.mispevent.objects[0].uuid = 'a' self.mispevent.objects[1].uuid = 'b' self.mispevent.objects[0].add_reference('b', 'baz', comment='foo') @@ -99,7 +102,8 @@ class TestMISPEvent(unittest.TestCase): with open('tests/mispevent_testfiles/simple.json', 'rb') as f: pseudofile = BytesIO(f.read()) self.init_event() - self.mispevent.add_attribute('malware-sample', 'bar.exe', data=pseudofile) + a = self.mispevent.add_attribute('malware-sample', 'bar.exe', data=pseudofile) + del a.uuid attribute = self.mispevent.attributes[0] self.assertEqual(attribute.malware_binary, pseudofile) with open('tests/mispevent_testfiles/malware.json', 'r') as f: @@ -135,18 +139,23 @@ class TestMISPEvent(unittest.TestCase): def test_shadow_attributes(self): self.init_event() - self.mispevent.add_proposal(type='filename', value='baz.jpg') - self.mispevent.add_attribute('filename', 'bar.exe') - self.mispevent.attributes[0].add_proposal(type='filename', value='bar.pdf') + p = self.mispevent.add_proposal(type='filename', value='baz.jpg') + del p.uuid + a = self.mispevent.add_attribute('filename', 'bar.exe') + del a.uuid + p = self.mispevent.attributes[0].add_proposal(type='filename', value='bar.pdf') + del p.uuid with open('tests/mispevent_testfiles/proposals.json', 'r') as f: ref_json = json.load(f) self.assertEqual(self.mispevent.to_json(), json.dumps(ref_json, sort_keys=True, indent=2)) def test_default_attributes(self): self.mispevent.add_object(name='file', strict=True) - self.mispevent.objects[0].add_attribute('filename', value='bar', Tag=[{'name': 'blah'}]) + a = self.mispevent.objects[0].add_attribute('filename', value='bar', Tag=[{'name': 'blah'}]) + del a.uuid self.mispevent.add_object(name='file', strict=False, default_attributes_parameters=self.mispevent.objects[0].attributes[0]) - self.mispevent.objects[1].add_attribute('filename', value='baz') + a = self.mispevent.objects[1].add_attribute('filename', value='baz') + del a.uuid self.mispevent.objects[0].uuid = 'a' self.mispevent.objects[1].uuid = 'b' with open('tests/mispevent_testfiles/event_obj_def_param.json', 'r') as f: @@ -156,10 +165,14 @@ class TestMISPEvent(unittest.TestCase): def test_obj_default_values(self): self.init_event() self.mispevent.add_object(name='whois', strict=True) - self.mispevent.objects[0].add_attribute('registrar', value='registar.example.com') - self.mispevent.objects[0].add_attribute('domain', value='domain.example.com') - self.mispevent.objects[0].add_attribute('nameserver', value='ns1.example.com') - self.mispevent.objects[0].add_attribute('nameserver', value='ns2.example.com', disable_correlation=False, to_ids=True, category='External analysis') + a = self.mispevent.objects[0].add_attribute('registrar', value='registar.example.com') + del a.uuid + a = self.mispevent.objects[0].add_attribute('domain', value='domain.example.com') + del a.uuid + a = self.mispevent.objects[0].add_attribute('nameserver', value='ns1.example.com') + del a.uuid + a = self.mispevent.objects[0].add_attribute('nameserver', value='ns2.example.com', disable_correlation=False, to_ids=True, category='External analysis') + del a.uuid self.mispevent.objects[0].uuid = 'a' with open('tests/mispevent_testfiles/def_param.json', 'r') as f: ref_json = json.load(f) @@ -247,14 +260,17 @@ class TestMISPEvent(unittest.TestCase): # Python2 bullshit self.assertEqual(e.exception.message, 'set([u\'member3\']) are required.') - self.mispevent.objects[0].add_attribute('member3', value='foo') + a = self.mispevent.objects[0].add_attribute('member3', value='foo') + del a.uuid with self.assertRaises(InvalidMISPObject) as e: # Fail on requiredOneOf self.mispevent.to_json() self.assertEqual(e.exception.message, 'At least one of the following attributes is required: member1, member2') - self.mispevent.objects[0].add_attribute('member1', value='bar') - self.mispevent.objects[0].add_attribute('member1', value='baz') + a = self.mispevent.objects[0].add_attribute('member1', value='bar') + del a.uuid + a = self.mispevent.objects[0].add_attribute('member1', value='baz') + del a.uuid with self.assertRaises(InvalidMISPObject) as e: # member1 is not a multiple self.mispevent.to_json() diff --git a/tests/test_offline.py b/tests/test_offline.py index 1a1fd75..404dee7 100644 --- a/tests/test_offline.py +++ b/tests/test_offline.py @@ -279,16 +279,22 @@ class TestOffline(unittest.TestCase): if seos: for s in seos: + for a in s.attributes: + del a.uuid to_return['objects'].append(s) if s.ObjectReference: to_return['references'] += s.ObjectReference if peo: + for a in peo.attributes: + del a.uuid to_return['objects'].append(peo) if peo.ObjectReference: to_return['references'] += peo.ObjectReference if fo: + for a in fo.attributes: + del a.uuid to_return['objects'].append(fo) if fo.ObjectReference: to_return['references'] += fo.ObjectReference