Skip to content

Commit 9eea140

Browse files
authored
Merge pull request #405 from Limmen/aggregatedHost
add aggregatedHostMetricsThread test
2 parents 43ab46a + ed2ca4b commit 9eea140

File tree

3 files changed

+118
-2
lines changed

3 files changed

+118
-2
lines changed

simulation-system/libs/csle-common/src/csle_common/consumer_threads/aggregated_host_metrics_thread.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def __init__(self, host_metrics: HostMetrics,
1717
Initializes the thread
1818
1919
:param host_metrics: the host metrics to update
20-
:param machines: the list of machiens to update the host metrics with
20+
:param machines: the list of machines to update the host metrics with
2121
"""
2222
threading.Thread.__init__(self)
2323
self.machines = machines

simulation-system/libs/csle-common/src/csle_common/util/export_util.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def zipdir(dir_path: str, file_path: str) -> None:
3535
@staticmethod
3636
def get_dir_size_gb(dir_path: str = '.') -> float:
3737
"""
38-
Utility method to calculate the zie of a file directory in gb
38+
Utility method to calculate the size of a file directory in gb
3939
4040
:param dir_path: the path to the directory
4141
:return: the size of the directory in GB
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
from typing import List
2+
from unittest.mock import MagicMock, patch
3+
from csle_common.consumer_threads.aggregated_host_metrics_thread import AggregatedHostMetricsThread
4+
from csle_collector.host_manager.dao.host_metrics import HostMetrics
5+
from csle_common.dao.emulation_observation.defender.emulation_defender_machine_observation_state import (
6+
EmulationDefenderMachineObservationState,
7+
)
8+
9+
10+
class TestSuiteAggregatedHostMetricsThread:
11+
"""
12+
Test suite for AggregatedHostMetricsThread
13+
"""
14+
def test_initialization(self) -> None:
15+
"""
16+
Test the initialization function
17+
18+
:return: None
19+
"""
20+
host_metrics = HostMetrics
21+
mock_machine = MagicMock(spec='EmulationDefenderMachineObservationState')
22+
mock_machines = [mock_machine, mock_machine]
23+
sleep_time = 3
24+
thread = AggregatedHostMetricsThread(host_metrics=host_metrics, machines=mock_machines, sleep_time=sleep_time)
25+
assert thread.host_metrics == host_metrics
26+
assert thread.machines == mock_machines
27+
assert thread.sleep_time == sleep_time
28+
29+
@patch("time.sleep", return_value=None)
30+
def test_run(self, mock_sleep) -> None:
31+
"""
32+
Test the method that runs the thread
33+
34+
:param mock_sleep: mock_sleep
35+
36+
:return: None
37+
"""
38+
mock_host_metrics_1 = MagicMock(spec="HostMetrics")
39+
mock_host_metrics_1.num_logged_in_users = 5
40+
mock_host_metrics_1.num_failed_login_attempts = 2
41+
mock_host_metrics_1.num_open_connections = 10
42+
mock_host_metrics_1.num_login_events = 7
43+
mock_host_metrics_1.num_processes = 50
44+
mock_host_metrics_1.num_users = 3
45+
46+
mock_host_metrics_2 = MagicMock(spec="HostMetrics")
47+
mock_host_metrics_2.num_logged_in_users = 3
48+
mock_host_metrics_2.num_failed_login_attempts = 1
49+
mock_host_metrics_2.num_open_connections = 5
50+
mock_host_metrics_2.num_login_events = 4
51+
mock_host_metrics_2.num_processes = 30
52+
mock_host_metrics_2.num_users = 2
53+
54+
mock_machine_1 = MagicMock(spec="EmulationDefenderMachineObservationState")
55+
mock_machine_1.host_metrics = mock_host_metrics_1
56+
57+
mock_machine_2 = MagicMock(spec="EmulationDefenderMachineObservationState")
58+
mock_machine_2.host_metrics = mock_host_metrics_2
59+
60+
mock_machines = [mock_machine_1, mock_machine_2]
61+
62+
mock_aggregated_host_metrics = MagicMock(spec="HostMetrics")
63+
mock_aggregated_host_metrics.copy = MagicMock(spec="HostMetrics")
64+
mock_aggregated_host_metrics.copy.return_value = MagicMock(spec="HostMetrics")
65+
66+
sleep_time = 1
67+
68+
thread = AggregatedHostMetricsThread(
69+
host_metrics=mock_aggregated_host_metrics, machines=mock_machines, sleep_time=sleep_time
70+
)
71+
72+
def stop_running(*args, **kwargs):
73+
thread.running = False
74+
75+
mock_sleep.side_effect = stop_running
76+
thread.run()
77+
assert thread.host_metrics.num_logged_in_users == 8
78+
assert thread.host_metrics.num_failed_login_attempts == 3
79+
assert thread.host_metrics.num_open_connections == 15
80+
assert thread.host_metrics.num_login_events == 11
81+
assert thread.host_metrics.num_processes == 80
82+
assert thread.host_metrics.num_users == 5
83+
84+
def test_get_average_aggregated_host_metrics(self) -> None:
85+
"""
86+
Test the method that returns the average of the list of aggregated host metrics
87+
88+
:return: None
89+
"""
90+
mock_host_metrics_1 = MagicMock(spec="HostMetrics")
91+
mock_host_metrics_1.num_logged_in_users = 10
92+
mock_host_metrics_1.num_failed_login_attempts = 5
93+
mock_host_metrics_1.num_open_connections = 15
94+
mock_host_metrics_1.num_login_events = 20
95+
mock_host_metrics_1.num_processes = 25
96+
mock_host_metrics_1.num_users = 30
97+
98+
mock_host_metrics_2 = MagicMock(spec="HostMetrics")
99+
mock_host_metrics_2.num_logged_in_users = 20
100+
mock_host_metrics_2.num_failed_login_attempts = 10
101+
mock_host_metrics_2.num_open_connections = 25
102+
mock_host_metrics_2.num_login_events = 30
103+
mock_host_metrics_2.num_processes = 35
104+
mock_host_metrics_2.num_users = 40
105+
106+
thread = thread = AggregatedHostMetricsThread(
107+
host_metrics=MagicMock(spec="HostMetrics"), machines=[], sleep_time=1
108+
)
109+
thread.host_metrics_list = [mock_host_metrics_1, mock_host_metrics_2]
110+
avg_metrics = thread.get_average_aggregated_host_metrics()
111+
assert avg_metrics.num_logged_in_users == 15
112+
assert avg_metrics.num_failed_login_attempts == 8
113+
assert avg_metrics.num_open_connections == 20
114+
assert avg_metrics.num_login_events == 25
115+
assert avg_metrics.num_processes == 30
116+
assert avg_metrics.num_users == 35

0 commit comments

Comments
 (0)