#2084: more tests + remove concurrency in test to make sure coverage works

This commit is contained in:
Czar Echavez
2023-11-30 15:47:31 +00:00
parent 3cf21e4015
commit d9de57757f
5 changed files with 85 additions and 10 deletions

View File

@@ -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'

View File

@@ -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.
"""

View File

@@ -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

View File

@@ -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

View 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)