238 lines
12 KiB
Python
238 lines
12 KiB
Python
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
|
|
import pytest
|
|
import yaml
|
|
|
|
from primaite.config.load import _EXAMPLE_CFG
|
|
from primaite.game.game import PrimaiteGame
|
|
from primaite.session.environment import PrimaiteGymEnv
|
|
from primaite.simulator.network.container import Network
|
|
from primaite.simulator.network.hardware.nodes.host.computer import Computer
|
|
from primaite.simulator.network.hardware.nodes.host.server import Server
|
|
from primaite.simulator.network.hardware.nodes.network.firewall import Firewall
|
|
from primaite.simulator.network.hardware.nodes.network.router import Router
|
|
from primaite.simulator.network.hardware.nodes.network.switch import Switch
|
|
|
|
CONFIG_FILE = _EXAMPLE_CFG / "uc7_config.yaml"
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def uc7_network() -> Network:
|
|
with open(file=CONFIG_FILE, mode="r") as f:
|
|
cfg = yaml.safe_load(stream=f)
|
|
|
|
game = PrimaiteGame.from_config(cfg=cfg)
|
|
return game.simulation.network
|
|
|
|
|
|
def test_ping_home_office(uc7_network):
|
|
"""Asserts that all home_pub_* can ping each-other and the public dns (isp_pub_srv_dns)"""
|
|
network = uc7_network
|
|
home_pub_pc_1: Computer = network.get_node_by_hostname("HOME-PUB-PC-1")
|
|
home_pub_pc_2: Computer = network.get_node_by_hostname("HOME-PUB-PC-2")
|
|
home_pub_pc_srv: Server = network.get_node_by_hostname("HOME-PUB-SRV")
|
|
home_pub_rt_dr: Router = network.get_node_by_hostname("HOME-PUB-RT-DR")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
assert home_pub_pc_1.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
def ping_all_home_office(host):
|
|
assert host.ping(home_pub_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(home_pub_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(home_pub_pc_srv.network_interface[1].ip_address)
|
|
assert host.ping(home_pub_rt_dr.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_home_office(home_pub_pc_1)
|
|
ping_all_home_office(home_pub_pc_2)
|
|
ping_all_home_office(home_pub_pc_srv)
|
|
ping_all_home_office(isp_pub_srv_dns)
|
|
|
|
|
|
def test_ping_remote_site(uc7_network):
|
|
"""Asserts that all remote_pub_* hosts can ping each-other and the public dns server (isp_pub_srv_dns)"""
|
|
network = uc7_network
|
|
rem_pub_fw: Firewall = network.get_node_by_hostname(hostname="REM-PUB-FW")
|
|
rem_pub_rt_dr: Router = network.get_node_by_hostname(hostname="REM-PUB-RT-DR")
|
|
rem_pub_pc_1: Computer = network.get_node_by_hostname(hostname="REM-PUB-PC-1")
|
|
rem_pub_pc_2: Computer = network.get_node_by_hostname(hostname="REM-PUB-PC-2")
|
|
rem_pub_srv: Computer = network.get_node_by_hostname(hostname="REM-PUB-SRV")
|
|
|
|
def ping_all_remote_site(host):
|
|
assert host.ping(rem_pub_fw.network_interface[1].ip_address)
|
|
assert host.ping(rem_pub_rt_dr.network_interface[1].ip_address)
|
|
assert host.ping(rem_pub_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(rem_pub_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(rem_pub_srv.network_interface[1].ip_address)
|
|
|
|
ping_all_remote_site(host=rem_pub_fw)
|
|
ping_all_remote_site(host=rem_pub_rt_dr)
|
|
ping_all_remote_site(host=rem_pub_pc_1)
|
|
ping_all_remote_site(host=rem_pub_pc_2)
|
|
ping_all_remote_site(host=rem_pub_srv)
|
|
|
|
|
|
def test_ping_some_tech_dmz(uc7_network):
|
|
"""Asserts that the st_dmz_pub_srv_web and the st_public_firewall can ping each other and remote site and home office."""
|
|
network = uc7_network
|
|
st_pub_fw: Firewall = network.get_node_by_hostname(hostname="ST_PUB-FW")
|
|
st_dmz_pub_srv_web: Server = network.get_node_by_hostname(hostname="ST_DMZ-PUB-SRV-WEB")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
home_pub_pc_1: Computer = network.get_node_by_hostname("HOME-PUB-PC-1")
|
|
|
|
def ping_all_some_tech_dmz(host):
|
|
assert host.ping(st_dmz_pub_srv_web.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_dmz(host=st_pub_fw)
|
|
ping_all_some_tech_dmz(host=isp_pub_srv_dns)
|
|
ping_all_some_tech_dmz(host=home_pub_pc_1)
|
|
|
|
|
|
def test_ping_some_tech_head_office(uc7_network):
|
|
"""Asserts that all the some_tech_* PCs can ping each other and the public dns"""
|
|
network = uc7_network
|
|
st_home_office_private_pc_1: Computer = network.get_node_by_hostname("ST_HO-PRV-PC-1")
|
|
st_home_office_private_pc_2: Computer = network.get_node_by_hostname("ST_HO-PRV-PC-2")
|
|
st_home_office_private_pc_3: Computer = network.get_node_by_hostname("ST_HO-PRV-PC-3")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_head_office(host):
|
|
assert host.ping(st_home_office_private_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_home_office_private_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(st_home_office_private_pc_3.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_head_office(host=st_home_office_private_pc_1)
|
|
ping_all_some_tech_head_office(host=st_home_office_private_pc_2)
|
|
ping_all_some_tech_head_office(host=st_home_office_private_pc_3)
|
|
|
|
|
|
def test_ping_some_tech_hr(uc7_network):
|
|
"""Assert that all some_tech_hr_* PCs can ping each other and the public dns"""
|
|
network = uc7_network
|
|
some_tech_hr_pc_1: Computer = network.get_node_by_hostname("ST_HR-PRV-PC-1")
|
|
some_tech_hr_pc_2: Computer = network.get_node_by_hostname("ST_HR-PRV-PC-2")
|
|
some_tech_hr_pc_3: Computer = network.get_node_by_hostname("ST_HR-PRV-PC-3")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_hr(host):
|
|
assert host.ping(some_tech_hr_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_hr_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_hr_pc_3.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_hr(some_tech_hr_pc_1)
|
|
ping_all_some_tech_hr(some_tech_hr_pc_2)
|
|
ping_all_some_tech_hr(some_tech_hr_pc_3)
|
|
|
|
|
|
def test_some_tech_data_hr(uc7_network):
|
|
"""Assert that all some_tech_data_* servers can ping each other and the public dns."""
|
|
network = uc7_network
|
|
some_tech_data_server_storage: Server = network.get_node_by_hostname("ST_DATA-PRV-SRV-STORAGE")
|
|
some_tech_data_server_database: Server = network.get_node_by_hostname("ST_DATA-PRV-SRV-DB")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_hr(host):
|
|
assert host.ping(some_tech_data_server_storage.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_data_server_database.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_hr(some_tech_data_server_storage)
|
|
ping_all_some_tech_hr(some_tech_data_server_database)
|
|
|
|
|
|
def test_some_tech_project_a(uc7_network):
|
|
"""Asserts that all some_tech project A's PCs can ping each other and the public dns."""
|
|
network = uc7_network
|
|
some_tech_proj_a_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-A-PRV-PC-1")
|
|
some_tech_proj_a_pc_2: Computer = network.get_node_by_hostname("ST_PROJ-A-PRV-PC-2")
|
|
some_tech_proj_a_pc_3: Computer = network.get_node_by_hostname("ST_PROJ-A-PRV-PC-3")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_proj_a(host):
|
|
assert host.ping(some_tech_proj_a_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_a_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_a_pc_3.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_proj_a(some_tech_proj_a_pc_1)
|
|
ping_all_some_tech_proj_a(some_tech_proj_a_pc_2)
|
|
ping_all_some_tech_proj_a(some_tech_proj_a_pc_3)
|
|
|
|
|
|
def test_some_tech_project_b(uc7_network):
|
|
"""Asserts that all some_tech_project_b PC's can ping each other and the public dps."""
|
|
network = uc7_network
|
|
some_tech_proj_b_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-B-PRV-PC-1")
|
|
some_tech_proj_b_pc_2: Computer = network.get_node_by_hostname("ST_PROJ-B-PRV-PC-2")
|
|
some_tech_proj_b_pc_3: Computer = network.get_node_by_hostname("ST_PROJ-B-PRV-PC-3")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_proj_b(host):
|
|
assert host.ping(some_tech_proj_b_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_b_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_b_pc_3.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_proj_b(some_tech_proj_b_pc_1)
|
|
ping_all_some_tech_proj_b(some_tech_proj_b_pc_2)
|
|
ping_all_some_tech_proj_b(some_tech_proj_b_pc_3)
|
|
|
|
|
|
def test_some_tech_project_a(uc7_network):
|
|
"""Asserts that all some_tech_project_c PC's can ping each other and the public dps."""
|
|
network = uc7_network
|
|
some_tech_proj_c_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-C-PRV-PC-1")
|
|
some_tech_proj_c_pc_2: Computer = network.get_node_by_hostname("ST_PROJ-C-PRV-PC-2")
|
|
some_tech_proj_c_pc_3: Computer = network.get_node_by_hostname("ST_PROJ-C-PRV-PC-3")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
|
|
def ping_all_some_tech_proj_c(host):
|
|
assert host.ping(some_tech_proj_c_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_c_pc_2.network_interface[1].ip_address)
|
|
assert host.ping(some_tech_proj_c_pc_3.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
|
|
ping_all_some_tech_proj_c(some_tech_proj_c_pc_1)
|
|
ping_all_some_tech_proj_c(some_tech_proj_c_pc_2)
|
|
ping_all_some_tech_proj_c(some_tech_proj_c_pc_3)
|
|
|
|
|
|
def test_ping_all_networks(uc7_network):
|
|
"""Asserts that one machine from each network is able to ping all others."""
|
|
network = uc7_network
|
|
home_office_pc_1: Computer = network.get_node_by_hostname("HOME-PUB-PC-1")
|
|
isp_pub_srv_dns: Server = network.get_node_by_hostname("ISP-PUB-SRV-DNS")
|
|
remote_office_pc_1: Computer = network.get_node_by_hostname("REM-PUB-PC-1")
|
|
st_head_office_pc_1: Computer = network.get_node_by_hostname("ST_HO-PRV-PC-1")
|
|
st_human_resources_pc_1: Computer = network.get_node_by_hostname("ST_HR-PRV-PC-1")
|
|
st_data_storage_server: Server = network.get_node_by_hostname("ST_DATA-PRV-SRV-STORAGE")
|
|
st_data_database_server: Server = network.get_node_by_hostname("ST_DATA-PRV-SRV-DB")
|
|
st_proj_a_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-A-PRV-PC-1")
|
|
st_proj_b_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-B-PRV-PC-1")
|
|
st_proj_c_pc_1: Computer = network.get_node_by_hostname("ST_PROJ-C-PRV-PC-1")
|
|
|
|
def ping_network_wide(host):
|
|
assert host.ping(home_office_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(isp_pub_srv_dns.network_interface[1].ip_address)
|
|
assert host.ping(remote_office_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_head_office_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_human_resources_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_data_storage_server.network_interface[1].ip_address)
|
|
assert host.ping(st_data_database_server.network_interface[1].ip_address)
|
|
assert host.ping(st_proj_a_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_proj_b_pc_1.network_interface[1].ip_address)
|
|
assert host.ping(st_proj_c_pc_1.network_interface[1].ip_address)
|
|
|
|
ping_network_wide(host=home_office_pc_1)
|
|
ping_network_wide(host=isp_pub_srv_dns)
|
|
ping_network_wide(host=remote_office_pc_1)
|
|
ping_network_wide(host=st_head_office_pc_1)
|
|
ping_network_wide(host=st_human_resources_pc_1)
|
|
ping_network_wide(host=st_data_storage_server)
|
|
ping_network_wide(host=st_data_database_server)
|
|
ping_network_wide(host=st_proj_a_pc_1)
|
|
ping_network_wide(host=st_proj_b_pc_1)
|
|
ping_network_wide(host=st_proj_c_pc_1)
|