#2887 - Unit test fixes ahead of raising PR.

This commit is contained in:
Charlie Crane
2025-01-23 15:28:10 +00:00
parent 65355f83e8
commit b9d2cd25f3
22 changed files with 222 additions and 142 deletions

View File

@@ -36,7 +36,6 @@ class NodeAbstractAction(AbstractAction, identifier="node_abstract"):
@classmethod @classmethod
def form_request(cls, config: ConfigSchema) -> RequestFormat: def form_request(cls, config: ConfigSchema) -> RequestFormat:
"""Return the action formatted as a request which can be ingested by the PrimAITE simulation.""" """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] return ["network", "node", config.node_name, config.verb]

View File

@@ -153,7 +153,7 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"):
# Create a core switch if more than one edge switch is needed # Create a core switch if more than one edge switch is needed
if num_of_switches > 1: 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() core_switch.power_on()
network.add_node(core_switch) network.add_node(core_switch)
core_switch_port = 1 core_switch_port = 1
@@ -164,7 +164,8 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"):
# Optionally include a router in the LAN # Optionally include a router in the LAN
if config.include_router: if config.include_router:
default_gateway = IPv4Address(f"192.168.{config.subnet_base}.1") 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.power_on()
router.acl.add_rule( router.acl.add_rule(
action=ACLAction.PERMIT, src_port=PORT_LOOKUP["ARP"], dst_port=PORT_LOOKUP["ARP"], position=22 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 # Initialise the first edge switch and connect to the router or core switch
switch_port = 0 switch_port = 0
switch_n = 1 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() switch.power_on()
network.add_node(switch) network.add_node(switch)
if num_of_switches > 1: if num_of_switches > 1:
@@ -195,7 +196,7 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"):
if switch_port == effective_network_interface: if switch_port == effective_network_interface:
switch_n += 1 switch_n += 1
switch_port = 0 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() switch.power_on()
network.add_node(switch) network.add_node(switch)
# Connect the new switch to the router or core 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 # Create and add a PC to the network
pc = Computer( pc_cfg = {"type": "computer",
hostname=f"pc_{i}_{config.lan_name}", "hostname": f"pc_{i}_{config.lan_name}",
ip_address=f"192.168.{config.subnet_base}.{i+config.pcs_ip_block_start-1}", "ip_address": f"192.168.{config.subnet_base}.{i+config.pcs_ip_block_start-1}",
subnet_mask="255.255.255.0", "default_gateway": "192.168.10.1",
default_gateway=default_gateway, "start_up_duration": 0,
start_up_duration=0, }
) pc = Computer.from_config(config = pc_cfg)
pc.power_on() pc.power_on()
network.add_node(pc) network.add_node(pc)

View File

@@ -1979,7 +1979,7 @@ class Node(SimComponent, ABC):
else: else:
if self.operating_state == NodeOperatingState.SHUTTING_DOWN: if self.operating_state == NodeOperatingState.SHUTTING_DOWN:
self.operating_state = NodeOperatingState.OFF 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() self._shut_down_actions()
# if resetting turn back on # if resetting turn back on

View File

@@ -129,7 +129,7 @@ class Switch(NetworkNode, identifier="switch"):
if markdown: if markdown:
table.set_style(MARKDOWN) table.set_style(MARKDOWN)
table.align = "l" 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(): 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"]) table.add_row([port_num, port.mac_address, port.speed, "Enabled" if port.enabled else "Disabled"])
print(table) print(table)

View File

@@ -128,32 +128,34 @@ def arcd_uc2_network() -> Network:
network = Network() network = Network()
# Router 1 # 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.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=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") router_1.configure_port(port=2, ip_address="192.168.10.1", subnet_mask="255.255.255.0")
# Switch 1 # 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() switch_1.power_on()
network.connect(endpoint_a=router_1.network_interface[1], endpoint_b=switch_1.network_interface[8]) network.connect(endpoint_a=router_1.network_interface[1], endpoint_b=switch_1.network_interface[8])
router_1.enable_port(1) router_1.enable_port(1)
# Switch 2 # 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() switch_2.power_on()
network.connect(endpoint_a=router_1.network_interface[2], endpoint_b=switch_2.network_interface[8]) network.connect(endpoint_a=router_1.network_interface[2], endpoint_b=switch_2.network_interface[8])
router_1.enable_port(2) router_1.enable_port(2)
# Client 1 # Client 1
client_1 = Computer( client_1_cfg = {"type": "computer",
hostname="client_1", "hostname": "client_1",
ip_address="192.168.10.21", "ip_address": "192.168.10.21",
subnet_mask="255.255.255.0", "subnet_mask": "255.255.255.0",
default_gateway="192.168.10.1", "default_gateway": "192.168.10.1",
dns_server=IPv4Address("192.168.1.10"), "dns_server": IPv4Address("192.168.1.10"),
start_up_duration=0, "start_up_duration": 0,
) }
client_1: Computer = Computer.from_config(config = client_1_cfg)
client_1.power_on() client_1.power_on()
network.connect(endpoint_b=client_1.network_interface[1], endpoint_a=switch_2.network_interface[1]) network.connect(endpoint_b=client_1.network_interface[1], endpoint_a=switch_2.network_interface[1])
client_1.software_manager.install(DatabaseClient) client_1.software_manager.install(DatabaseClient)
@@ -172,14 +174,17 @@ def arcd_uc2_network() -> Network:
) )
# Client 2 # Client 2
client_2 = Computer(
hostname="client_2", client_2_cfg = {"type": "computer",
ip_address="192.168.10.22", "hostname": "client_2",
subnet_mask="255.255.255.0", "ip_address": "192.168.10.22",
default_gateway="192.168.10.1", "subnet_mask": "255.255.255.0",
dns_server=IPv4Address("192.168.1.10"), "default_gateway": "192.168.10.1",
start_up_duration=0, "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.power_on()
client_2.software_manager.install(DatabaseClient) client_2.software_manager.install(DatabaseClient)
db_client_2 = client_2.software_manager.software.get("DatabaseClient") db_client_2 = client_2.software_manager.software.get("DatabaseClient")
@@ -193,27 +198,34 @@ def arcd_uc2_network() -> Network:
) )
# Domain Controller # Domain Controller
domain_controller = Server(
hostname="domain_controller", domain_controller_cfg = {"type": "server",
ip_address="192.168.1.10", "hostname": "domain_controller",
subnet_mask="255.255.255.0", "ip_address": "192.168.1.10",
default_gateway="192.168.1.1", "subnet_mask": "255.255.255.0",
start_up_duration=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.power_on()
domain_controller.software_manager.install(DNSServer) domain_controller.software_manager.install(DNSServer)
network.connect(endpoint_b=domain_controller.network_interface[1], endpoint_a=switch_1.network_interface[1]) network.connect(endpoint_b=domain_controller.network_interface[1], endpoint_a=switch_1.network_interface[1])
# Database Server # Database Server
database_server = Server(
hostname="database_server", database_server_cfg = {"type": "server",
ip_address="192.168.1.14", "hostname": "database_server",
subnet_mask="255.255.255.0", "ip_address": "192.168.1.14",
default_gateway="192.168.1.1", "subnet_mask": "255.255.255.0",
dns_server=IPv4Address("192.168.1.10"), "default_gateway": "192.168.1.1",
start_up_duration=0, "dns_server": IPv4Address("192.168.1.10"),
) "start_up_duration": 0
}
database_server = Server.from_config(config=database_server_cfg)
database_server.power_on() database_server.power_on()
network.connect(endpoint_b=database_server.network_interface[1], endpoint_a=switch_1.network_interface[3]) 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")) database_service.configure_backup(backup_server=IPv4Address("192.168.1.16"))
# Web Server # Web Server
web_server = Server(
hostname="web_server",
ip_address="192.168.1.12", web_server_cfg = {"type": "server",
subnet_mask="255.255.255.0", "hostname": "web_server",
default_gateway="192.168.1.1", "ip_address": "192.168.1.11",
dns_server=IPv4Address("192.168.1.10"), "subnet_mask": "255.255.255.0",
start_up_duration=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.power_on()
web_server.software_manager.install(DatabaseClient) 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) dns_server_service.dns_register("arcd.com", web_server.network_interface[1].ip_address)
# Backup Server # Backup Server
backup_server = Server( backup_server_cfg = {"type": "server",
hostname="backup_server", "hostname": "backup_server",
ip_address="192.168.1.16", "ip_address": "192.168.1.16",
subnet_mask="255.255.255.0", "subnet_mask": "255.255.255.0",
default_gateway="192.168.1.1", "default_gateway": "192.168.1.1",
dns_server=IPv4Address("192.168.1.10"), "dns_server": IPv4Address("192.168.1.10"),
start_up_duration=0, "start_up_duration": 0
) }
backup_server: Server = Server.from_config(config=backup_server_cfg)
backup_server.power_on() backup_server.power_on()
backup_server.software_manager.install(FTPServer) backup_server.software_manager.install(FTPServer)
network.connect(endpoint_b=backup_server.network_interface[1], endpoint_a=switch_1.network_interface[4]) network.connect(endpoint_b=backup_server.network_interface[1], endpoint_a=switch_1.network_interface[4])
# Security Suite # Security Suite
security_suite = Server( security_suite_cfg = {"type": "server",
hostname="security_suite", "hostname": "backup_server",
ip_address="192.168.1.110", "ip_address": "192.168.1.110",
subnet_mask="255.255.255.0", "subnet_mask": "255.255.255.0",
default_gateway="192.168.1.1", "default_gateway": "192.168.1.1",
dns_server=IPv4Address("192.168.1.10"), "dns_server": IPv4Address("192.168.1.10"),
start_up_duration=0, "start_up_duration": 0
) }
security_suite: Server = Server.from_config(config=security_suite_cfg)
security_suite.power_on() security_suite.power_on()
network.connect(endpoint_b=security_suite.network_interface[1], endpoint_a=switch_1.network_interface[7]) 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")) security_suite.connect_nic(NIC(ip_address="192.168.10.110", subnet_mask="255.255.255.0"))

View File

@@ -119,7 +119,14 @@ def application_class():
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def file_system() -> FileSystem: 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() computer.power_on()
return computer.file_system return computer.file_system

View File

@@ -25,7 +25,8 @@ def router_with_acl_rules():
:return: A configured Router object 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 acl = router.acl
# Add rules here as needed # Add rules here as needed
acl.add_rule( 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. :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 acl = router.acl
# Rule to permit traffic from a specific source IP and port to a specific destination IP and port # Rule to permit traffic from a specific source IP and port to a specific destination IP and port
acl.add_rule( 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. - 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 acl = router.acl
# Add rules here as needed # Add rules here as needed
acl.add_rule( acl.add_rule(

View File

@@ -52,7 +52,7 @@ def test_wireless_router_from_config():
rt = Router.from_config(config=cfg) 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].ip_address == IPv4Address("192.168.1.1")
assert rt.network_interface[1].subnet_mask == IPv4Address("255.255.255.0") assert rt.network_interface[1].subnet_mask == IPv4Address("255.255.255.0")

View File

@@ -7,7 +7,11 @@ from primaite.simulator.network.hardware.nodes.network.switch import Switch
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def switch() -> Switch: 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.power_on()
switch.show() switch.show()
return switch return switch

View File

@@ -7,7 +7,13 @@ from primaite.simulator.network.hardware.nodes.host.computer import Computer
@pytest.fixture @pytest.fixture
def node() -> Node: 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): def test_nic_enabled_validator(node):

View File

@@ -12,8 +12,16 @@ from tests.conftest import DummyApplication, DummyService
@pytest.fixture @pytest.fixture
def node() -> Node: 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): def test_node_startup(node):
assert node.operating_state == NodeOperatingState.OFF assert node.operating_state == NodeOperatingState.OFF
@@ -166,7 +174,7 @@ def test_node_is_on_validator(node):
"""Test that the node is on validator.""" """Test that the node is on validator."""
node.power_on() 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) node.apply_timestep(i)
validator = Node._NodeIsOnValidator(node=node) validator = Node._NodeIsOnValidator(node=node)
@@ -174,7 +182,7 @@ def test_node_is_on_validator(node):
assert validator(request=[], context={}) assert validator(request=[], context={})
node.power_off() 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) node.apply_timestep(i)
assert validator(request=[], context={}) is False assert validator(request=[], context={}) is False
@@ -184,7 +192,7 @@ def test_node_is_off_validator(node):
"""Test that the node is on validator.""" """Test that the node is on validator."""
node.power_on() 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) node.apply_timestep(i)
validator = Node._NodeIsOffValidator(node=node) validator = Node._NodeIsOffValidator(node=node)
@@ -192,7 +200,7 @@ def test_node_is_off_validator(node):
assert validator(request=[], context={}) is False assert validator(request=[], context={}) is False
node.power_off() 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) node.apply_timestep(i)
assert validator(request=[], context={}) assert validator(request=[], context={})

View File

@@ -61,12 +61,12 @@ def test_apply_timestep_to_nodes(network):
client_1.power_off() client_1.power_off()
assert client_1.operating_state is NodeOperatingState.SHUTTING_DOWN 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) network.apply_timestep(timestep=i)
assert client_1.operating_state is NodeOperatingState.OFF 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 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.""" """Node that does not exist on network should not affect existing nodes."""
assert len(network.nodes) is 7 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 assert len(network.nodes) is 7

View File

@@ -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 num_routers = 1 if include_router else 0
total_nodes = num_pcs + num_switches + num_routers 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.computer_nodes) == num_pcs
assert len(net.switch_nodes) == num_switches assert len(net.switch_nodes) == num_switches
assert len(net.router_nodes) == num_routers assert len(net.router_nodes) == num_routers

View File

@@ -16,19 +16,25 @@ def basic_c2_network() -> Network:
network = Network() network = Network()
# Creating two generic nodes for the C2 Server and the C2 Beacon. # 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.power_on()
computer_a.software_manager.install(software_class=C2Server) 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.power_on()
computer_b.software_manager.install(software_class=C2Beacon) computer_b.software_manager.install(software_class=C2Beacon)

View File

@@ -12,9 +12,14 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def dos_bot() -> DoSBot: def dos_bot() -> DoSBot:
computer = Computer( computer_cfg = {"type":"computer",
hostname="compromised_pc", ip_address="192.168.0.1", subnet_mask="255.255.255.0", start_up_duration=0 "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.power_on()
computer.software_manager.install(DoSBot) computer.software_manager.install(DoSBot)

View File

@@ -17,14 +17,14 @@ from primaite.simulator.system.services.database.database_service import Databas
def database_client_on_computer() -> Tuple[DatabaseClient, Computer]: def database_client_on_computer() -> Tuple[DatabaseClient, Computer]:
network = Network() 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.power_on()
db_server.software_manager.install(DatabaseService) db_server.software_manager.install(DatabaseService)
db_server.software_manager.software["DatabaseService"].start() db_server.software_manager.software["DatabaseService"].start()
db_client = Computer( 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 "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.power_on()
db_client.software_manager.install(DatabaseClient) db_client.software_manager.install(DatabaseClient)

View File

@@ -8,7 +8,14 @@ from primaite.simulator.system.services.database.database_service import Databas
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def database_server() -> Node: 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.power_on()
node.software_manager.install(DatabaseService) node.software_manager.install(DatabaseService)
node.software_manager.software.get("DatabaseService").start() node.software_manager.software.get("DatabaseService").start()

View File

@@ -14,13 +14,21 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def dns_client() -> Computer: def dns_client() -> Computer:
node = Computer(
hostname="dns_client", node_cfg = {"type": "computer",
ip_address="192.168.1.11", "hostname": "dns_client",
subnet_mask="255.255.255.0", "ip_address": "192.168.1.11",
default_gateway="192.168.1.1", "subnet_mask": "255.255.255.0",
dns_server=IPv4Address("192.168.1.10"), "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 return node

View File

@@ -16,13 +16,13 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def dns_server() -> Node: def dns_server() -> Node:
node = Server( node_cfg = {"type": "server",
hostname="dns_server", "hostname": "dns_server",
ip_address="192.168.1.10", "ip_address": "192.168.1.10",
subnet_mask="255.255.255.0", "subnet_mask":"255.255.255.0",
default_gateway="192.168.1.1", "default_gateway": "192.168.1.1",
start_up_duration=0, "start_up_duration":0}
) node = Server.from_config(config=node_cfg)
node.power_on() node.power_on()
node.software_manager.install(software_class=DNSServer) node.software_manager.install(software_class=DNSServer)
return node return node
@@ -55,7 +55,13 @@ def test_dns_server_receive(dns_server):
# register the web server in the domain controller # 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")) 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.power_on()
client.dns_server = IPv4Address("192.168.1.10") client.dns_server = IPv4Address("192.168.1.10")
network = Network() network = Network()

View File

@@ -16,13 +16,14 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def ftp_client() -> Node: def ftp_client() -> Node:
node = Computer( node_cfg = {"type": "computer",
hostname="ftp_client", "hostname": "ftp_client",
ip_address="192.168.1.11", "ip_address":"192.168.1.11",
subnet_mask="255.255.255.0", "subnet_mask":"255.255.255.0",
default_gateway="192.168.1.1", "default_gateway":"192.168.1.1",
start_up_duration=0, "start_up_duration": 0,
) }
node = Computer.from_config(config=node_cfg)
node.power_on() node.power_on()
return node 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_service: FTPClient = ftp_client.software_manager.software.get("FTPClient")
ftp_client.power_off() 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) ftp_client.apply_timestep(timestep=i)
assert ftp_client.operating_state is NodeOperatingState.OFF assert ftp_client.operating_state is NodeOperatingState.OFF

View File

@@ -14,13 +14,13 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def ftp_server() -> Node: def ftp_server() -> Node:
node = Server( node_cfg = {"type": "server",
hostname="ftp_server", "hostname":"ftp_server",
ip_address="192.168.1.10", "ip_address":"192.168.1.10",
subnet_mask="255.255.255.0", "subnet_mask": "255.255.255.0",
default_gateway="192.168.1.1", "default_gateway": "192.168.1.1",
start_up_duration=0, "start_up_duration":0}
) node = Server.from_config(config=node_cfg)
node.power_on() node.power_on()
node.software_manager.install(software_class=FTPServer) node.software_manager.install(software_class=FTPServer)
return node return node

View File

@@ -16,13 +16,13 @@ from primaite.utils.validation.port import PORT_LOOKUP
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def web_server() -> Server: def web_server() -> Server:
node = Server( node_cfg = {"type": "server",
hostname="web_server", "hostname":"web_server",
ip_address="192.168.1.10", "ip_address": "192.168.1.10",
subnet_mask="255.255.255.0", "subnet_mask": "255.255.255.0",
default_gateway="192.168.1.1", "default_gateway":"192.168.1.1",
start_up_duration=0, "start_up_duration":0 }
) node = Server.from_config(config=node_cfg)
node.power_on() node.power_on()
node.software_manager.install(WebServer) node.software_manager.install(WebServer)
node.software_manager.software.get("WebServer").start() node.software_manager.software.get("WebServer").start()