From b9d2cd25f3b992349bb156c646dbab7f66106388 Mon Sep 17 00:00:00 2001 From: Charlie Crane Date: Thu, 23 Jan 2025 15:28:10 +0000 Subject: [PATCH] #2887 - Unit test fixes ahead of raising PR. --- src/primaite/game/agent/actions/node.py | 1 - src/primaite/simulator/network/creation.py | 23 +-- .../simulator/network/hardware/base.py | 2 +- .../network/hardware/nodes/network/switch.py | 2 +- src/primaite/simulator/network/networks.py | 135 ++++++++++-------- tests/conftest.py | 9 +- .../_network/_hardware/nodes/test_acl.py | 9 +- .../_network/_hardware/nodes/test_router.py | 2 +- .../_network/_hardware/nodes/test_switch.py | 6 +- .../test_network_interface_actions.py | 8 +- .../_network/_hardware/test_node_actions.py | 18 ++- .../_simulator/_network/test_container.py | 6 +- .../_simulator/_network/test_creation.py | 2 +- .../_red_applications/test_c2_suite.py | 24 ++-- .../_red_applications/test_dos_bot.py | 11 +- .../_applications/test_database_client.py | 8 +- .../_system/_services/test_database.py | 9 +- .../_system/_services/test_dns_client.py | 22 ++- .../_system/_services/test_dns_server.py | 22 +-- .../_system/_services/test_ftp_client.py | 17 +-- .../_system/_services/test_ftp_server.py | 14 +- .../_system/_services/test_web_server.py | 14 +- 22 files changed, 222 insertions(+), 142 deletions(-) diff --git a/src/primaite/game/agent/actions/node.py b/src/primaite/game/agent/actions/node.py index fbab18f0..5e1b6725 100644 --- a/src/primaite/game/agent/actions/node.py +++ b/src/primaite/game/agent/actions/node.py @@ -36,7 +36,6 @@ class NodeAbstractAction(AbstractAction, identifier="node_abstract"): @classmethod def form_request(cls, config: ConfigSchema) -> RequestFormat: """Return the action formatted as a request which can be ingested by the PrimAITE simulation.""" - print(config) return ["network", "node", config.node_name, config.verb] diff --git a/src/primaite/simulator/network/creation.py b/src/primaite/simulator/network/creation.py index ebd17638..3221939b 100644 --- a/src/primaite/simulator/network/creation.py +++ b/src/primaite/simulator/network/creation.py @@ -153,7 +153,7 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): # Create a core switch if more than one edge switch is needed if num_of_switches > 1: - core_switch = Switch(hostname=f"switch_core_{config.lan_name}", start_up_duration=0) + core_switch = Switch.from_config(config = {"type":"switch","hostname":f"switch_core_{config.lan_name}", "start_up_duration": 0 }) core_switch.power_on() network.add_node(core_switch) core_switch_port = 1 @@ -164,7 +164,8 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): # Optionally include a router in the LAN if config.include_router: default_gateway = IPv4Address(f"192.168.{config.subnet_base}.1") - router = Router(hostname=f"router_{config.lan_name}", start_up_duration=0) + # router = Router(hostname=f"router_{config.lan_name}", start_up_duration=0) + router = Router.from_config(config={"hostname":f"router_{config.lan_name}", "type": "router", "start_up_duration": 0}) router.power_on() router.acl.add_rule( action=ACLAction.PERMIT, src_port=PORT_LOOKUP["ARP"], dst_port=PORT_LOOKUP["ARP"], position=22 @@ -177,7 +178,7 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): # Initialise the first edge switch and connect to the router or core switch switch_port = 0 switch_n = 1 - switch = Switch(hostname=f"switch_edge_{switch_n}_{config.lan_name}", start_up_duration=0) + switch = Switch.from_config(config={"type": "switch","hostname":f"switch_edge_{switch_n}_{config.lan_name}", "start_up_duration":0}) switch.power_on() network.add_node(switch) if num_of_switches > 1: @@ -195,7 +196,7 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): if switch_port == effective_network_interface: switch_n += 1 switch_port = 0 - switch = Switch(hostname=f"switch_edge_{switch_n}_{config.lan_name}", start_up_duration=0) + switch = Switch.from_config(config={"type": "switch","hostname":f"switch_edge_{switch_n}_{config.lan_name}", "start_up_duration":0}) switch.power_on() network.add_node(switch) # Connect the new switch to the router or core switch @@ -212,13 +213,13 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): ) # Create and add a PC to the network - pc = Computer( - hostname=f"pc_{i}_{config.lan_name}", - ip_address=f"192.168.{config.subnet_base}.{i+config.pcs_ip_block_start-1}", - subnet_mask="255.255.255.0", - default_gateway=default_gateway, - start_up_duration=0, - ) + pc_cfg = {"type": "computer", + "hostname": f"pc_{i}_{config.lan_name}", + "ip_address": f"192.168.{config.subnet_base}.{i+config.pcs_ip_block_start-1}", + "default_gateway": "192.168.10.1", + "start_up_duration": 0, + } + pc = Computer.from_config(config = pc_cfg) pc.power_on() network.add_node(pc) diff --git a/src/primaite/simulator/network/hardware/base.py b/src/primaite/simulator/network/hardware/base.py index 872b1bdf..f68b627a 100644 --- a/src/primaite/simulator/network/hardware/base.py +++ b/src/primaite/simulator/network/hardware/base.py @@ -1979,7 +1979,7 @@ class Node(SimComponent, ABC): else: if self.operating_state == NodeOperatingState.SHUTTING_DOWN: self.operating_state = NodeOperatingState.OFF - self.sys_log.info(f"{self.hostname}: Turned off") + self.sys_log.info(f"{self.config.hostname}: Turned off") self._shut_down_actions() # if resetting turn back on diff --git a/src/primaite/simulator/network/hardware/nodes/network/switch.py b/src/primaite/simulator/network/hardware/nodes/network/switch.py index 2ca0cafd..e97c5321 100644 --- a/src/primaite/simulator/network/hardware/nodes/network/switch.py +++ b/src/primaite/simulator/network/hardware/nodes/network/switch.py @@ -129,7 +129,7 @@ class Switch(NetworkNode, identifier="switch"): if markdown: table.set_style(MARKDOWN) table.align = "l" - table.title = f"{self.hostname} Switch Ports" + table.title = f"{self.config.hostname} Switch Ports" for port_num, port in self.network_interface.items(): table.add_row([port_num, port.mac_address, port.speed, "Enabled" if port.enabled else "Disabled"]) print(table) diff --git a/src/primaite/simulator/network/networks.py b/src/primaite/simulator/network/networks.py index c840748e..4d881343 100644 --- a/src/primaite/simulator/network/networks.py +++ b/src/primaite/simulator/network/networks.py @@ -128,32 +128,34 @@ def arcd_uc2_network() -> Network: network = Network() # Router 1 - router_1 = Router(hostname="router_1", num_ports=5, start_up_duration=0) + router_1 = Router.from_config(config={"type":"router", "hostname":"router_1", "num_ports":5, "start_up_duration":0}) router_1.power_on() router_1.configure_port(port=1, ip_address="192.168.1.1", subnet_mask="255.255.255.0") router_1.configure_port(port=2, ip_address="192.168.10.1", subnet_mask="255.255.255.0") # Switch 1 - switch_1 = Switch(hostname="switch_1", num_ports=8, start_up_duration=0) + switch_1 = Switch.from_config(config={"type":"switch", "hostname":"switch_1", "num_ports":8, "start_up_duration":0}) switch_1.power_on() network.connect(endpoint_a=router_1.network_interface[1], endpoint_b=switch_1.network_interface[8]) router_1.enable_port(1) # Switch 2 - switch_2 = Switch(hostname="switch_2", num_ports=8, start_up_duration=0) + switch_2 = Switch.from_config(config={"type":"switch", "hostname":"switch_2", "num_ports":8, "start_up_duration":0}) switch_2.power_on() network.connect(endpoint_a=router_1.network_interface[2], endpoint_b=switch_2.network_interface[8]) router_1.enable_port(2) # Client 1 - client_1 = Computer( - hostname="client_1", - ip_address="192.168.10.21", - subnet_mask="255.255.255.0", - default_gateway="192.168.10.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + client_1_cfg = {"type": "computer", + "hostname": "client_1", + "ip_address": "192.168.10.21", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.10.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0, + } + client_1: Computer = Computer.from_config(config = client_1_cfg) + client_1.power_on() network.connect(endpoint_b=client_1.network_interface[1], endpoint_a=switch_2.network_interface[1]) client_1.software_manager.install(DatabaseClient) @@ -172,14 +174,17 @@ def arcd_uc2_network() -> Network: ) # Client 2 - client_2 = Computer( - hostname="client_2", - ip_address="192.168.10.22", - subnet_mask="255.255.255.0", - default_gateway="192.168.10.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + + client_2_cfg = {"type": "computer", + "hostname": "client_2", + "ip_address": "192.168.10.22", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.10.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0, + } + client_2: Computer = Computer.from_config(config = client_2_cfg) + client_2.power_on() client_2.software_manager.install(DatabaseClient) db_client_2 = client_2.software_manager.software.get("DatabaseClient") @@ -193,27 +198,34 @@ def arcd_uc2_network() -> Network: ) # Domain Controller - domain_controller = Server( - hostname="domain_controller", - ip_address="192.168.1.10", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - start_up_duration=0, - ) + + domain_controller_cfg = {"type": "server", + "hostname": "domain_controller", + "ip_address": "192.168.1.10", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "start_up_duration": 0 + } + + domain_controller = Server.from_config(config=domain_controller_cfg) domain_controller.power_on() domain_controller.software_manager.install(DNSServer) network.connect(endpoint_b=domain_controller.network_interface[1], endpoint_a=switch_1.network_interface[1]) # Database Server - database_server = Server( - hostname="database_server", - ip_address="192.168.1.14", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + + database_server_cfg = {"type": "server", + "hostname": "database_server", + "ip_address": "192.168.1.14", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0 + } + + database_server = Server.from_config(config=database_server_cfg) + database_server.power_on() network.connect(endpoint_b=database_server.network_interface[1], endpoint_a=switch_1.network_interface[3]) @@ -223,14 +235,18 @@ def arcd_uc2_network() -> Network: database_service.configure_backup(backup_server=IPv4Address("192.168.1.16")) # Web Server - web_server = Server( - hostname="web_server", - ip_address="192.168.1.12", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + + + web_server_cfg = {"type": "server", + "hostname": "web_server", + "ip_address": "192.168.1.11", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0 + } + web_server = Server.from_config(config=web_server_cfg) + web_server.power_on() web_server.software_manager.install(DatabaseClient) @@ -247,27 +263,30 @@ def arcd_uc2_network() -> Network: dns_server_service.dns_register("arcd.com", web_server.network_interface[1].ip_address) # Backup Server - backup_server = Server( - hostname="backup_server", - ip_address="192.168.1.16", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + backup_server_cfg = {"type": "server", + "hostname": "backup_server", + "ip_address": "192.168.1.16", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0 + } + backup_server: Server = Server.from_config(config=backup_server_cfg) + backup_server.power_on() backup_server.software_manager.install(FTPServer) network.connect(endpoint_b=backup_server.network_interface[1], endpoint_a=switch_1.network_interface[4]) # Security Suite - security_suite = Server( - hostname="security_suite", - ip_address="192.168.1.110", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - dns_server=IPv4Address("192.168.1.10"), - start_up_duration=0, - ) + security_suite_cfg = {"type": "server", + "hostname": "backup_server", + "ip_address": "192.168.1.110", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": IPv4Address("192.168.1.10"), + "start_up_duration": 0 + } + security_suite: Server = Server.from_config(config=security_suite_cfg) security_suite.power_on() network.connect(endpoint_b=security_suite.network_interface[1], endpoint_a=switch_1.network_interface[7]) security_suite.connect_nic(NIC(ip_address="192.168.10.110", subnet_mask="255.255.255.0")) diff --git a/tests/conftest.py b/tests/conftest.py index 287f216c..fc86bb4d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -119,7 +119,14 @@ def application_class(): @pytest.fixture(scope="function") def file_system() -> FileSystem: - computer = Computer(hostname="fs_node", ip_address="192.168.1.2", subnet_mask="255.255.255.0", start_up_duration=0) + # computer = Computer(hostname="fs_node", ip_address="192.168.1.2", subnet_mask="255.255.255.0", start_up_duration=0) + computer_cfg = {"type": "computer", + "hostname": "fs_node", + "ip_address": "192.168.1.2", + "subnet_mask": "255.255.255.0", + "start_up_duration": 0, + } + computer = Computer.from_config(config=computer_cfg) computer.power_on() return computer.file_system diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_acl.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_acl.py index 79392d66..ee7eb08f 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_acl.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_acl.py @@ -25,7 +25,8 @@ def router_with_acl_rules(): :return: A configured Router object with ACL rules. """ - router = Router("Router") + router_cfg = {"hostname": "router_1", "type": "router"} + router = Router.from_config(config=router_cfg) acl = router.acl # Add rules here as needed acl.add_rule( @@ -62,7 +63,8 @@ def router_with_wildcard_acl(): :return: A Router object with configured ACL rules, including rules with wildcard masking. """ - router = Router("Router") + router_cfg = {"hostname": "router_1", "type": "router"} + router = Router.from_config(config=router_cfg) acl = router.acl # Rule to permit traffic from a specific source IP and port to a specific destination IP and port acl.add_rule( @@ -243,7 +245,8 @@ def test_ip_traffic_from_specific_subnet(): - Traffic from outside the 192.168.1.0/24 subnet is denied. """ - router = Router("Router") + router_cfg = {"hostname": "router_1", "type": "router"} + router = Router.from_config(config=router_cfg) acl = router.acl # Add rules here as needed acl.add_rule( diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_router.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_router.py index 5a0ebe8f..e9d16533 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_router.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_router.py @@ -52,7 +52,7 @@ def test_wireless_router_from_config(): rt = Router.from_config(config=cfg) - assert rt.num_ports == 6 + assert rt.config.num_ports == 6 assert rt.network_interface[1].ip_address == IPv4Address("192.168.1.1") assert rt.network_interface[1].subnet_mask == IPv4Address("255.255.255.0") diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_switch.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_switch.py index e6bff60e..dbc04f6d 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_switch.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/nodes/test_switch.py @@ -7,7 +7,11 @@ from primaite.simulator.network.hardware.nodes.network.switch import Switch @pytest.fixture(scope="function") def switch() -> Switch: - switch: Switch = Switch(hostname="switch_1", num_ports=8, start_up_duration=0) + switch_cfg = {"type": "switch", + "hostname": "switch_1", + "num_ports": 8, + "start_up_duration": 0} + switch: Switch = Switch.from_config(config=switch_cfg) switch.power_on() switch.show() return switch diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_network_interface_actions.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_network_interface_actions.py index 5cff4407..0e0023cd 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_network_interface_actions.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_network_interface_actions.py @@ -7,7 +7,13 @@ from primaite.simulator.network.hardware.nodes.host.computer import Computer @pytest.fixture def node() -> Node: - return Computer(hostname="test", ip_address="192.168.1.2", subnet_mask="255.255.255.0") + computer_cfg = {"type": "computer", + "hostname": "test", + "ip_address": "192.168.1.2", + "subnet_mask": "255.255.255.0"} + computer = Computer.from_config(config=computer_cfg) + + return computer def test_nic_enabled_validator(node): diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py index 672a4b5f..d077f46b 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py @@ -12,8 +12,16 @@ from tests.conftest import DummyApplication, DummyService @pytest.fixture def node() -> Node: - return Computer(hostname="test", ip_address="192.168.1.2", subnet_mask="255.255.255.0") + computer_cfg = {"type": "computer", + "hostname": "test", + "ip_address": "192.168.1.2", + "subnet_mask": "255.255.255.0", + "shut_down_duration": 3, + "operating_state": "OFF", + } + computer = Computer.from_config(config=computer_cfg) + return computer def test_node_startup(node): assert node.operating_state == NodeOperatingState.OFF @@ -166,7 +174,7 @@ def test_node_is_on_validator(node): """Test that the node is on validator.""" node.power_on() - for i in range(node.start_up_duration + 1): + for i in range(node.config.start_up_duration + 1): node.apply_timestep(i) validator = Node._NodeIsOnValidator(node=node) @@ -174,7 +182,7 @@ def test_node_is_on_validator(node): assert validator(request=[], context={}) node.power_off() - for i in range(node.shut_down_duration + 1): + for i in range(node.config.shut_down_duration + 1): node.apply_timestep(i) assert validator(request=[], context={}) is False @@ -184,7 +192,7 @@ def test_node_is_off_validator(node): """Test that the node is on validator.""" node.power_on() - for i in range(node.start_up_duration + 1): + for i in range(node.config.start_up_duration + 1): node.apply_timestep(i) validator = Node._NodeIsOffValidator(node=node) @@ -192,7 +200,7 @@ def test_node_is_off_validator(node): assert validator(request=[], context={}) is False node.power_off() - for i in range(node.shut_down_duration + 1): + for i in range(node.config.shut_down_duration + 1): node.apply_timestep(i) assert validator(request=[], context={}) diff --git a/tests/unit_tests/_primaite/_simulator/_network/test_container.py b/tests/unit_tests/_primaite/_simulator/_network/test_container.py index b1de710a..d175b865 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/test_container.py +++ b/tests/unit_tests/_primaite/_simulator/_network/test_container.py @@ -61,12 +61,12 @@ def test_apply_timestep_to_nodes(network): client_1.power_off() assert client_1.operating_state is NodeOperatingState.SHUTTING_DOWN - for i in range(client_1.shut_down_duration + 1): + for i in range(client_1.config.shut_down_duration + 1): network.apply_timestep(timestep=i) assert client_1.operating_state is NodeOperatingState.OFF - network.apply_timestep(client_1.shut_down_duration + 2) + network.apply_timestep(client_1.config.shut_down_duration + 2) assert client_1.operating_state is NodeOperatingState.OFF @@ -74,7 +74,7 @@ def test_removing_node_that_does_not_exist(network): """Node that does not exist on network should not affect existing nodes.""" assert len(network.nodes) is 7 - network.remove_node(Computer(hostname="new_node", ip_address="192.168.1.2", subnet_mask="255.255.255.0")) + network.remove_node(Computer.from_config(config = {"type":"computer","hostname":"new_node", "ip_address":"192.168.1.2", "subnet_mask":"255.255.255.0"})) assert len(network.nodes) is 7 diff --git a/tests/unit_tests/_primaite/_simulator/_network/test_creation.py b/tests/unit_tests/_primaite/_simulator/_network/test_creation.py index 9885df67..29331d08 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/test_creation.py +++ b/tests/unit_tests/_primaite/_simulator/_network/test_creation.py @@ -19,7 +19,7 @@ def _assert_valid_creation(net: Network, lan_name, subnet_base, pcs_ip_block_sta num_routers = 1 if include_router else 0 total_nodes = num_pcs + num_switches + num_routers - assert all((n.hostname.endswith(lan_name) for n in net.nodes.values())) + assert all((n.config.hostname.endswith(lan_name) for n in net.nodes.values())) assert len(net.computer_nodes) == num_pcs assert len(net.switch_nodes) == num_switches assert len(net.router_nodes) == num_routers diff --git a/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_c2_suite.py b/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_c2_suite.py index 17f8445a..5d8bea80 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_c2_suite.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_c2_suite.py @@ -16,19 +16,25 @@ def basic_c2_network() -> Network: network = Network() # Creating two generic nodes for the C2 Server and the C2 Beacon. + computer_a_cfg = {"type": "computer", + "hostname": "computer_a", + "ip_address": "192.168.0.1", + "subnet_mask": "255.255.255.252", + "start_up_duration": 0} + computer_a = Computer.from_config(config = computer_a_cfg) - computer_a = Computer( - hostname="computer_a", - ip_address="192.168.0.1", - subnet_mask="255.255.255.252", - start_up_duration=0, - ) computer_a.power_on() computer_a.software_manager.install(software_class=C2Server) - computer_b = Computer( - hostname="computer_b", ip_address="192.168.0.2", subnet_mask="255.255.255.252", start_up_duration=0 - ) + + computer_b_cfg = {"type": "computer", + "hostname": "computer_b", + "ip_address": "192.168.0.2", + "subnet_mask": "255.255.255.252", + "start_up_duration": 0, + } + + computer_b = Computer.from_config(config=computer_b_cfg) computer_b.power_on() computer_b.software_manager.install(software_class=C2Beacon) diff --git a/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_dos_bot.py b/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_dos_bot.py index 9d8b7809..02b13724 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_dos_bot.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_applications/_red_applications/test_dos_bot.py @@ -12,9 +12,14 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def dos_bot() -> DoSBot: - computer = Computer( - hostname="compromised_pc", ip_address="192.168.0.1", subnet_mask="255.255.255.0", start_up_duration=0 - ) + computer_cfg = {"type":"computer", + "hostname": "compromised_pc", + "ip_address": "192.168.0.1", + "subnet_mask": "255.255.255.0", + "start_up_duration": 0, + } + computer: Computer = Computer.from_config(config=computer_cfg) + computer.power_on() computer.software_manager.install(DoSBot) diff --git a/tests/unit_tests/_primaite/_simulator/_system/_applications/test_database_client.py b/tests/unit_tests/_primaite/_simulator/_system/_applications/test_database_client.py index 5917fde7..6e32b646 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_applications/test_database_client.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_applications/test_database_client.py @@ -17,14 +17,14 @@ from primaite.simulator.system.services.database.database_service import Databas def database_client_on_computer() -> Tuple[DatabaseClient, Computer]: network = Network() - db_server = Server(hostname="db_server", ip_address="192.168.0.1", subnet_mask="255.255.255.0", start_up_duration=0) + db_server: Server = Server.from_config(config={"type": "server", "hostname":"db_server", "ip_address":"192.168.0.1", "subnet_mask":"255.255.255.0", "start_up_duration":0}) db_server.power_on() db_server.software_manager.install(DatabaseService) db_server.software_manager.software["DatabaseService"].start() - db_client = Computer( - hostname="db_client", ip_address="192.168.0.2", subnet_mask="255.255.255.0", start_up_duration=0 - ) + db_client: Computer = Computer.from_config(config = {"type":"computer", + "hostname":"db_client", "ip_address":"192.168.0.2", "subnet_mask":"255.255.255.0", "start_up_duration":0 + }) db_client.power_on() db_client.software_manager.install(DatabaseClient) diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_database.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_database.py index ef165c8f..b7ba2d04 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_database.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_database.py @@ -8,7 +8,14 @@ from primaite.simulator.system.services.database.database_service import Databas @pytest.fixture(scope="function") def database_server() -> Node: - node = Computer(hostname="db_node", ip_address="192.168.1.2", subnet_mask="255.255.255.0", start_up_duration=0) + node_cfg = {"type": "computer", + "hostname": "db_node", + "ip_address": "192.168.1.2", + "subnet_mask": "255.255.255.0", + "start_up_duration": 0, + } + + node = Computer.from_config(config=node_cfg) node.power_on() node.software_manager.install(DatabaseService) node.software_manager.software.get("DatabaseService").start() diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_client.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_client.py index 1bc5b353..3f621331 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_client.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_client.py @@ -14,13 +14,21 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def dns_client() -> Computer: - node = Computer( - hostname="dns_client", - ip_address="192.168.1.11", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - dns_server=IPv4Address("192.168.1.10"), - ) + + node_cfg = {"type": "computer", + "hostname": "dns_client", + "ip_address": "192.168.1.11", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "dns_server": IPv4Address("192.168.1.10")} + node = Computer.from_config(config=node_cfg) + # node = Computer( + # hostname="dns_client", + # ip_address="192.168.1.11", + # subnet_mask="255.255.255.0", + # default_gateway="192.168.1.1", + # dns_server=IPv4Address("192.168.1.10"), + # ) return node diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_server.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_server.py index 3bc2b1a4..8df96099 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_server.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_dns_server.py @@ -16,13 +16,13 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def dns_server() -> Node: - node = Server( - hostname="dns_server", - ip_address="192.168.1.10", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - start_up_duration=0, - ) + node_cfg = {"type": "server", + "hostname": "dns_server", + "ip_address": "192.168.1.10", + "subnet_mask":"255.255.255.0", + "default_gateway": "192.168.1.1", + "start_up_duration":0} + node = Server.from_config(config=node_cfg) node.power_on() node.software_manager.install(software_class=DNSServer) return node @@ -55,7 +55,13 @@ def test_dns_server_receive(dns_server): # register the web server in the domain controller dns_server_service.dns_register(domain_name="real-domain.com", domain_ip_address=IPv4Address("192.168.1.12")) - client = Computer(hostname="client", ip_address="192.168.1.11", subnet_mask="255.255.255.0", start_up_duration=0) + client_cfg = {"type": "computer", + "hostname": "client", + "ip_address": "192.168.1.11", + "subnet_mask": "255.255.255.0", + "start_up_duration": 0, + } + client = Computer.from_config(config=client_cfg) client.power_on() client.dns_server = IPv4Address("192.168.1.10") network = Network() diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_client.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_client.py index d3e679db..c6e10b7d 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_client.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_client.py @@ -16,13 +16,14 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def ftp_client() -> Node: - node = Computer( - hostname="ftp_client", - ip_address="192.168.1.11", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - start_up_duration=0, - ) + node_cfg = {"type": "computer", + "hostname": "ftp_client", + "ip_address":"192.168.1.11", + "subnet_mask":"255.255.255.0", + "default_gateway":"192.168.1.1", + "start_up_duration": 0, + } + node = Computer.from_config(config=node_cfg) node.power_on() return node @@ -94,7 +95,7 @@ def test_offline_ftp_client_receives_request(ftp_client): ftp_client_service: FTPClient = ftp_client.software_manager.software.get("FTPClient") ftp_client.power_off() - for i in range(ftp_client.shut_down_duration + 1): + for i in range(ftp_client.config.shut_down_duration + 1): ftp_client.apply_timestep(timestep=i) assert ftp_client.operating_state is NodeOperatingState.OFF diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_server.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_server.py index 37c3d019..5cae88e0 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_server.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_ftp_server.py @@ -14,13 +14,13 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def ftp_server() -> Node: - node = Server( - hostname="ftp_server", - ip_address="192.168.1.10", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - start_up_duration=0, - ) + node_cfg = {"type": "server", + "hostname":"ftp_server", + "ip_address":"192.168.1.10", + "subnet_mask": "255.255.255.0", + "default_gateway": "192.168.1.1", + "start_up_duration":0} + node = Server.from_config(config=node_cfg) node.power_on() node.software_manager.install(software_class=FTPServer) return node diff --git a/tests/unit_tests/_primaite/_simulator/_system/_services/test_web_server.py b/tests/unit_tests/_primaite/_simulator/_system/_services/test_web_server.py index 606a195c..f0901b70 100644 --- a/tests/unit_tests/_primaite/_simulator/_system/_services/test_web_server.py +++ b/tests/unit_tests/_primaite/_simulator/_system/_services/test_web_server.py @@ -16,13 +16,13 @@ from primaite.utils.validation.port import PORT_LOOKUP @pytest.fixture(scope="function") def web_server() -> Server: - node = Server( - hostname="web_server", - ip_address="192.168.1.10", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - start_up_duration=0, - ) + node_cfg = {"type": "server", + "hostname":"web_server", + "ip_address": "192.168.1.10", + "subnet_mask": "255.255.255.0", + "default_gateway":"192.168.1.1", + "start_up_duration":0 } + node = Server.from_config(config=node_cfg) node.power_on() node.software_manager.install(WebServer) node.software_manager.software.get("WebServer").start()