From 4077eb3a5cfabbfe9800a2249a0a733e160a5a7c Mon Sep 17 00:00:00 2001 From: Marek Wolan Date: Thu, 24 Aug 2023 10:26:17 +0100 Subject: [PATCH] Add tests for network node adding/removal --- src/primaite/simulator/network/container.py | 8 +++- .../network/test_network_creation.py | 38 +++++++++++++++++++ .../_simulator/_network/test_container.py | 16 ++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 tests/integration_tests/network/test_network_creation.py create mode 100644 tests/unit_tests/_primaite/_simulator/_network/test_container.py diff --git a/src/primaite/simulator/network/container.py b/src/primaite/simulator/network/container.py index be2a3bbb..5d7e6a47 100644 --- a/src/primaite/simulator/network/container.py +++ b/src/primaite/simulator/network/container.py @@ -52,7 +52,9 @@ class NetworkContainer(SimComponent): :type node: Node """ if node in self: - _LOGGER.warning(f"Can't add node {node}. It is already in the network.") + msg = f"Can't add node {node}. It is already in the network." + _LOGGER.warning(msg) + raise RuntimeWarning(msg) self.nodes[node.uuid] = node node.parent = self @@ -64,7 +66,9 @@ class NetworkContainer(SimComponent): :type node: Node """ if node not in self: - _LOGGER.warning(f"Can't remove node {node}. It's not in the network.") + msg = f"Can't remove node {node}. It's not in the network." + _LOGGER.warning(msg) + raise RuntimeWarning(msg) del self.nodes[node.uuid] del node.parent # misleading? diff --git a/tests/integration_tests/network/test_network_creation.py b/tests/integration_tests/network/test_network_creation.py new file mode 100644 index 00000000..482c188d --- /dev/null +++ b/tests/integration_tests/network/test_network_creation.py @@ -0,0 +1,38 @@ +import pytest + +from primaite.simulator.network.container import NetworkContainer +from primaite.simulator.network.hardware.base import Node + + +def test_adding_removing_nodes(): + """Check that we can create and add a node to a network.""" + net = NetworkContainer() + n1 = Node(hostname="computer") + net.add_node(n1) + assert n1.parent is net + assert n1 in net + + net.remove_node(n1) + assert n1.parent is None + assert n1 not in net + + +def test_readding_node(): + """Check that warning is raised when readding a node.""" + net = NetworkContainer() + n1 = Node(hostname="computer") + net.add_node(n1) + with pytest.raises(RuntimeWarning): + net.add_node(n1) + assert n1.parent is net + assert n1 in net + + +def test_removing_nonexistent_node(): + """Check that warning is raised when trying to remove a node that is not in the network.""" + net = NetworkContainer() + n1 = Node(hostname="computer") + with pytest.raises(RuntimeWarning): + net.remove_node(n1) + assert n1.parent is None + assert n1 not in net diff --git a/tests/unit_tests/_primaite/_simulator/_network/test_container.py b/tests/unit_tests/_primaite/_simulator/_network/test_container.py new file mode 100644 index 00000000..2492dc87 --- /dev/null +++ b/tests/unit_tests/_primaite/_simulator/_network/test_container.py @@ -0,0 +1,16 @@ +import json + +from primaite.simulator.network.container import NetworkContainer + + +def test_creating_container(): + """Check that we can create a network container""" + net = NetworkContainer() + assert net.nodes and net.links + + +def test_describe_state(): + """Check that we can describe network state without raising errors, and that the result is JSON serialisable.""" + net = NetworkContainer() + state = net.describe_state() + json.dumps(state) # if this function call raises an error, the test fails, state was not JSON-serialisable