From 2d45439ecb3c10fd05f5e96059f2558d1fc18f0e Mon Sep 17 00:00:00 2001 From: Shreya Date: Sat, 18 Jul 2020 19:10:34 +0530 Subject: [PATCH] Add test for AttackTechnique Issue with `_check_status` function since it tries to fetch from mongodb which doesn't exist in testing env --- .../attack_technique_test.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 monkey/monkey_island/cc/services/attack/technique_reports/attack_technique_test.py diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/attack_technique_test.py b/monkey/monkey_island/cc/services/attack/technique_reports/attack_technique_test.py new file mode 100644 index 000000000..ca58f9fd5 --- /dev/null +++ b/monkey/monkey_island/cc/services/attack/technique_reports/attack_technique_test.py @@ -0,0 +1,97 @@ +import json +from unittest import TestCase + +from common.utils.attack_utils import ScanStatus +from monkey_island.cc.database import mongo + +from . import AttackTechnique +from .pba_technique import PostBreachTechnique + + +class T9999(PostBreachTechnique): + tech_id = "T9999" + unscanned_msg = "Unscanned" + scanned_msg = "Scanned" + used_msg = "Used" + pba_names = ["PBA Name"] + + +config =\ + { + 'category': { + 'link': '', + 'properties': { + 'T9999': { + 'description': '', + 'link': '', + 'necessary': False, + 'title': '', + 'type': 'bool', + 'value': False # this field denotes whether technique is enabled or disabled in config + } + } + } + } + + +def set_config(value: bool): + config['category']['properties']['T9999']['value'] = value + return config + + +param_list = [ + # unscanned + ( + { # telemetry data + 'info': [], + 'message': 'Unscanned', + 'status': 0, + 'title': 'Unscanned technique' + }, + set_config(True), # configuration + ScanStatus.UNSCANNED.value # expected status + ), + + # scanned + ( + { # telemetry data + 'info': [], + 'message': 'Scanned', + 'status': 1, + 'title': 'Scanned technique' + }, + set_config(True), # configuration + ScanStatus.SCANNED.value # expected status + ), + + # used + ( + { # telemetry data + 'info': [], + 'message': 'Used', + 'status': 2, + 'title': 'Used technique' + }, + set_config(True), # configuration + ScanStatus.USED.value # expected status + ), + + # disabled + ( + { # telemetry data + 'info': [], + 'message': 'Disabled', + 'status': 0, + 'title': 'Disabled technique' + }, + set_config(False), # configuration + ScanStatus.DISABLED.value # expected status + ) +] + + +class TestAttackTechnique(TestCase): + def test__check_status(self): + for telem_data, config, expected_status in param_list: + with self.subTest(msg=f"Checking if correct status is returned (status: {telem_data['message']})"): + self.assertEqual(T9999._check_status(telem_data['status']), expected_status)