#1947: added test for agent actions + clearing up the implementation of the request managers for filesystem

This commit is contained in:
Czar.Echavez
2023-10-20 12:58:58 +01:00
parent 0edb9b46a7
commit ffc4711afb
6 changed files with 266 additions and 122 deletions

View File

@@ -4,7 +4,7 @@ import shutil
import tempfile
from datetime import datetime
from pathlib import Path
from typing import Union
from typing import Any, Union
from unittest.mock import patch
import pytest
@@ -14,7 +14,9 @@ from primaite.environment.primaite_env import Primaite
from primaite.primaite_session import PrimaiteSession
from primaite.simulator.network.container import Network
from primaite.simulator.network.networks import arcd_uc2_network
from primaite.simulator.network.transmission.transport_layer import Port
from primaite.simulator.system.core.sys_log import SysLog
from primaite.simulator.system.services.service import Service
from tests.mock_and_patch.get_session_path_mock import get_temp_session_path
ACTION_SPACE_NODE_VALUES = 1
@@ -27,11 +29,25 @@ from primaite.simulator.file_system.file_system import FileSystem
from primaite.simulator.network.hardware.base import Node
class TestService(Service):
"""Test Service class"""
def receive(self, payload: Any, session_id: str, **kwargs) -> bool:
pass
@pytest.fixture(scope="function")
def uc2_network() -> Network:
return arcd_uc2_network()
@pytest.fixture(scope="function")
def service(file_system) -> TestService:
return TestService(
name="TestService", port=Port.ARP, file_system=file_system, sys_log=SysLog(hostname="test_service")
)
@pytest.fixture(scope="function")
def file_system() -> FileSystem:
return Node(hostname="fs_node").file_system

View File

@@ -0,0 +1,128 @@
from typing import Tuple
import pytest
from primaite.simulator.file_system.file_system import File, FileSystem, FileSystemItemStatus, Folder
@pytest.fixture(scope="function")
def populated_file_system(file_system) -> Tuple[FileSystem, Folder, File]:
"""Test that an agent can request a file scan."""
folder = file_system.create_folder(folder_name="test_folder")
file = file_system.create_file(folder_name="test_folder", file_name="test_file.txt")
return file_system, folder, file
def test_file_scan_request(populated_file_system):
"""Test that an agent can request a file scan."""
fs, folder, file = populated_file_system
file.corrupt()
assert file.status == FileSystemItemStatus.CORRUPTED
assert file.visible_status == FileSystemItemStatus.GOOD
fs.apply_request(request=["file", file.uuid, "scan"])
assert file.status == FileSystemItemStatus.CORRUPTED
assert file.visible_status == FileSystemItemStatus.CORRUPTED
def test_folder_scan_request(populated_file_system):
"""Test that an agent can request a folder scan."""
fs, folder, file = populated_file_system
folder.corrupt()
assert folder.status == FileSystemItemStatus.CORRUPTED
assert file.status == FileSystemItemStatus.CORRUPTED
assert folder.visible_status == FileSystemItemStatus.GOOD
assert file.visible_status == FileSystemItemStatus.GOOD
fs.apply_request(request=["folder", folder.uuid, "scan"])
assert folder.status == FileSystemItemStatus.CORRUPTED
assert file.status == FileSystemItemStatus.CORRUPTED
assert folder.visible_status == FileSystemItemStatus.CORRUPTED
assert file.visible_status == FileSystemItemStatus.CORRUPTED
def test_file_checkhash_request(populated_file_system):
"""Test that an agent can request a file hash check."""
fs, folder, file = populated_file_system
fs.apply_request(request=["file", file.uuid, "checkhash"])
assert file.status == FileSystemItemStatus.GOOD
file.sim_size = 0
fs.apply_request(request=["file", file.uuid, "checkhash"])
assert file.status == FileSystemItemStatus.CORRUPTED
def test_folder_checkhash_request(populated_file_system):
"""Test that an agent can request a folder hash check."""
fs, folder, file = populated_file_system
fs.apply_request(request=["folder", folder.uuid, "checkhash"])
assert folder.status == FileSystemItemStatus.GOOD
file.sim_size = 0
fs.apply_request(request=["folder", folder.uuid, "checkhash"])
assert folder.status == FileSystemItemStatus.CORRUPTED
def test_file_repair_request(populated_file_system):
"""Test that an agent can request a file repair."""
fs, folder, file = populated_file_system
file.corrupt()
assert file.status == FileSystemItemStatus.CORRUPTED
fs.apply_request(request=["file", file.uuid, "repair"])
assert file.status == FileSystemItemStatus.GOOD
def test_folder_repair_request(populated_file_system):
"""Test that an agent can request a folder repair."""
fs, folder, file = populated_file_system
folder.corrupt()
assert file.status == FileSystemItemStatus.CORRUPTED
assert folder.status == FileSystemItemStatus.CORRUPTED
fs.apply_request(request=["folder", folder.uuid, "repair"])
assert file.status == FileSystemItemStatus.GOOD
assert folder.status == FileSystemItemStatus.GOOD
def test_file_restore_request(populated_file_system):
pass
def test_folder_restore_request(populated_file_system):
pass
def test_file_corrupt_request(populated_file_system):
"""Test that an agent can request a file corruption."""
fs, folder, file = populated_file_system
fs.apply_request(request=["file", file.uuid, "corrupt"])
assert file.status == FileSystemItemStatus.CORRUPTED
def test_folder_corrupt_request(populated_file_system):
"""Test that an agent can request a folder corruption."""
fs, folder, file = populated_file_system
fs.apply_request(request=["folder", folder.uuid, "corrupt"])
assert file.status == FileSystemItemStatus.CORRUPTED
assert folder.status == FileSystemItemStatus.CORRUPTED
def test_file_delete_request(populated_file_system):
pass
def test_folder_delete_request(populated_file_system):
pass

View File

@@ -0,0 +1,23 @@
import pytest
from primaite.simulator.network.hardware.base import Node, NodeOperatingState
@pytest.fixture
def node() -> Node:
return Node(hostname="test")
def test_node_startup(node):
assert node.operating_state == NodeOperatingState.OFF
node.apply_request(["startup"])
assert node.operating_state == NodeOperatingState.ON
def test_node_shutdown(node):
assert node.operating_state == NodeOperatingState.OFF
node.apply_request(["startup"])
assert node.operating_state == NodeOperatingState.ON
node.apply_request(["shutdown"])
assert node.operating_state == NodeOperatingState.OFF

View File

@@ -0,0 +1,79 @@
from primaite.simulator.system.services.service import ServiceOperatingState
def test_service_scan(service):
"""Test that an agent can request a service scan."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
assert service.visible_operating_state == ServiceOperatingState.STOPPED
service.apply_request(["scan"])
assert service.operating_state == ServiceOperatingState.RUNNING
assert service.visible_operating_state == ServiceOperatingState.RUNNING
def test_service_stop(service):
"""Test that an agent can request to stop a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["stop"])
assert service.operating_state == ServiceOperatingState.STOPPED
def test_service_start(service):
"""Test that an agent can request to start a service."""
assert service.operating_state == ServiceOperatingState.STOPPED
service.apply_request(["start"])
assert service.operating_state == ServiceOperatingState.RUNNING
def test_service_pause(service):
"""Test that an agent can request to pause a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["pause"])
assert service.operating_state == ServiceOperatingState.PAUSED
def test_service_resume(service):
"""Test that an agent can request to resume a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["pause"])
assert service.operating_state == ServiceOperatingState.PAUSED
service.apply_request(["resume"])
assert service.operating_state == ServiceOperatingState.RUNNING
def test_service_restart(service):
"""Test that an agent can request to restart a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["restart"])
assert service.operating_state == ServiceOperatingState.RESTARTING
def test_service_disable(service):
"""Test that an agent can request to disable a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["disable"])
assert service.operating_state == ServiceOperatingState.DISABLED
def test_service_enable(service):
"""Test that an agent can request to enable a service."""
service.start()
assert service.operating_state == ServiceOperatingState.RUNNING
service.apply_request(["disable"])
assert service.operating_state == ServiceOperatingState.DISABLED
service.apply_request(["enable"])
assert service.operating_state == ServiceOperatingState.STOPPED

View File

@@ -1,24 +1,4 @@
from typing import Any
import pytest
from primaite.simulator.network.transmission.transport_layer import Port
from primaite.simulator.system.core.sys_log import SysLog
from primaite.simulator.system.services.service import Service, ServiceOperatingState
class TestService(Service):
"""Test Service class"""
def receive(self, payload: Any, session_id: str, **kwargs) -> bool:
pass
@pytest.fixture(scope="function")
def service(file_system) -> TestService:
return TestService(
name="TestService", port=Port.ARP, file_system=file_system, sys_log=SysLog(hostname="test_service")
)
from primaite.simulator.system.services.service import ServiceOperatingState
def test_scan(service):