72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
# © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK
|
|
"""Used to test Service Node functions."""
|
|
import pytest
|
|
|
|
from primaite.common.enums import HardwareState, SoftwareState
|
|
from primaite.common.service import Service
|
|
from primaite.nodes.service_node import ServiceNode
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"operating_state, expected_state",
|
|
[
|
|
(HardwareState.OFF, SoftwareState.GOOD),
|
|
(HardwareState.ON, SoftwareState.OVERWHELMED),
|
|
],
|
|
)
|
|
def test_service_state_change(operating_state, expected_state):
|
|
"""
|
|
Test that a node cannot change the state of a running service.
|
|
|
|
When its hardware state is OFF.
|
|
"""
|
|
service_node = ServiceNode(
|
|
0,
|
|
"node",
|
|
"COMPUTER",
|
|
"1",
|
|
operating_state,
|
|
"192.168.0.1",
|
|
"COMPROMISED",
|
|
"RESTORING",
|
|
1,
|
|
)
|
|
service = Service("TCP", 80, SoftwareState.GOOD)
|
|
service_node.add_service(service)
|
|
|
|
service_node.set_service_state("TCP", SoftwareState.OVERWHELMED)
|
|
|
|
assert service_node.get_service_state("TCP") == expected_state
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"operating_state, expected_state",
|
|
[
|
|
(HardwareState.OFF, SoftwareState.GOOD),
|
|
(HardwareState.ON, SoftwareState.OVERWHELMED),
|
|
],
|
|
)
|
|
def test_service_state_change_if_not_comprised(operating_state, expected_state):
|
|
"""
|
|
Test that a node cannot change the state of a running service.
|
|
|
|
If not compromised when its hardware state is ON.
|
|
"""
|
|
service_node = ServiceNode(
|
|
0,
|
|
"node",
|
|
"COMPUTER",
|
|
"1",
|
|
operating_state,
|
|
"192.168.0.1",
|
|
"GOOD",
|
|
"RESTORING",
|
|
1,
|
|
)
|
|
service = Service("TCP", 80, SoftwareState.GOOD)
|
|
service_node.add_service(service)
|
|
|
|
service_node.set_service_state_if_not_compromised("TCP", SoftwareState.OVERWHELMED)
|
|
|
|
assert service_node.get_service_state("TCP") == expected_state
|