Merged PR 318: #2418 Add Printer and Wireless router to config parser
## Summary Add ability to parse printers and wireless routers from yaml config. ## Test process Existing unit tests pass. Added a printer to one of the test yamls. Adding a wireless router as well now. ## Checklist - [x] PR is linked to a **work item** - [x] **acceptance criteria** of linked ticket are met - [x] performed **self-review** of the code - [ ] written **tests** for any new functionality added with this PR - [ ] updated the **documentation** if this PR changes or adds functionality - [ ] written/updated **design docs** if this PR implements new functionality - [ ] updated the **change log** - [x] ran **pre-commit** checks for code style - [x] attended to any **TO-DOs** left in the code Related work items: #2418
This commit is contained in:
@@ -681,6 +681,39 @@ simulation:
|
||||
- ref: client_2_dns_client
|
||||
type: DNSClient
|
||||
|
||||
- ref: HP_LaserJet_Pro_4102fdn_printer
|
||||
type: printer
|
||||
hostname: HP_LaserJet_Pro_4102fdn_printer
|
||||
ip_address: 192.168.10.99
|
||||
subnet_mask: 255.255.255.0
|
||||
|
||||
- ref: router_2
|
||||
type: wireless_router
|
||||
hostname: router_2
|
||||
router_interface:
|
||||
ip_address: 192.169.1.1
|
||||
subnet_mask: 255.255.255.0
|
||||
wireless_access_point:
|
||||
ip_address: 192.170.1.1
|
||||
subnet_mask: 255.255.255.0
|
||||
frequency: WIFI_2_4
|
||||
acl:
|
||||
0:
|
||||
action: PERMIT
|
||||
src_port: POSTGRES_SERVER
|
||||
dst_port: POSTGRES_SERVER
|
||||
1:
|
||||
action: PERMIT
|
||||
src_port: DNS
|
||||
dst_port: DNS
|
||||
22:
|
||||
action: PERMIT
|
||||
src_port: ARP
|
||||
dst_port: ARP
|
||||
23:
|
||||
action: PERMIT
|
||||
protocol: ICMP
|
||||
|
||||
links:
|
||||
- ref: router_1___switch_1
|
||||
endpoint_a_ref: router_1
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import pydantic
|
||||
import pytest
|
||||
|
||||
from primaite.simulator.network.hardware.nodes.host.server import Printer
|
||||
from primaite.simulator.network.hardware.nodes.network.wireless_router import WirelessRouter
|
||||
from tests import TEST_ASSETS_ROOT
|
||||
from tests.conftest import TempPrimaiteSession
|
||||
|
||||
@@ -11,7 +13,6 @@ MISCONFIGURED_PATH = TEST_ASSETS_ROOT / "configs/bad_primaite_session.yaml"
|
||||
MULTI_AGENT_PATH = TEST_ASSETS_ROOT / "configs/multi_agent_session.yaml"
|
||||
|
||||
|
||||
# @pytest.mark.skip(reason="no way of currently testing this")
|
||||
class TestPrimaiteSession:
|
||||
@pytest.mark.parametrize("temp_primaite_session", [[CFG_PATH]], indirect=True)
|
||||
def test_creating_session(self, temp_primaite_session):
|
||||
@@ -29,7 +30,11 @@ class TestPrimaiteSession:
|
||||
assert session.env
|
||||
|
||||
assert session.env.game.simulation.network
|
||||
assert len(session.env.game.simulation.network.nodes) == 10
|
||||
assert len(session.env.game.simulation.network.nodes) == 12
|
||||
wireless = session.env.game.simulation.network.get_node_by_hostname("router_2")
|
||||
assert isinstance(wireless, WirelessRouter)
|
||||
printer = session.env.game.simulation.network.get_node_by_hostname("HP_LaserJet_Pro_4102fdn_printer")
|
||||
assert isinstance(printer, Printer)
|
||||
|
||||
@pytest.mark.skip(reason="Session is not being maintained and will be removed in the subsequent beta release.")
|
||||
@pytest.mark.parametrize("temp_primaite_session", [[CFG_PATH]], indirect=True)
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
from ipaddress import IPv4Address
|
||||
|
||||
from primaite.simulator.network.hardware.nodes.network.router import ACLAction, Router
|
||||
from primaite.simulator.network.transmission.network_layer import IPProtocol
|
||||
from primaite.simulator.network.transmission.transport_layer import Port
|
||||
|
||||
|
||||
def test_wireless_router_from_config():
|
||||
cfg = {
|
||||
"ref": "router_1",
|
||||
"type": "router",
|
||||
"hostname": "router_1",
|
||||
"num_ports": 6,
|
||||
"ports": {
|
||||
1: {
|
||||
"ip_address": "192.168.1.1",
|
||||
"subnet_mask": "255.255.255.0",
|
||||
},
|
||||
2: {
|
||||
"ip_address": "192.168.2.1",
|
||||
"subnet_mask": "255.255.255.0",
|
||||
},
|
||||
},
|
||||
"acl": {
|
||||
0: {
|
||||
"action": "PERMIT",
|
||||
"src_port": "POSTGRES_SERVER",
|
||||
"dst_port": "POSTGRES_SERVER",
|
||||
},
|
||||
1: {
|
||||
"action": "PERMIT",
|
||||
"protocol": "ICMP",
|
||||
},
|
||||
2: {
|
||||
"action": "PERMIT",
|
||||
"src_ip": "100.100.100.1",
|
||||
"dst_ip": "100.100.101.1",
|
||||
},
|
||||
3: {
|
||||
"action": "PERMIT",
|
||||
"src_ip": "100.100.102.0",
|
||||
"dst_ip": "100.100.103.0",
|
||||
"src_wildcard_mask": "0.0.0.255",
|
||||
"dst_wildcard_mask": "0.0.0.255",
|
||||
},
|
||||
20: {
|
||||
"action": "DENY",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
rt = Router.from_config(cfg=cfg)
|
||||
|
||||
assert rt.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")
|
||||
|
||||
assert rt.network_interface[2].ip_address == IPv4Address("192.168.2.1")
|
||||
assert rt.network_interface[2].subnet_mask == IPv4Address("255.255.255.0")
|
||||
|
||||
assert not rt.network_interface[3].enabled
|
||||
assert not rt.network_interface[4].enabled
|
||||
assert not rt.network_interface[5].enabled
|
||||
assert not rt.network_interface[6].enabled
|
||||
|
||||
r0 = rt.acl.acl[0]
|
||||
assert r0.action == ACLAction.PERMIT
|
||||
assert r0.src_port == r0.dst_port == Port.POSTGRES_SERVER
|
||||
assert r0.src_ip_address == r0.dst_ip_address == r0.dst_wildcard_mask == r0.src_wildcard_mask == r0.protocol == None
|
||||
|
||||
r1 = rt.acl.acl[1]
|
||||
assert r1.action == ACLAction.PERMIT
|
||||
assert r1.protocol == IPProtocol.ICMP
|
||||
assert (
|
||||
r1.src_ip_address
|
||||
== r1.dst_ip_address
|
||||
== r1.dst_wildcard_mask
|
||||
== r1.src_wildcard_mask
|
||||
== r1.src_port
|
||||
== r1.dst_port
|
||||
== None
|
||||
)
|
||||
|
||||
r2 = rt.acl.acl[2]
|
||||
assert r2.action == ACLAction.PERMIT
|
||||
assert r2.src_ip_address == IPv4Address("100.100.100.1")
|
||||
assert r2.dst_ip_address == IPv4Address("100.100.101.1")
|
||||
assert r2.src_wildcard_mask == r2.dst_wildcard_mask == None
|
||||
assert r2.src_port == r2.dst_port == r2.protocol == None
|
||||
|
||||
r3 = rt.acl.acl[3]
|
||||
assert r3.action == ACLAction.PERMIT
|
||||
assert r3.src_ip_address == IPv4Address("100.100.102.0")
|
||||
assert r3.dst_ip_address == IPv4Address("100.100.103.0")
|
||||
assert r3.src_wildcard_mask == IPv4Address("0.0.0.255")
|
||||
assert r3.dst_wildcard_mask == IPv4Address("0.0.0.255")
|
||||
assert r3.src_port == r3.dst_port == r3.protocol == None
|
||||
|
||||
r20 = rt.acl.acl[20]
|
||||
assert r20.action == ACLAction.DENY
|
||||
assert (
|
||||
r20.src_ip_address
|
||||
== r20.dst_ip_address
|
||||
== r20.src_wildcard_mask
|
||||
== r20.dst_wildcard_mask
|
||||
== r20.src_port
|
||||
== r20.dst_port
|
||||
== r20.protocol
|
||||
== None
|
||||
)
|
||||
@@ -0,0 +1,97 @@
|
||||
from ipaddress import IPv4Address
|
||||
|
||||
from primaite.simulator.network.hardware.nodes.network.router import ACLAction
|
||||
from primaite.simulator.network.hardware.nodes.network.wireless_router import WirelessRouter
|
||||
from primaite.simulator.network.transmission.network_layer import IPProtocol
|
||||
from primaite.simulator.network.transmission.transport_layer import Port
|
||||
|
||||
|
||||
def test_wireless_router_from_config():
|
||||
cfg = {
|
||||
"ref": "router_2",
|
||||
"type": "wireless_router",
|
||||
"hostname": "router_2",
|
||||
"router_interface": {
|
||||
"ip_address": "192.168.1.1",
|
||||
"subnet_mask": "255.255.255.0",
|
||||
},
|
||||
"wireless_access_point": {
|
||||
"ip_address": "192.170.1.1",
|
||||
"subnet_mask": "255.255.255.0",
|
||||
"frequency": "WIFI_2_4",
|
||||
},
|
||||
"acl": {
|
||||
0: {
|
||||
"action": "PERMIT",
|
||||
"src_port": "POSTGRES_SERVER",
|
||||
"dst_port": "POSTGRES_SERVER",
|
||||
},
|
||||
1: {
|
||||
"action": "PERMIT",
|
||||
"protocol": "ICMP",
|
||||
},
|
||||
2: {
|
||||
"action": "PERMIT",
|
||||
"src_ip": "100.100.100.1",
|
||||
"dst_ip": "100.100.101.1",
|
||||
},
|
||||
3: {
|
||||
"action": "PERMIT",
|
||||
"src_ip": "100.100.102.0",
|
||||
"dst_ip": "100.100.103.0",
|
||||
"src_wildcard_mask": "0.0.0.255",
|
||||
"dst_wildcard_mask": "0.0.0.255",
|
||||
},
|
||||
20: {
|
||||
"action": "DENY",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
rt = WirelessRouter.from_config(cfg=cfg)
|
||||
|
||||
r0 = rt.acl.acl[0]
|
||||
assert r0.action == ACLAction.PERMIT
|
||||
assert r0.src_port == r0.dst_port == Port.POSTGRES_SERVER
|
||||
assert r0.src_ip_address == r0.dst_ip_address == r0.dst_wildcard_mask == r0.src_wildcard_mask == r0.protocol == None
|
||||
|
||||
r1 = rt.acl.acl[1]
|
||||
assert r1.action == ACLAction.PERMIT
|
||||
assert r1.protocol == IPProtocol.ICMP
|
||||
assert (
|
||||
r1.src_ip_address
|
||||
== r1.dst_ip_address
|
||||
== r1.dst_wildcard_mask
|
||||
== r1.src_wildcard_mask
|
||||
== r1.src_port
|
||||
== r1.dst_port
|
||||
== None
|
||||
)
|
||||
|
||||
r2 = rt.acl.acl[2]
|
||||
assert r2.action == ACLAction.PERMIT
|
||||
assert r2.src_ip_address == IPv4Address("100.100.100.1")
|
||||
assert r2.dst_ip_address == IPv4Address("100.100.101.1")
|
||||
assert r2.src_wildcard_mask == r2.dst_wildcard_mask == None
|
||||
assert r2.src_port == r2.dst_port == r2.protocol == None
|
||||
|
||||
r3 = rt.acl.acl[3]
|
||||
assert r3.action == ACLAction.PERMIT
|
||||
assert r3.src_ip_address == IPv4Address("100.100.102.0")
|
||||
assert r3.dst_ip_address == IPv4Address("100.100.103.0")
|
||||
assert r3.src_wildcard_mask == IPv4Address("0.0.0.255")
|
||||
assert r3.dst_wildcard_mask == IPv4Address("0.0.0.255")
|
||||
assert r3.src_port == r3.dst_port == r3.protocol == None
|
||||
|
||||
r20 = rt.acl.acl[20]
|
||||
assert r20.action == ACLAction.DENY
|
||||
assert (
|
||||
r20.src_ip_address
|
||||
== r20.dst_ip_address
|
||||
== r20.src_wildcard_mask
|
||||
== r20.dst_wildcard_mask
|
||||
== r20.src_port
|
||||
== r20.dst_port
|
||||
== r20.protocol
|
||||
== None
|
||||
)
|
||||
Reference in New Issue
Block a user