#2084: more tests + remove concurrency in test to make sure coverage works
This commit is contained in:
@@ -86,5 +86,5 @@ stages:
|
|||||||
displayName: 'Perform PrimAITE Setup'
|
displayName: 'Perform PrimAITE Setup'
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
pytest -n auto --cov=src --cov-report=html:coverage_report --cov-fail-under=80
|
pytest --cov=src --cov-report=html:coverage_report --cov-fail-under=80
|
||||||
displayName: 'Run tests and code coverage'
|
displayName: 'Run tests and code coverage'
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ def convert_bytes_to_megabits(B: Union[int, float]) -> float: # noqa - Keep it
|
|||||||
"""
|
"""
|
||||||
Convert Bytes (file size) to Megabits (data transfer).
|
Convert Bytes (file size) to Megabits (data transfer).
|
||||||
|
|
||||||
|
Technically Mebibits - but for simplicity sake, we'll call it megabit
|
||||||
|
|
||||||
:param B: The file size in Bytes.
|
:param B: The file size in Bytes.
|
||||||
:return: File bits to transfer in Megabits.
|
:return: File bits to transfer in Megabits.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState
|
||||||
|
from primaite.simulator.network.hardware.nodes.switch import Switch
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def switch() -> Switch:
|
||||||
|
switch: Switch = Switch(hostname="switch_1", num_ports=8, operating_state=NodeOperatingState.ON)
|
||||||
|
switch.show()
|
||||||
|
return switch
|
||||||
|
|
||||||
|
|
||||||
|
def test_describe_state(switch):
|
||||||
|
state = switch.describe_state()
|
||||||
|
assert len(state.get("ports")) is 8
|
||||||
|
assert state.get("num_ports") is 8
|
||||||
@@ -3,6 +3,7 @@ import json
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from primaite.simulator.network.container import Network
|
from primaite.simulator.network.container import Network
|
||||||
|
from primaite.simulator.network.hardware.base import Link, Node
|
||||||
from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState
|
from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState
|
||||||
from primaite.simulator.network.hardware.nodes.computer import Computer
|
from primaite.simulator.network.hardware.nodes.computer import Computer
|
||||||
from primaite.simulator.system.applications.database_client import DatabaseClient
|
from primaite.simulator.system.applications.database_client import DatabaseClient
|
||||||
@@ -17,19 +18,20 @@ def network(example_network) -> Network:
|
|||||||
assert len(example_network.servers) is 2
|
assert len(example_network.servers) is 2
|
||||||
|
|
||||||
example_network.set_original_state()
|
example_network.set_original_state()
|
||||||
|
example_network.show()
|
||||||
|
|
||||||
return example_network
|
return example_network
|
||||||
|
|
||||||
|
|
||||||
def test_describe_state(example_network):
|
def test_describe_state(network):
|
||||||
"""Test that describe state works."""
|
"""Test that describe state works."""
|
||||||
state = example_network.describe_state()
|
state = network.describe_state()
|
||||||
|
|
||||||
assert len(state["nodes"]) is 7
|
assert len(state["nodes"]) is 7
|
||||||
assert len(state["links"]) is 6
|
assert len(state["links"]) is 6
|
||||||
|
|
||||||
|
|
||||||
def test_reset_network(example_network):
|
def test_reset_network(network):
|
||||||
"""
|
"""
|
||||||
Test that the network is properly reset.
|
Test that the network is properly reset.
|
||||||
|
|
||||||
@@ -37,10 +39,10 @@ def test_reset_network(example_network):
|
|||||||
etc are also removed/reinstalled
|
etc are also removed/reinstalled
|
||||||
|
|
||||||
"""
|
"""
|
||||||
state_before = example_network.describe_state()
|
state_before = network.describe_state()
|
||||||
|
|
||||||
client_1: Computer = example_network.get_node_by_hostname("client_1")
|
client_1: Computer = network.get_node_by_hostname("client_1")
|
||||||
server_1: Computer = example_network.get_node_by_hostname("server_1")
|
server_1: Computer = network.get_node_by_hostname("server_1")
|
||||||
|
|
||||||
assert client_1.operating_state is NodeOperatingState.ON
|
assert client_1.operating_state is NodeOperatingState.ON
|
||||||
assert server_1.operating_state is NodeOperatingState.ON
|
assert server_1.operating_state is NodeOperatingState.ON
|
||||||
@@ -51,14 +53,14 @@ def test_reset_network(example_network):
|
|||||||
server_1.power_off()
|
server_1.power_off()
|
||||||
assert server_1.operating_state is NodeOperatingState.SHUTTING_DOWN
|
assert server_1.operating_state is NodeOperatingState.SHUTTING_DOWN
|
||||||
|
|
||||||
assert example_network.describe_state() is not state_before
|
assert network.describe_state() is not state_before
|
||||||
|
|
||||||
example_network.reset_component_for_episode(episode=1)
|
network.reset_component_for_episode(episode=1)
|
||||||
|
|
||||||
assert client_1.operating_state is NodeOperatingState.ON
|
assert client_1.operating_state is NodeOperatingState.ON
|
||||||
assert server_1.operating_state is NodeOperatingState.ON
|
assert server_1.operating_state is NodeOperatingState.ON
|
||||||
|
|
||||||
assert json.dumps(example_network.describe_state(), sort_keys=True, indent=2) == json.dumps(
|
assert json.dumps(network.describe_state(), sort_keys=True, indent=2) == json.dumps(
|
||||||
state_before, sort_keys=True, indent=2
|
state_before, sort_keys=True, indent=2
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -68,3 +70,46 @@ def test_creating_container():
|
|||||||
net = Network()
|
net = Network()
|
||||||
assert net.nodes == {}
|
assert net.nodes == {}
|
||||||
assert net.links == {}
|
assert net.links == {}
|
||||||
|
net.show()
|
||||||
|
|
||||||
|
|
||||||
|
def test_apply_timestep_to_nodes(network):
|
||||||
|
"""Calling apply_timestep on the network should apply to the nodes within it."""
|
||||||
|
client_1: Computer = network.get_node_by_hostname("client_1")
|
||||||
|
assert client_1.operating_state is NodeOperatingState.ON
|
||||||
|
|
||||||
|
client_1.power_off()
|
||||||
|
|
||||||
|
for i in range(client_1.shut_down_duration + 1):
|
||||||
|
network.apply_timestep(timestep=i)
|
||||||
|
|
||||||
|
assert client_1.operating_state is NodeOperatingState.OFF
|
||||||
|
|
||||||
|
|
||||||
|
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(Node(hostname="new_node"))
|
||||||
|
assert len(network.nodes) is 7
|
||||||
|
|
||||||
|
|
||||||
|
def test_remove_node(network):
|
||||||
|
"""Remove node should remove the correct node."""
|
||||||
|
assert len(network.nodes) is 7
|
||||||
|
|
||||||
|
client_1: Computer = network.get_node_by_hostname("client_1")
|
||||||
|
network.remove_node(client_1)
|
||||||
|
|
||||||
|
assert network.get_node_by_hostname("client_1") is None
|
||||||
|
assert len(network.nodes) is 6
|
||||||
|
|
||||||
|
|
||||||
|
def test_remove_link(network):
|
||||||
|
"""Remove link should remove the correct link."""
|
||||||
|
assert len(network.links) is 6
|
||||||
|
link: Link = network.links.get(next(iter(network.links)))
|
||||||
|
|
||||||
|
network.remove_link(link)
|
||||||
|
assert len(network.links) is 5
|
||||||
|
assert network.links.get(link.uuid) is None
|
||||||
|
|||||||
11
tests/unit_tests/_primaite/_simulator/_network/test_utils.py
Normal file
11
tests/unit_tests/_primaite/_simulator/_network/test_utils.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
from primaite.simulator.network.utils import convert_bytes_to_megabits, convert_megabits_to_bytes
|
||||||
|
|
||||||
|
|
||||||
|
def test_convert_bytes_to_megabits():
|
||||||
|
assert round(convert_bytes_to_megabits(B=131072), 5) == float(1)
|
||||||
|
assert round(convert_bytes_to_megabits(B=69420), 5) == float(0.52963)
|
||||||
|
|
||||||
|
|
||||||
|
def test_convert_megabits_to_bytes():
|
||||||
|
assert round(convert_megabits_to_bytes(Mbits=1), 5) == float(131072)
|
||||||
|
assert round(convert_megabits_to_bytes(Mbits=float(0.52963)), 5) == float(69419.66336)
|
||||||
Reference in New Issue
Block a user