|
| 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