Skip to content

Commit ad8c4b9

Browse files
authored
Merge pull request #384 from Limmen/topology
add unit test for topology_controller
2 parents 4b79964 + 5682c97 commit ad8c4b9

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from unittest.mock import patch, MagicMock
2+
import csle_common.constants.constants as constants
3+
from csle_common.controllers.topology_controller import TopologyController
4+
5+
6+
class TestTopologyControllerSuite:
7+
"""
8+
Test suite for topology controller
9+
"""
10+
11+
@patch("csle_common.util.emulation_util.EmulationUtil.connect_admin")
12+
@patch("csle_common.util.emulation_util.EmulationUtil.execute_ssh_cmd")
13+
@patch("csle_common.util.emulation_util.EmulationUtil.disconnect_admin")
14+
def test_create_topology(self, mock_disconnect_admin, mock_execute_ssh_cmd, mock_connect_admin) -> None:
15+
"""
16+
Test the utility function for connecting to a running emulation and creating the configuration
17+
18+
:param mock_disconnect_admin: mock_disconnect_admin
19+
:param mock_execute_ssh_cmd: mock_execute_ssh_cmd
20+
:param mock_connect_admin: mock_connect_admin
21+
22+
:return: None
23+
"""
24+
logger = MagicMock()
25+
# configure mock route and firewall
26+
mock_route = ("192.168.0.0/24", "192.168.1.1")
27+
mock_fw_config = MagicMock()
28+
mock_fw_config.physical_host_ip = "192.168.1.100"
29+
mock_fw_config.docker_gw_bridge_ip = "10.0.0.1"
30+
mock_fw_config.routes = [mock_route]
31+
mock_fw_config.ips_gw_default_policy_networks = []
32+
mock_fw_config.output_accept = []
33+
mock_fw_config.input_accept = []
34+
mock_fw_config.forward_accept = []
35+
mock_fw_config.output_drop = []
36+
mock_fw_config.input_drop = []
37+
mock_fw_config.forward_drop = []
38+
node_configs = [mock_fw_config]
39+
# configure mock topology and kafka
40+
topology_config = MagicMock()
41+
topology_config.node_configs = node_configs
42+
kafka_config = MagicMock()
43+
kafka_config.firewall_config = mock_fw_config
44+
# configure mock emulation environment
45+
emulation_env_config = MagicMock()
46+
emulation_env_config.topology_config = topology_config
47+
emulation_env_config.kafka_config = kafka_config
48+
emulation_env_config.sdn_controller_config = None
49+
emulation_env_config.get_connection.return_value = MagicMock()
50+
emulation_env_config.execution_id = "test_execution_id"
51+
emulation_env_config.level = "test_level"
52+
# set return values of execute_ssh_cmd
53+
mock_execute_ssh_cmd.return_value = (b"", b"", 0)
54+
TopologyController.create_topology(
55+
emulation_env_config=emulation_env_config, physical_server_ip="192.168.1.100", logger=logger
56+
)
57+
mock_connect_admin.assert_called()
58+
expected_cmd = f"{constants.COMMANDS.SUDO_ADD_ROUTE} 192.168.0.0/24 gw 192.168.1.1"
59+
mock_execute_ssh_cmd.assert_any_call(
60+
cmd=expected_cmd, conn=emulation_env_config.get_connection.return_value, wait_for_completion=True
61+
)
62+
mock_disconnect_admin.assert_called()
63+
logger.info.assert_any_call("Creating topology")
64+
logger.info.assert_any_call("Connecting to node:10.0.0.1")
65+
logger.info.assert_any_call(f"Adding route: {expected_cmd} to routing table of node: 10.0.0.1")

0 commit comments

Comments
 (0)