Add test to new action functionliaty
This commit is contained in:
@@ -218,9 +218,9 @@ class SimComponent(BaseModel):
|
|||||||
:param: context: Dict containing context for actions
|
:param: context: Dict containing context for actions
|
||||||
:type context: Dict
|
:type context: Dict
|
||||||
"""
|
"""
|
||||||
if self.action_manager is None:
|
if self._action_manager is None:
|
||||||
return
|
return
|
||||||
self.action_manager(action, context)
|
self._action_manager(action, context)
|
||||||
|
|
||||||
def apply_timestep(self, timestep: int) -> None:
|
def apply_timestep(self, timestep: int) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from primaite.simulator.core import Action
|
||||||
|
from primaite.simulator.network.hardware.nodes.computer import Computer
|
||||||
|
from primaite.simulator.network.hardware.nodes.server import Server
|
||||||
|
from primaite.simulator.network.hardware.nodes.switch import Switch
|
||||||
|
from primaite.simulator.sim_container import Simulation
|
||||||
|
from primaite.simulator.system.services.database_service import DatabaseService
|
||||||
|
|
||||||
|
|
||||||
|
def test_passing_actions_down(monkeypatch) -> None:
|
||||||
|
"""Check that an action is passed down correctly to the child component."""
|
||||||
|
|
||||||
|
sim = Simulation()
|
||||||
|
|
||||||
|
pc1 = Computer(hostname="PC-1", ip_address="10.10.1.1", subnet_mask="255.255.255.0")
|
||||||
|
pc2 = Computer(hostname="PC-2", ip_address="10.10.1.2", subnet_mask="255.255.255.0")
|
||||||
|
srv = Server(hostname="WEBSERVER", ip_address="10.10.1.100", subnet_mask="255.255.255.0")
|
||||||
|
s1 = Switch(hostname="switch1")
|
||||||
|
|
||||||
|
for n in [pc1, pc2, srv, s1]:
|
||||||
|
sim.network.add_node(n)
|
||||||
|
|
||||||
|
database_service = DatabaseService(file_system=srv.file_system)
|
||||||
|
srv.install_service(database_service)
|
||||||
|
|
||||||
|
downloads_folder = pc1.file_system.create_folder("downloads")
|
||||||
|
pc1.file_system.create_file("bermuda_triangle.png", folder_name="downloads")
|
||||||
|
|
||||||
|
sim.network.connect(pc1.ethernet_port[1], s1.switch_ports[1])
|
||||||
|
sim.network.connect(pc2.ethernet_port[1], s1.switch_ports[2])
|
||||||
|
sim.network.connect(s1.switch_ports[3], srv.ethernet_port[1])
|
||||||
|
|
||||||
|
# call this method to make sure no errors occur.
|
||||||
|
sim._action_manager.get_action_tree()
|
||||||
|
|
||||||
|
# patch the action to do something which we can check the result of.
|
||||||
|
action_invoked = False
|
||||||
|
|
||||||
|
def succeed():
|
||||||
|
nonlocal action_invoked
|
||||||
|
action_invoked = True
|
||||||
|
|
||||||
|
monkeypatch.setitem(
|
||||||
|
downloads_folder._action_manager.actions, "repair", Action(func=lambda request, context: succeed())
|
||||||
|
)
|
||||||
|
|
||||||
|
assert not action_invoked
|
||||||
|
|
||||||
|
# call the patched method
|
||||||
|
sim.apply_action(
|
||||||
|
["network", "node", pc1.uuid, "file_system", "folder", pc1.file_system.get_folder("downloads").uuid, "repair"]
|
||||||
|
)
|
||||||
|
|
||||||
|
assert action_invoked
|
||||||
@@ -7,6 +7,7 @@ from primaite.simulator.core import Action, ActionManager, AllowAllValidator, Si
|
|||||||
from primaite.simulator.domain.controller import AccountGroup, GroupMembershipValidator
|
from primaite.simulator.domain.controller import AccountGroup, GroupMembershipValidator
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skip(reason="Action validation is not currently a required feature.")
|
||||||
def test_group_action_validation() -> None:
|
def test_group_action_validation() -> None:
|
||||||
"""
|
"""
|
||||||
Check that actions are denied when an unauthorised request is made.
|
Check that actions are denied when an unauthorised request is made.
|
||||||
@@ -28,9 +29,9 @@ def test_group_action_validation() -> None:
|
|||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.action_manager = ActionManager()
|
self._action_manager = ActionManager()
|
||||||
|
|
||||||
self.action_manager.add_action(
|
self._action_manager.add_action(
|
||||||
"create_folder",
|
"create_folder",
|
||||||
Action(
|
Action(
|
||||||
func=lambda request, context: self.create_folder(request[0]),
|
func=lambda request, context: self.create_folder(request[0]),
|
||||||
@@ -62,6 +63,7 @@ def test_group_action_validation() -> None:
|
|||||||
assert my_node.folders[0].name == "memes"
|
assert my_node.folders[0].name == "memes"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skip(reason="Action validation is not currently a required feature.")
|
||||||
def test_hierarchical_action_with_validation() -> None:
|
def test_hierarchical_action_with_validation() -> None:
|
||||||
"""
|
"""
|
||||||
Check that validation works with sub-objects.
|
Check that validation works with sub-objects.
|
||||||
|
|||||||
Reference in New Issue
Block a user