#2533: clean up temp items in tests + fixing the CLI tests

This commit is contained in:
Czar Echavez
2024-05-01 14:33:33 +01:00
parent a2fb04e6f6
commit b6b5ce91c2
5 changed files with 44 additions and 53 deletions

View File

@@ -1,3 +1,5 @@
from typing import Dict, Optional
import yaml
from primaite import PRIMAITE_CONFIG, PRIMAITE_PATHS
@@ -8,7 +10,13 @@ def is_dev_mode() -> bool:
return PRIMAITE_CONFIG["developer_mode"]["enabled"]
def update_primaite_application_config() -> None:
"""Update the PrimAITE application config file."""
def update_primaite_application_config(config: Optional[Dict] = None) -> None:
"""
Update the PrimAITE application config file.
:params: config: Leave empty so that PRIMAITE_CONFIG is used - otherwise provide the Dict
"""
with open(PRIMAITE_PATHS.app_config_file_path, "w") as file:
yaml.dump(PRIMAITE_CONFIG, file)
if not config:
config = PRIMAITE_CONFIG
yaml.dump(config, file)

View File

@@ -1,19 +1,14 @@
# © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, Optional, Tuple, Union
from typing import Any, Dict, Tuple
import pytest
import yaml
from _pytest.monkeypatch import MonkeyPatch
from primaite import getLogger, PRIMAITE_PATHS
from primaite import getLogger
from primaite.game.agent.actions import ActionManager
from primaite.game.agent.interface import AbstractAgent
from primaite.game.agent.observations.observation_manager import NestedObservation, ObservationManager
from primaite.game.agent.rewards import RewardFunction
from primaite.game.game import PrimaiteGame
from primaite.simulator import SIM_OUTPUT
from primaite.simulator.file_system.file_system import FileSystem
from primaite.simulator.network.container import Network
from primaite.simulator.network.hardware.nodes.host.computer import Computer
@@ -32,7 +27,6 @@ from primaite.simulator.system.services.dns.dns_server import DNSServer
from primaite.simulator.system.services.service import Service
from primaite.simulator.system.services.web_server.web_server import WebServer
from tests import TEST_ASSETS_ROOT
from tests.mock_and_patch.get_session_path_mock import temp_user_sessions_path
ACTION_SPACE_NODE_VALUES = 1
ACTION_SPACE_NODE_ACTION_VALUES = 1

View File

@@ -38,3 +38,5 @@ def test_rllib_single_agent_compatibility():
save_file = Path(tempfile.gettempdir()) / "ray/"
algo.save(save_file)
assert save_file.exists()
save_file.unlink() # clean up

View File

@@ -25,3 +25,4 @@ def test_sb3_compatibility():
model.save(save_path)
assert (save_path).exists()
save_path.unlink() # clean up

View File

@@ -6,9 +6,9 @@ from pathlib import Path
import pkg_resources
import pytest
import yaml
from _pytest.monkeypatch import MonkeyPatch
import primaite
from primaite import PRIMAITE_CONFIG
from primaite.utils.cli.primaite_config_utils import update_primaite_application_config
from tests.integration_tests.cli import cli
@@ -17,35 +17,27 @@ def test_setup():
"""
Setup this test by using the default primaite app config in package
"""
current_config = primaite.PRIMAITE_CONFIG # store the config before test
original_config_path = primaite.PRIMAITE_PATHS.app_config_file_path # keep track of app config before test
global PRIMAITE_CONFIG
current_config = PRIMAITE_CONFIG.copy() # store the config before test
temp_dir = tempfile.gettempdir()
temp_config = Path(temp_dir) / "primaite_config.yaml"
pkg_config_path = Path(pkg_resources.resource_filename("primaite", "setup/_package_data/primaite_config.yaml"))
shutil.copyfile(pkg_config_path, temp_config) # copy the default primaite config to temp directory
primaite.PRIMAITE_PATHS.app_config_file_path = temp_config # use the copy for the test
with open(pkg_config_path, "r") as file:
# load from config
config_dict = yaml.safe_load(file)
primaite.PRIMAITE_CONFIG = config_dict
assert primaite.PRIMAITE_CONFIG == config_dict
PRIMAITE_CONFIG["developer_mode"] = config_dict["developer_mode"]
yield
os.remove(temp_config) # clean up temp file
primaite.PRIMAITE_CONFIG = current_config # restore config to prevent being yelled at
assert primaite.PRIMAITE_CONFIG == current_config
primaite.PRIMAITE_PATHS.app_config_file_path = original_config_path
PRIMAITE_CONFIG["developer_mode"] = current_config["developer_mode"] # restore config to prevent being yelled at
update_primaite_application_config(config=PRIMAITE_CONFIG)
@pytest.mark.skip(reason="borked")
def test_dev_mode_enable_disable():
"""Test dev mode enable and disable."""
# check defaults
assert primaite.PRIMAITE_CONFIG["developer_mode"]["enabled"] is False # not enabled by default
assert PRIMAITE_CONFIG["developer_mode"]["enabled"] is False # not enabled by default
result = cli(["dev-mode", "show"])
assert "Production" in result.output # should print that it is in Production mode by default
@@ -54,7 +46,7 @@ def test_dev_mode_enable_disable():
assert "Development" in result.output # should print that it is in Development mode
assert primaite.PRIMAITE_CONFIG["developer_mode"]["enabled"] # config should reflect that dev mode is enabled
assert PRIMAITE_CONFIG["developer_mode"]["enabled"] # config should reflect that dev mode is enabled
result = cli(["dev-mode", "show"])
assert "Development" in result.output # should print that it is in Development mode
@@ -63,123 +55,117 @@ def test_dev_mode_enable_disable():
assert "Production" in result.output # should print that it is in Production mode
assert (
primaite.PRIMAITE_CONFIG["developer_mode"]["enabled"] is False
) # config should reflect that dev mode is disabled
assert PRIMAITE_CONFIG["developer_mode"]["enabled"] is False # config should reflect that dev mode is disabled
result = cli(["dev-mode", "show"])
assert "Production" in result.output # should print that it is in Production mode
@pytest.mark.skip(reason="borked")
def test_dev_mode_config_sys_log_level():
"""Check that the system log level can be changed via CLI."""
# check defaults
assert primaite.PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "DEBUG" # DEBUG by default
assert PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "DEBUG" # DEBUG by default
result = cli(["dev-mode", "config", "-level", "WARNING"])
assert "sys_log_level=WARNING" in result.output # should print correct value
# config should reflect that log level is WARNING
assert primaite.PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "WARNING"
assert PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "WARNING"
result = cli(["dev-mode", "config", "--sys-log-level", "INFO"])
assert "sys_log_level=INFO" in result.output # should print correct value
# config should reflect that log level is WARNING
assert primaite.PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "INFO"
assert PRIMAITE_CONFIG["developer_mode"]["sys_log_level"] == "INFO"
@pytest.mark.skip(reason="borked")
def test_dev_mode_config_sys_logs_enable_disable():
"""Test that the system logs output can be enabled or disabled."""
# check defaults
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False # False by default
assert PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False # False by default
result = cli(["dev-mode", "config", "--output-sys-logs"])
assert "output_sys_logs=True" in result.output # should print correct value
# config should reflect that output_sys_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"]
assert PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"]
result = cli(["dev-mode", "config", "--no-sys-logs"])
assert "output_sys_logs=False" in result.output # should print correct value
# config should reflect that output_sys_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False
result = cli(["dev-mode", "config", "-sys"])
assert "output_sys_logs=True" in result.output # should print correct value
# config should reflect that output_sys_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"]
assert PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"]
result = cli(["dev-mode", "config", "-nsys"])
assert "output_sys_logs=False" in result.output # should print correct value
# config should reflect that output_sys_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_sys_logs"] is False
@pytest.mark.skip(reason="borked")
def test_dev_mode_config_pcap_logs_enable_disable():
"""Test that the pcap logs output can be enabled or disabled."""
# check defaults
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False # False by default
assert PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False # False by default
result = cli(["dev-mode", "config", "--output-pcap-logs"])
assert "output_pcap_logs=True" in result.output # should print correct value
# config should reflect that output_pcap_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"]
assert PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"]
result = cli(["dev-mode", "config", "--no-pcap-logs"])
assert "output_pcap_logs=False" in result.output # should print correct value
# config should reflect that output_pcap_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False
result = cli(["dev-mode", "config", "-pcap"])
assert "output_pcap_logs=True" in result.output # should print correct value
# config should reflect that output_pcap_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"]
assert PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"]
result = cli(["dev-mode", "config", "-npcap"])
assert "output_pcap_logs=False" in result.output # should print correct value
# config should reflect that output_pcap_logs is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_pcap_logs"] is False
@pytest.mark.skip(reason="borked")
def test_dev_mode_config_output_to_terminal_enable_disable():
"""Test that the output to terminal can be enabled or disabled."""
# check defaults
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False # False by default
assert PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False # False by default
result = cli(["dev-mode", "config", "--output-to-terminal"])
assert "output_to_terminal=True" in result.output # should print correct value
# config should reflect that output_to_terminal is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"]
assert PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"]
result = cli(["dev-mode", "config", "--no-terminal"])
assert "output_to_terminal=False" in result.output # should print correct value
# config should reflect that output_to_terminal is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False
result = cli(["dev-mode", "config", "-t"])
assert "output_to_terminal=True" in result.output # should print correct value
# config should reflect that output_to_terminal is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"]
assert PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"]
result = cli(["dev-mode", "config", "-nt"])
assert "output_to_terminal=False" in result.output # should print correct value
# config should reflect that output_to_terminal is True
assert primaite.PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False
assert PRIMAITE_CONFIG["developer_mode"]["output_to_terminal"] is False