aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_cli_commands.py77
-rw-r--r--tests/test_cli_main.py51
-rw-r--r--tests/test_tools_metadata_common.py63
-rw-r--r--tests/test_tools_metadata_corstone.py17
4 files changed, 158 insertions, 50 deletions
diff --git a/tests/test_cli_commands.py b/tests/test_cli_commands.py
index fd9e29c..f6e0843 100644
--- a/tests/test_cli_commands.py
+++ b/tests/test_cli_commands.py
@@ -10,7 +10,9 @@ from unittest.mock import MagicMock
import pytest
-from mlia.cli.commands import backend
+from mlia.cli.commands import backend_install
+from mlia.cli.commands import backend_list
+from mlia.cli.commands import backend_uninstall
from mlia.cli.commands import operators
from mlia.cli.commands import optimization
from mlia.cli.commands import performance
@@ -19,7 +21,7 @@ from mlia.devices.ethosu.config import EthosUConfiguration
from mlia.devices.ethosu.performance import MemoryUsage
from mlia.devices.ethosu.performance import NPUCycles
from mlia.devices.ethosu.performance import PerformanceMetrics
-from mlia.tools.metadata.common import InstallationManager
+from mlia.tools.metadata.common import DefaultInstallationManager
def test_operators_expected_parameters(sample_context: ExecutionContext) -> None:
@@ -139,7 +141,7 @@ def mock_performance_estimation(monkeypatch: pytest.MonkeyPatch) -> None:
@pytest.fixture(name="installation_manager_mock")
def fixture_mock_installation_manager(monkeypatch: pytest.MonkeyPatch) -> MagicMock:
"""Mock installation manager."""
- install_manager_mock = MagicMock(spec=InstallationManager)
+ install_manager_mock = MagicMock(spec=DefaultInstallationManager)
monkeypatch.setattr(
"mlia.cli.commands.get_installation_manager",
MagicMock(return_value=install_manager_mock),
@@ -147,32 +149,47 @@ def fixture_mock_installation_manager(monkeypatch: pytest.MonkeyPatch) -> MagicM
return install_manager_mock
-def test_backend_command_action_status(installation_manager_mock: MagicMock) -> None:
- """Test backend command "status"."""
- backend(backend_action="status")
+def test_backend_command_action_list(installation_manager_mock: MagicMock) -> None:
+ """Test mlia-backend command list."""
+ backend_list()
installation_manager_mock.show_env_details.assert_called_once()
@pytest.mark.parametrize(
+ "backend_name",
+ [
+ "backend_name",
+ "BACKEND_NAME",
+ "BaCkend_NAme",
+ ],
+)
+def test_backend_command_action_uninstall(
+ installation_manager_mock: MagicMock,
+ backend_name: str,
+) -> None:
+ """Test mlia-backend command uninstall."""
+ backend_uninstall(backend_name)
+
+ installation_manager_mock.uninstall.assert_called_once()
+
+
+@pytest.mark.parametrize(
"i_agree_to_the_contained_eula, backend_name, expected_calls",
[
- [False, None, [call(None, True)]],
- [True, None, [call(None, False)]],
[False, "backend_name", [call("backend_name", True)]],
[True, "backend_name", [call("backend_name", False)]],
+ [True, "BACKEND_NAME", [call("BACKEND_NAME", False)]],
],
)
-def test_backend_command_action_add_downoad(
+def test_backend_command_action_add_download(
installation_manager_mock: MagicMock,
i_agree_to_the_contained_eula: bool,
- backend_name: str | None,
+ backend_name: str,
expected_calls: Any,
) -> None:
- """Test backend command "install" with download option."""
- backend(
- backend_action="install",
- download=True,
+ """Test mlia-backend command "install" with download option."""
+ backend_install(
name=backend_name,
i_agree_to_the_contained_eula=i_agree_to_the_contained_eula,
)
@@ -180,26 +197,20 @@ def test_backend_command_action_add_downoad(
assert installation_manager_mock.download_and_install.mock_calls == expected_calls
-@pytest.mark.parametrize("backend_name", [None, "backend_name"])
+@pytest.mark.parametrize(
+ "backend_name, force",
+ [
+ ["backend_name", False],
+ ["backend_name", True],
+ ["BACKEND_NAME", True],
+ ],
+)
def test_backend_command_action_install_from_path(
installation_manager_mock: MagicMock,
tmp_path: Path,
- backend_name: str | None,
-) -> None:
- """Test backend command "install" with backend path."""
- backend(backend_action="install", path=tmp_path, name=backend_name)
-
- installation_manager_mock.install_from(tmp_path, backend_name)
-
-
-def test_backend_command_action_install_only_one_action(
- installation_manager_mock: MagicMock, # pylint: disable=unused-argument
- tmp_path: Path,
+ backend_name: str,
+ force: bool,
) -> None:
- """Test that only one of action type allowed."""
- with pytest.raises(
- Exception,
- match="Please select only one action: download or "
- "provide path to the backend installation",
- ):
- backend(backend_action="install", download=True, path=tmp_path)
+ """Test mlia-backend command "install" with backend path."""
+ backend_install(path=tmp_path, name=backend_name, force=force)
+ installation_manager_mock.install_from.assert_called_once()
diff --git a/tests/test_cli_main.py b/tests/test_cli_main.py
index 4b16ac5..d0f7152 100644
--- a/tests/test_cli_main.py
+++ b/tests/test_cli_main.py
@@ -15,6 +15,7 @@ from unittest.mock import MagicMock
import pytest
import mlia
+from mlia.cli.main import backend_main
from mlia.cli.main import CommandInfo
from mlia.cli.main import main
from mlia.core.context import ExecutionContext
@@ -122,6 +123,17 @@ def test_default_command(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> Non
non_default_command.assert_called_once_with(param="test")
+def wrap_mock_command(mock: MagicMock, command: Callable) -> Callable:
+ """Wrap the command with the mock."""
+
+ @wraps(command)
+ def mock_command(*args: Any, **kwargs: Any) -> Any:
+ """Mock the command."""
+ mock(*args, **kwargs)
+
+ return mock_command
+
+
@pytest.mark.parametrize(
"params, expected_call",
[
@@ -273,16 +285,6 @@ def test_commands_execution(
"""Test calling commands from the main function."""
mock = MagicMock()
- def wrap_mock_command(command: Callable) -> Callable:
- """Wrap the command with the mock."""
-
- @wraps(command)
- def mock_command(*args: Any, **kwargs: Any) -> Any:
- """Mock the command."""
- mock(*args, **kwargs)
-
- return mock_command
-
monkeypatch.setattr(
"mlia.cli.options.get_default_backends", MagicMock(return_value=["Vela"])
)
@@ -295,7 +297,7 @@ def test_commands_execution(
for command in ["all_tests", "operators", "performance", "optimization"]:
monkeypatch.setattr(
f"mlia.cli.main.{command}",
- wrap_mock_command(getattr(mlia.cli.main, command)),
+ wrap_mock_command(mock, getattr(mlia.cli.main, command)),
)
main(params)
@@ -304,6 +306,33 @@ def test_commands_execution(
@pytest.mark.parametrize(
+ "params, expected_call",
+ [
+ [
+ ["list"],
+ call(),
+ ],
+ ],
+)
+def test_commands_execution_backend_main(
+ monkeypatch: pytest.MonkeyPatch,
+ params: list[str],
+ expected_call: Any,
+) -> None:
+ """Test calling commands from the backend_main function."""
+ mock = MagicMock()
+
+ monkeypatch.setattr(
+ "mlia.cli.main.backend_list",
+ wrap_mock_command(mock, getattr(mlia.cli.main, "backend_list")),
+ )
+
+ backend_main(params)
+
+ mock.assert_called_once_with(*expected_call.args, **expected_call.kwargs)
+
+
+@pytest.mark.parametrize(
"verbose, exc_mock, expected_output",
[
[
diff --git a/tests/test_tools_metadata_common.py b/tests/test_tools_metadata_common.py
index 69bc3e5..fefb024 100644
--- a/tests/test_tools_metadata_common.py
+++ b/tests/test_tools_metadata_common.py
@@ -18,6 +18,30 @@ from mlia.tools.metadata.common import InstallationType
from mlia.tools.metadata.common import InstallFromPath
+def get_default_installation_manager_mock(
+ name: str,
+ already_installed: bool = False,
+) -> MagicMock:
+ """Get mock instance for DefaultInstallationManager."""
+ mock = MagicMock(spec=DefaultInstallationManager)
+
+ props = {
+ "name": name,
+ "already_installed": already_installed,
+ }
+ for prop, value in props.items():
+ setattr(type(mock), prop, PropertyMock(return_value=value))
+
+ return mock
+
+
+def _ready_for_uninstall_mock() -> MagicMock:
+ return get_default_installation_manager_mock(
+ name="already_installed",
+ already_installed=True,
+ )
+
+
def get_installation_mock(
name: str,
already_installed: bool = False,
@@ -107,14 +131,14 @@ def test_installation_manager_filtering() -> None:
could_be_downloaded_and_installed,
]
)
- assert manager.already_installed() == [already_installed]
+ assert manager.already_installed("already_installed") == [already_installed]
assert manager.ready_for_installation() == [
ready_for_installation,
could_be_downloaded_and_installed,
]
- assert manager.could_be_downloaded_and_installed() == [
- could_be_downloaded_and_installed
- ]
+ assert manager.could_be_downloaded_and_installed(
+ "could_be_downloaded_and_installed"
+ ) == [could_be_downloaded_and_installed]
assert manager.could_be_downloaded_and_installed("some_installation") == []
@@ -146,7 +170,7 @@ def test_installation_manager_download_and_install(
install_mock: MagicMock,
noninteractive: bool,
eula_agreement: bool,
- backend_name: str | None,
+ backend_name: str,
expected_call: Any,
monkeypatch: pytest.MonkeyPatch,
) -> None:
@@ -183,7 +207,7 @@ def test_installation_manager_download_and_install(
def test_installation_manager_install_from(
install_mock: MagicMock,
noninteractive: bool,
- backend_name: str | None,
+ backend_name: str,
expected_call: Any,
monkeypatch: pytest.MonkeyPatch,
) -> None:
@@ -194,3 +218,30 @@ def test_installation_manager_install_from(
manager.install_from(Path("some_path"), backend_name)
assert install_mock.install.mock_calls == expected_call
+
+
+@pytest.mark.parametrize("noninteractive", [True, False])
+@pytest.mark.parametrize(
+ "install_mock, backend_name, expected_call",
+ [
+ [
+ _ready_for_uninstall_mock(),
+ "already_installed",
+ [call()],
+ ],
+ ],
+)
+def test_installation_manager_uninstall(
+ install_mock: MagicMock,
+ noninteractive: bool,
+ backend_name: str,
+ expected_call: Any,
+ monkeypatch: pytest.MonkeyPatch,
+) -> None:
+ """Test uninstallation."""
+ install_mock.reset_mock()
+
+ manager = get_installation_manager(noninteractive, [install_mock], monkeypatch)
+ manager.uninstall(backend_name)
+
+ assert install_mock.uninstall.mock_calls == expected_call
diff --git a/tests/test_tools_metadata_corstone.py b/tests/test_tools_metadata_corstone.py
index 02c04d4..a7d81f2 100644
--- a/tests/test_tools_metadata_corstone.py
+++ b/tests/test_tools_metadata_corstone.py
@@ -469,3 +469,20 @@ def test_corstone_vht_install(
corstone_installation.install(InstallFromPath(Path("/opt/VHT")))
create_destination_and_install_mock.assert_called_once()
+
+
+def test_corstone_uninstall(
+ monkeypatch: pytest.MonkeyPatch,
+) -> None:
+ """Test the uninstall function in Corstone."""
+ remove_system_mock = MagicMock()
+
+ monkeypatch.setattr(
+ "mlia.tools.metadata.corstone.remove_system",
+ remove_system_mock,
+ )
+
+ installation = get_corstone_300_installation()
+
+ installation.uninstall()
+ remove_system_mock.assert_called_once_with("corstone_300")