From f8ee8de2b76b5fc80cec117f955389a02373c4f3 Mon Sep 17 00:00:00 2001 From: ashamah Date: Tue, 20 Jun 2023 07:50:06 +0300 Subject: [PATCH 1/3] Fix python 3 incompatibilities. --- Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.py | 4 ++-- Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.yml | 4 +++- Packs/McAfee-MAR/ReleaseNotes/1_0_7.md | 6 ++++++ Packs/McAfee-MAR/pack_metadata.json | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 Packs/McAfee-MAR/ReleaseNotes/1_0_7.md diff --git a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.py b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.py index ce3064ab33d4..47c4e28fc5f8 100644 --- a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.py +++ b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.py @@ -88,7 +88,7 @@ def create_entry(header, contents, table, context={}, headers=None): def translate_dict(d, translator): res = {} - for key, value in d.iteritems(): + for key, value in d.items(): new_key = translator.get(key, key) res[new_key] = value return res @@ -134,7 +134,7 @@ def extract_item_output(item, capitalize): } # map | to - for key, value in output.iteritems(): + for key, value in output.items(): splited_key = key.split('|') if(len(splited_key) > 1): new_key = splited_key[1] diff --git a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.yml b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.yml index de604abd75d5..fe938c12ed04 100644 --- a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.yml +++ b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR.yml @@ -496,6 +496,8 @@ script: - contextPath: MAR.HostInfo.Os description: Host operation system description: Gets host information from McAfee Active Response - dockerimage: demisto/dxl:1.0.0.35274 + dockerimage: demisto/dxl:1.0.0.63890 runonce: false fromversion: 5.0.0 +tests: +- No tests (auto formatted) diff --git a/Packs/McAfee-MAR/ReleaseNotes/1_0_7.md b/Packs/McAfee-MAR/ReleaseNotes/1_0_7.md new file mode 100644 index 000000000000..ff334fd349a1 --- /dev/null +++ b/Packs/McAfee-MAR/ReleaseNotes/1_0_7.md @@ -0,0 +1,6 @@ + +#### Integrations + +##### McAfee Active Response +- Updated the Docker image to: *demisto/dxl:1.0.0.63890*. +- Fixed an issue where certain parts of the integration were incompatible with Python 3. diff --git a/Packs/McAfee-MAR/pack_metadata.json b/Packs/McAfee-MAR/pack_metadata.json index 31a39c3f457f..ff17f7b5b06a 100644 --- a/Packs/McAfee-MAR/pack_metadata.json +++ b/Packs/McAfee-MAR/pack_metadata.json @@ -2,7 +2,7 @@ "name": "McAfee Active Response", "description": "Connect to MAR using its DXL client", "support": "xsoar", - "currentVersion": "1.0.6", + "currentVersion": "1.0.7", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", From 8669debd67a837939f69dc48ba7695b983d618bf Mon Sep 17 00:00:00 2001 From: ashamah Date: Tue, 20 Jun 2023 11:01:00 +0300 Subject: [PATCH 2/3] Add unit tests --- .../McAfee-MAR/McAfee-MAR_test.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py index 02249919d789..a5a800f9232f 100644 --- a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py +++ b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py @@ -1,3 +1,5 @@ +import unittest + import demistomock as demisto import importlib import pytest @@ -62,3 +64,95 @@ def test_get_client_config(mocker): 'broker_ca_bundle': spaces_in_certificate} mocker.patch.object(demisto, "params", return_value=valid_params) mcafee_mar.validate_certificates_format() + + +class TestTranslateDict(unittest.TestCase): + """ + Test cases for the translate_dict function. + """ + + def test_translate_dict_no_translation_needed(self): + """ + Test the scenario where no translation is needed. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + d = {'key1': 'value1', 'key2': 'value2'} + translator = {'key1': 'key1', 'key2': 'key2'} + expected = {'key1': 'value1', 'key2': 'value2'} + self.assertEqual(mcafee_mar.translate_dict(d, translator), expected) + + def test_translate_dict_translation_needed(self): + """ + Test the scenario where every key in the dictionary needs to be translated. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + d = {'key1': 'value1', 'key2': 'value2'} + translator = {'key1': 'new_key1', 'key2': 'new_key2'} + expected = {'new_key1': 'value1', 'new_key2': 'value2'} + self.assertEqual(mcafee_mar.translate_dict(d, translator), expected) + + def test_translate_dict_partial_translation(self): + """ + Test the scenario where only some keys in the dictionary need to be translated. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + d = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} + translator = {'key1': 'new_key1'} + expected = {'new_key1': 'value1', 'key2': 'value2', 'key3': 'value3'} + self.assertEqual(mcafee_mar.translate_dict(d, translator), expected) + + def test_translate_dict_empty_dict(self): + """ + Test the scenario where the input dictionary is empty. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + d = {} + translator = {'key1': 'new_key1', 'key2': 'new_key2'} + expected = {} + self.assertEqual(mcafee_mar.translate_dict(d, translator), expected) + + +class TestExtractItemOutput(unittest.TestCase): + """ + Test cases for the extract_item_output function. + """ + + def test_extract_item_output_no_capitalize(self): + """ + Test the scenario where 'capitalize' is False. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + item = {'output': {'Collector1|Key1': 'value1', 'Collector2|Key2': 'value2'}, 'created_at': '2023-06-20'} + capitalize = False + expected = {'created_at': '2023-06-20', 'Key1': 'value1', 'Key2': 'value2'} + self.assertEqual(mcafee_mar.extract_item_output(item, capitalize), expected) + + def test_extract_item_output_with_capitalize(self): + """ + Test the scenario where 'capitalize' is True. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + item = {'output': {'Collector1|Key1': 'value1', 'Collector2|Key2': 'value2'}, 'created_at': '2023-06-20'} + capitalize = True + expected = {'created_at': '2023-06-20', 'Key1': 'Value1', 'Key2': 'Value2'} + self.assertEqual(mcafee_mar.extract_item_output(item, capitalize), expected) + + def test_extract_item_output_no_pipe_in_key(self): + """ + Test the scenario where there is no pipe ('|') in the output keys. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + item = {'output': {'Key1': 'value1', 'Key2': 'value2'}, 'created_at': '2023-06-20'} + capitalize = False + expected = {'created_at': '2023-06-20', 'Key1': 'value1', 'Key2': 'value2'} + self.assertEqual(mcafee_mar.extract_item_output(item, capitalize), expected) + + def test_extract_item_output_empty_output(self): + """ + Test the scenario where the output in the item is empty. + """ + mcafee_mar = importlib.import_module("McAfee-MAR") + item = {'output': {}, 'created_at': '2023-06-20'} + capitalize = False + expected = {'created_at': '2023-06-20'} + self.assertEqual(mcafee_mar.extract_item_output(item, capitalize), expected) From 4f6427524339b0571d5d1a2b4d2a0e585d80d074 Mon Sep 17 00:00:00 2001 From: ashamah Date: Tue, 20 Jun 2023 11:25:58 +0300 Subject: [PATCH 3/3] fix unit tests --- Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py index a5a800f9232f..b521813cc507 100644 --- a/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py +++ b/Packs/McAfee-MAR/Integrations/McAfee-MAR/McAfee-MAR_test.py @@ -134,7 +134,7 @@ def test_extract_item_output_with_capitalize(self): mcafee_mar = importlib.import_module("McAfee-MAR") item = {'output': {'Collector1|Key1': 'value1', 'Collector2|Key2': 'value2'}, 'created_at': '2023-06-20'} capitalize = True - expected = {'created_at': '2023-06-20', 'Key1': 'Value1', 'Key2': 'Value2'} + expected = {'created_at': '2023-06-20', 'Key1': 'value1', 'Key2': 'value2'} self.assertEqual(mcafee_mar.extract_item_output(item, capitalize), expected) def test_extract_item_output_no_pipe_in_key(self):