diff --git a/src/primaite/utils/cli/primaite_config_utils.py b/src/primaite/utils/cli/primaite_config_utils.py index 2a94ece8..966376d9 100644 --- a/src/primaite/utils/cli/primaite_config_utils.py +++ b/src/primaite/utils/cli/primaite_config_utils.py @@ -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) diff --git a/tests/conftest.py b/tests/conftest.py index c7b6ac04..37bc9581 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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 diff --git a/tests/e2e_integration_tests/environments/test_rllib_single_agent_environment.py b/tests/e2e_integration_tests/environments/test_rllib_single_agent_environment.py index 4c4b8d8d..d9057fef 100644 --- a/tests/e2e_integration_tests/environments/test_rllib_single_agent_environment.py +++ b/tests/e2e_integration_tests/environments/test_rllib_single_agent_environment.py @@ -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 diff --git a/tests/e2e_integration_tests/environments/test_sb3_environment.py b/tests/e2e_integration_tests/environments/test_sb3_environment.py index f6ff595f..f654234b 100644 --- a/tests/e2e_integration_tests/environments/test_sb3_environment.py +++ b/tests/e2e_integration_tests/environments/test_sb3_environment.py @@ -25,3 +25,4 @@ def test_sb3_compatibility(): model.save(save_path) assert (save_path).exists() + save_path.unlink() # clean up diff --git a/tests/integration_tests/cli/test_dev_cli.py b/tests/integration_tests/cli/test_dev_cli.py index acd086b9..8f1bdec6 100644 --- a/tests/integration_tests/cli/test_dev_cli.py +++ b/tests/integration_tests/cli/test_dev_cli.py @@ -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