forked from p15670423/monkey
Fix zero_trust_service tests (comparison order problems)
This commit is contained in:
parent
f2297de661
commit
ab348bb12a
|
@ -1,112 +1,9 @@
|
||||||
from monkey_island.cc.services.reporting.zero_trust_service import ZeroTrustService
|
|
||||||
|
|
||||||
from common.data.zero_trust_consts import *
|
from common.data.zero_trust_consts import *
|
||||||
from monkey_island.cc.models.zero_trust.finding import Finding
|
from monkey_island.cc.models.zero_trust.finding import Finding
|
||||||
|
from monkey_island.cc.services.reporting.zero_trust_service import ZeroTrustService
|
||||||
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
|
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
|
||||||
|
|
||||||
|
EXPECTED_DICT = {
|
||||||
def save_example_findings():
|
|
||||||
# arrange
|
|
||||||
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_PASSED, []) # devices passed = 1
|
|
||||||
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_PASSED, []) # devices passed = 2
|
|
||||||
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_FAILED, []) # devices failed = 1
|
|
||||||
# devices unexecuted = 1
|
|
||||||
# people verify = 1
|
|
||||||
# networks verify = 1
|
|
||||||
Finding.save_finding(TEST_SCHEDULED_EXECUTION, STATUS_VERIFY, [])
|
|
||||||
# people verify = 2
|
|
||||||
# networks verify = 2
|
|
||||||
Finding.save_finding(TEST_SCHEDULED_EXECUTION, STATUS_VERIFY, [])
|
|
||||||
# data failed 1
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
|
||||||
# data failed 2
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
|
||||||
# data failed 3
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
|
||||||
# data failed 4
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
|
||||||
# data failed 5
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
|
||||||
# data verify 1
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_VERIFY, [])
|
|
||||||
# data verify 2
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_VERIFY, [])
|
|
||||||
# data passed 1
|
|
||||||
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_PASSED, [])
|
|
||||||
|
|
||||||
|
|
||||||
class TestZeroTrustService(IslandTestCase):
|
|
||||||
def test_get_pillars_grades(self):
|
|
||||||
self.fail_if_not_testing_env()
|
|
||||||
self.clean_finding_db()
|
|
||||||
|
|
||||||
save_example_findings()
|
|
||||||
|
|
||||||
expected = [
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 5,
|
|
||||||
STATUS_VERIFY: 2,
|
|
||||||
STATUS_PASSED: 1,
|
|
||||||
STATUS_UNEXECUTED: 1,
|
|
||||||
"pillar": "Data"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 0,
|
|
||||||
STATUS_VERIFY: 2,
|
|
||||||
STATUS_PASSED: 0,
|
|
||||||
STATUS_UNEXECUTED: 1,
|
|
||||||
"pillar": "People"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 0,
|
|
||||||
STATUS_VERIFY: 2,
|
|
||||||
STATUS_PASSED: 0,
|
|
||||||
STATUS_UNEXECUTED: 4,
|
|
||||||
"pillar": "Networks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 1,
|
|
||||||
STATUS_VERIFY: 0,
|
|
||||||
STATUS_PASSED: 2,
|
|
||||||
STATUS_UNEXECUTED: 1,
|
|
||||||
"pillar": "Devices"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 0,
|
|
||||||
STATUS_VERIFY: 0,
|
|
||||||
STATUS_PASSED: 0,
|
|
||||||
STATUS_UNEXECUTED: 0,
|
|
||||||
"pillar": "Workloads"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 0,
|
|
||||||
STATUS_VERIFY: 0,
|
|
||||||
STATUS_PASSED: 0,
|
|
||||||
STATUS_UNEXECUTED: 3,
|
|
||||||
"pillar": "Visibility & Analytics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
STATUS_FAILED: 0,
|
|
||||||
STATUS_VERIFY: 0,
|
|
||||||
STATUS_PASSED: 0,
|
|
||||||
STATUS_UNEXECUTED: 0,
|
|
||||||
"pillar": "Automation & Orchestration"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
result = ZeroTrustService.get_pillars_grades()
|
|
||||||
|
|
||||||
self.assertEqual(result, expected)
|
|
||||||
|
|
||||||
def test_get_principles_status(self):
|
|
||||||
self.fail_if_not_testing_env()
|
|
||||||
self.clean_finding_db()
|
|
||||||
|
|
||||||
self.maxDiff = None
|
|
||||||
|
|
||||||
save_example_findings()
|
|
||||||
|
|
||||||
expected = {
|
|
||||||
AUTOMATION_ORCHESTRATION: [],
|
AUTOMATION_ORCHESTRATION: [],
|
||||||
DATA: [
|
DATA: [
|
||||||
{
|
{
|
||||||
|
@ -247,10 +144,128 @@ class TestZeroTrustService(IslandTestCase):
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
WORKLOADS: []
|
WORKLOADS: []
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def save_example_findings():
|
||||||
|
# arrange
|
||||||
|
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_PASSED, []) # devices passed = 1
|
||||||
|
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_PASSED, []) # devices passed = 2
|
||||||
|
Finding.save_finding(TEST_ENDPOINT_SECURITY_EXISTS, STATUS_FAILED, []) # devices failed = 1
|
||||||
|
# devices unexecuted = 1
|
||||||
|
# people verify = 1
|
||||||
|
# networks verify = 1
|
||||||
|
Finding.save_finding(TEST_SCHEDULED_EXECUTION, STATUS_VERIFY, [])
|
||||||
|
# people verify = 2
|
||||||
|
# networks verify = 2
|
||||||
|
Finding.save_finding(TEST_SCHEDULED_EXECUTION, STATUS_VERIFY, [])
|
||||||
|
# data failed 1
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
||||||
|
# data failed 2
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
||||||
|
# data failed 3
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
||||||
|
# data failed 4
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
||||||
|
# data failed 5
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_FAILED, [])
|
||||||
|
# data verify 1
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_VERIFY, [])
|
||||||
|
# data verify 2
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_VERIFY, [])
|
||||||
|
# data passed 1
|
||||||
|
Finding.save_finding(TEST_DATA_ENDPOINT_HTTP, STATUS_PASSED, [])
|
||||||
|
|
||||||
|
|
||||||
|
class TestZeroTrustService(IslandTestCase):
|
||||||
|
def test_get_pillars_grades(self):
|
||||||
|
self.fail_if_not_testing_env()
|
||||||
|
self.clean_finding_db()
|
||||||
|
|
||||||
|
save_example_findings()
|
||||||
|
|
||||||
|
expected = [
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 5,
|
||||||
|
STATUS_VERIFY: 2,
|
||||||
|
STATUS_PASSED: 1,
|
||||||
|
STATUS_UNEXECUTED: 1,
|
||||||
|
"pillar": "Data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 0,
|
||||||
|
STATUS_VERIFY: 2,
|
||||||
|
STATUS_PASSED: 0,
|
||||||
|
STATUS_UNEXECUTED: 1,
|
||||||
|
"pillar": "People"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 0,
|
||||||
|
STATUS_VERIFY: 2,
|
||||||
|
STATUS_PASSED: 0,
|
||||||
|
STATUS_UNEXECUTED: 4,
|
||||||
|
"pillar": "Networks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 1,
|
||||||
|
STATUS_VERIFY: 0,
|
||||||
|
STATUS_PASSED: 2,
|
||||||
|
STATUS_UNEXECUTED: 1,
|
||||||
|
"pillar": "Devices"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 0,
|
||||||
|
STATUS_VERIFY: 0,
|
||||||
|
STATUS_PASSED: 0,
|
||||||
|
STATUS_UNEXECUTED: 0,
|
||||||
|
"pillar": "Workloads"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 0,
|
||||||
|
STATUS_VERIFY: 0,
|
||||||
|
STATUS_PASSED: 0,
|
||||||
|
STATUS_UNEXECUTED: 3,
|
||||||
|
"pillar": "Visibility & Analytics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
STATUS_FAILED: 0,
|
||||||
|
STATUS_VERIFY: 0,
|
||||||
|
STATUS_PASSED: 0,
|
||||||
|
STATUS_UNEXECUTED: 0,
|
||||||
|
"pillar": "Automation & Orchestration"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
result = ZeroTrustService.get_pillars_grades()
|
||||||
|
|
||||||
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
|
def test_get_principles_status(self):
|
||||||
|
self.fail_if_not_testing_env()
|
||||||
|
self.clean_finding_db()
|
||||||
|
|
||||||
|
self.maxDiff = None
|
||||||
|
|
||||||
|
save_example_findings()
|
||||||
|
|
||||||
|
expected = dict(EXPECTED_DICT) # new mutable
|
||||||
|
|
||||||
result = ZeroTrustService.get_principles_status()
|
result = ZeroTrustService.get_principles_status()
|
||||||
self.assertEqual(result, expected)
|
# Compare expected and result, no order:
|
||||||
|
for pillar_name, pillar_principles_status_result in result.items():
|
||||||
|
for index, pillar_principle_status_expected in enumerate(expected.get(pillar_name)):
|
||||||
|
correct_one = None
|
||||||
|
for pillar_principle_status_result in pillar_principles_status_result:
|
||||||
|
if pillar_principle_status_result["principle"] == pillar_principle_status_expected["principle"]:
|
||||||
|
correct_one = pillar_principle_status_result
|
||||||
|
break
|
||||||
|
|
||||||
|
# Compare tests no order
|
||||||
|
self.assertTrue(compare_lists_no_order(correct_one["tests"], pillar_principle_status_expected["tests"]))
|
||||||
|
# Compare the rest
|
||||||
|
del pillar_principle_status_expected["tests"]
|
||||||
|
del correct_one["tests"]
|
||||||
|
self.assertEqual(sorted(correct_one), sorted(pillar_principle_status_expected))
|
||||||
|
|
||||||
def test_get_pillars_to_statuses(self):
|
def test_get_pillars_to_statuses(self):
|
||||||
self.fail_if_not_testing_env()
|
self.fail_if_not_testing_env()
|
||||||
|
@ -283,3 +298,13 @@ class TestZeroTrustService(IslandTestCase):
|
||||||
}
|
}
|
||||||
|
|
||||||
self.assertEqual(ZeroTrustService.get_pillars_to_statuses(), expected)
|
self.assertEqual(ZeroTrustService.get_pillars_to_statuses(), expected)
|
||||||
|
|
||||||
|
|
||||||
|
def compare_lists_no_order(s, t):
|
||||||
|
t = list(t) # make a mutable copy
|
||||||
|
try:
|
||||||
|
for elem in s:
|
||||||
|
t.remove(elem)
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
return not t
|
||||||
|
|
Loading…
Reference in New Issue