2024-06-05 09:11:37 +01:00
|
|
|
# © Crown-owned copyright 2024, Defence Science and Technology Laboratory UK
|
2023-11-23 22:10:53 +00:00
|
|
|
from typing import Tuple
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState
|
2024-02-05 08:44:10 +00:00
|
|
|
from primaite.simulator.network.hardware.nodes.host.computer import Computer
|
|
|
|
|
from primaite.simulator.network.hardware.nodes.host.server import Server
|
2023-11-23 22:10:53 +00:00
|
|
|
from primaite.simulator.system.services.service import Service, ServiceOperatingState
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
2023-11-24 15:15:56 +00:00
|
|
|
def populated_node(
|
|
|
|
|
service_class,
|
|
|
|
|
) -> Tuple[Server, Service]:
|
2023-11-23 22:10:53 +00:00
|
|
|
server = Server(
|
2024-02-08 16:15:57 +00:00
|
|
|
hostname="server",
|
|
|
|
|
ip_address="192.168.0.1",
|
|
|
|
|
subnet_mask="255.255.255.0",
|
|
|
|
|
start_up_duration=0,
|
|
|
|
|
shut_down_duration=0,
|
2023-11-23 22:10:53 +00:00
|
|
|
)
|
2024-02-08 15:27:02 +00:00
|
|
|
server.power_on()
|
2023-11-23 22:28:08 +00:00
|
|
|
server.software_manager.install(service_class)
|
2023-11-23 22:10:53 +00:00
|
|
|
|
2024-07-31 16:41:59 +01:00
|
|
|
service = server.software_manager.software.get("DummyService")
|
2023-11-23 22:10:53 +00:00
|
|
|
service.start()
|
|
|
|
|
|
2023-11-24 15:15:56 +00:00
|
|
|
return server, service
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_service_on_offline_node(service_class):
|
|
|
|
|
"""Test to check that the service cannot be interacted with when node it is on is off."""
|
|
|
|
|
computer: Computer = Computer(
|
|
|
|
|
hostname="test_computer",
|
|
|
|
|
ip_address="192.168.1.2",
|
|
|
|
|
subnet_mask="255.255.255.0",
|
|
|
|
|
default_gateway="192.168.1.1",
|
2024-02-08 15:27:02 +00:00
|
|
|
start_up_duration=0,
|
2024-02-08 16:15:57 +00:00
|
|
|
shut_down_duration=0,
|
2023-11-24 15:15:56 +00:00
|
|
|
)
|
2024-02-08 15:27:02 +00:00
|
|
|
computer.power_on()
|
2023-11-24 15:15:56 +00:00
|
|
|
computer.software_manager.install(service_class)
|
|
|
|
|
|
2024-07-31 16:41:59 +01:00
|
|
|
service: Service = computer.software_manager.software.get("DummyService")
|
2023-11-24 15:15:56 +00:00
|
|
|
|
|
|
|
|
computer.power_off()
|
|
|
|
|
|
|
|
|
|
assert computer.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
service.start()
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
service.resume()
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
service.restart()
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
service.pause()
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
2023-11-23 22:10:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_server_turns_off_service(populated_node):
|
|
|
|
|
"""Check that the service is turned off when the server is turned off"""
|
2023-11-24 15:15:56 +00:00
|
|
|
server, service = populated_node
|
2023-11-23 22:10:53 +00:00
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.ON
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.RUNNING
|
|
|
|
|
|
|
|
|
|
server.power_off()
|
|
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_service_cannot_be_turned_on_when_server_is_off(populated_node):
|
|
|
|
|
"""Check that the service cannot be started when the server is off."""
|
2023-11-24 15:15:56 +00:00
|
|
|
server, service = populated_node
|
2023-11-23 22:10:53 +00:00
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.ON
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.RUNNING
|
|
|
|
|
|
|
|
|
|
server.power_off()
|
|
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
service.start()
|
|
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_server_turns_on_service(populated_node):
|
|
|
|
|
"""Check that turning on the server turns on service."""
|
2023-11-24 15:15:56 +00:00
|
|
|
server, service = populated_node
|
2023-11-23 22:10:53 +00:00
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.ON
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.RUNNING
|
|
|
|
|
|
|
|
|
|
server.power_off()
|
|
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
server.power_on()
|
|
|
|
|
|
|
|
|
|
assert server.operating_state is NodeOperatingState.ON
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.RUNNING
|
2023-11-27 11:38:03 +00:00
|
|
|
|
|
|
|
|
server.power_off()
|
2024-02-08 16:15:57 +00:00
|
|
|
|
2023-11-27 11:38:03 +00:00
|
|
|
assert server.operating_state is NodeOperatingState.OFF
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.STOPPED
|
|
|
|
|
|
|
|
|
|
server.power_on()
|
2024-02-08 16:15:57 +00:00
|
|
|
|
2023-11-27 11:38:03 +00:00
|
|
|
assert server.operating_state is NodeOperatingState.ON
|
|
|
|
|
assert service.operating_state is ServiceOperatingState.RUNNING
|