Skip to content

Commit 02698c7

Browse files
authored
Merge pull request #395 from Limmen/read_emulation
unit test read_emulation_util
2 parents 96fa707 + 41ba2a8 commit 02698c7

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
from csle_common.util.read_emulation_statistics_util import ReadEmulationStatisticsUtil
2+
from csle_collector.host_manager.dao.host_metrics import HostMetrics
3+
from csle_collector.ossec_ids_manager.dao.ossec_ids_alert_counters import OSSECIdsAlertCounters
4+
from csle_collector.snort_ids_manager.dao.snort_ids_alert_counters import SnortIdsAlertCounters
5+
from csle_collector.snort_ids_manager.dao.snort_ids_rule_counters import SnortIdsRuleCounters
6+
import csle_collector.constants.constants as constants
7+
import numpy as np
8+
9+
10+
class TestReadEmulationUtilSuite:
11+
"""
12+
Test suite for read_emulation_util
13+
"""
14+
15+
def test_average_host_metrics(self) -> None:
16+
"""
17+
Test the method that computes the average metrics from a list of host metrics
18+
19+
:return: None
20+
"""
21+
metrics1 = HostMetrics(
22+
num_logged_in_users=5,
23+
num_failed_login_attempts=2,
24+
num_open_connections=10,
25+
num_login_events=3,
26+
num_processes=50,
27+
num_users=5,
28+
)
29+
metrics2 = HostMetrics(
30+
num_logged_in_users=7,
31+
num_failed_login_attempts=4,
32+
num_open_connections=14,
33+
num_login_events=5,
34+
num_processes=60,
35+
num_users=6,
36+
)
37+
38+
metrics3 = HostMetrics(
39+
num_logged_in_users=6,
40+
num_failed_login_attempts=3,
41+
num_open_connections=12,
42+
num_login_events=4,
43+
num_processes=55,
44+
num_users=7,
45+
)
46+
47+
average_metrics = ReadEmulationStatisticsUtil.average_host_metrics([metrics1, metrics2, metrics3])
48+
49+
assert average_metrics.num_logged_in_users == 18
50+
assert average_metrics.num_failed_login_attempts == 9
51+
assert average_metrics.num_open_connections == 36
52+
assert average_metrics.num_login_events == 12
53+
assert average_metrics.num_processes == 165
54+
assert average_metrics.num_users == 18
55+
56+
def test_average_ossec_metrics(self) -> None:
57+
"""
58+
Test the method that computes the average metrics from a list of OSSEC metrics
59+
60+
:return: None
61+
"""
62+
metrics1 = OSSECIdsAlertCounters()
63+
metrics1.level_alerts = list(np.zeros(16))
64+
metrics1.group_alerts = list(np.zeros(len(set(constants.OSSEC.OSSEC_IDS_ALERT_GROUP_ID.values()))))
65+
metrics1.severe_alerts = 5
66+
metrics1.warning_alerts = 3
67+
metrics1.total_alerts = 10
68+
metrics1.alerts_weighted_by_level = 20
69+
70+
metrics2 = OSSECIdsAlertCounters()
71+
metrics2.level_alerts = list(np.zeros(16))
72+
metrics2.group_alerts = list(np.zeros(len(set(constants.OSSEC.OSSEC_IDS_ALERT_GROUP_ID.values()))))
73+
metrics2.severe_alerts = 10
74+
metrics2.warning_alerts = 6
75+
metrics2.total_alerts = 20
76+
metrics2.alerts_weighted_by_level = 40
77+
78+
average_metrics = ReadEmulationStatisticsUtil.average_ossec_metrics([metrics1, metrics2])
79+
80+
assert average_metrics.level_alerts == [0] * 16
81+
assert average_metrics.group_alerts == [0] * len(set(constants.OSSEC.OSSEC_IDS_ALERT_GROUP_ID.values()))
82+
assert average_metrics.severe_alerts == 15
83+
assert average_metrics.warning_alerts == 9
84+
assert average_metrics.total_alerts == 30
85+
assert average_metrics.alerts_weighted_by_level == 60
86+
87+
def test_average_snort_metrics(self) -> None:
88+
"""
89+
Test the method that computes the average metrics from a list of Snort metrics
90+
91+
:return: None
92+
"""
93+
metrics1 = SnortIdsAlertCounters()
94+
metrics1.priority_alerts = [0] * 4
95+
metrics1.class_alerts = []
96+
for i in range(len(set(constants.SNORT_IDS_ROUTER.SNORT_ALERT_IDS_ID.values()))):
97+
metrics1.class_alerts.append(0)
98+
metrics1.severe_alerts = 5
99+
metrics1.warning_alerts = 3
100+
metrics1.total_alerts = 10
101+
metrics1.alerts_weighted_by_priority = 20
102+
103+
metrics2 = SnortIdsAlertCounters()
104+
metrics2.priority_alerts = [0] * 4
105+
metrics2.class_alerts = []
106+
for i in range(len(set(constants.SNORT_IDS_ROUTER.SNORT_ALERT_IDS_ID.values()))):
107+
metrics2.class_alerts.append(0)
108+
metrics2.severe_alerts = 10
109+
metrics2.warning_alerts = 6
110+
metrics2.total_alerts = 20
111+
metrics2.alerts_weighted_by_priority = 40
112+
113+
average_metrics = ReadEmulationStatisticsUtil.average_snort_metrics([metrics1, metrics2])
114+
115+
assert average_metrics.priority_alerts == [0] * 4
116+
assert average_metrics.class_alerts == [0] * len(set(constants.SNORT_IDS_ROUTER.SNORT_ALERT_IDS_ID.values()))
117+
assert average_metrics.severe_alerts == 15
118+
assert average_metrics.warning_alerts == 9
119+
assert average_metrics.total_alerts == 30
120+
assert average_metrics.alerts_weighted_by_priority == 60
121+
122+
def test_average_snort_rule_metrics(self) -> None:
123+
"""
124+
Test the method that computes the average metrics from a list of Snort rule metrics
125+
126+
:return: None
127+
"""
128+
metrics1 = SnortIdsRuleCounters()
129+
metrics1.rule_alerts = {}
130+
131+
metrics2 = SnortIdsAlertCounters()
132+
metrics2.rule_alerts = {}
133+
134+
average_metrics = ReadEmulationStatisticsUtil.average_snort_rule_metrics([metrics1, metrics2])
135+
136+
assert average_metrics.rule_alerts == {}

0 commit comments

Comments
 (0)