#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'
|
||||
|
||||
- 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'
|
||||
|
||||
@@ -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).
|
||||
|
||||
Technically Mebibits - but for simplicity sake, we'll call it megabit
|
||||
|
||||
:param B: The file size in Bytes.
|
||||
: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
|
||||
|
||||
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.nodes.computer import Computer
|
||||
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
|
||||
|
||||
example_network.set_original_state()
|
||||
example_network.show()
|
||||
|
||||
return example_network
|
||||
|
||||
|
||||
def test_describe_state(example_network):
|
||||
def test_describe_state(network):
|
||||
"""Test that describe state works."""
|
||||
state = example_network.describe_state()
|
||||
state = network.describe_state()
|
||||
|
||||
assert len(state["nodes"]) is 7
|
||||
assert len(state["links"]) is 6
|
||||
|
||||
|
||||
def test_reset_network(example_network):
|
||||
def test_reset_network(network):
|
||||
"""
|
||||
Test that the network is properly reset.
|
||||
|
||||
@@ -37,10 +39,10 @@ def test_reset_network(example_network):
|
||||
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")
|
||||
server_1: Computer = example_network.get_node_by_hostname("server_1")
|
||||
client_1: Computer = network.get_node_by_hostname("client_1")
|
||||
server_1: Computer = network.get_node_by_hostname("server_1")
|
||||
|
||||
assert client_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()
|
||||
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 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
|
||||
)
|
||||
|
||||
@@ -68,3 +70,46 @@ def test_creating_container():
|
||||
net = Network()
|
||||
assert net.nodes == {}
|
||||
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