diff options
Diffstat (limited to 'tests/test_tools_metadata_common.py')
-rw-r--r-- | tests/test_tools_metadata_common.py | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/tests/test_tools_metadata_common.py b/tests/test_tools_metadata_common.py deleted file mode 100644 index 9811852..0000000 --- a/tests/test_tools_metadata_common.py +++ /dev/null @@ -1,282 +0,0 @@ -# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates. -# SPDX-License-Identifier: Apache-2.0 -"""Tests for commmon installation related functions.""" -from __future__ import annotations - -from pathlib import Path -from typing import Any -from unittest.mock import call -from unittest.mock import MagicMock -from unittest.mock import PropertyMock - -import pytest - -from mlia.tools.metadata.common import DefaultInstallationManager -from mlia.tools.metadata.common import DownloadAndInstall -from mlia.tools.metadata.common import Installation -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, - could_be_installed: bool = False, - supported_install_type: type | tuple | None = None, -) -> MagicMock: - """Get mock instance for the installation.""" - mock = MagicMock(spec=Installation) - - def supports(install_type: InstallationType) -> bool: - if supported_install_type is None: - return False - - return isinstance(install_type, supported_install_type) - - mock.supports.side_effect = supports - - props = { - "name": name, - "already_installed": already_installed, - "could_be_installed": could_be_installed, - } - for prop, value in props.items(): - setattr(type(mock), prop, PropertyMock(return_value=value)) - - return mock - - -def _already_installed_mock() -> MagicMock: - return get_installation_mock( - name="already_installed", - already_installed=True, - supported_install_type=(DownloadAndInstall, InstallFromPath), - ) - - -def _ready_for_installation_mock() -> MagicMock: - return get_installation_mock( - name="ready_for_installation", - already_installed=False, - could_be_installed=True, - ) - - -def _could_be_downloaded_and_installed_mock() -> MagicMock: - return get_installation_mock( - name="could_be_downloaded_and_installed", - already_installed=False, - could_be_installed=True, - supported_install_type=DownloadAndInstall, - ) - - -def _could_be_installed_from_mock() -> MagicMock: - return get_installation_mock( - name="could_be_installed_from", - already_installed=False, - could_be_installed=True, - supported_install_type=InstallFromPath, - ) - - -def get_installation_manager( - noninteractive: bool, - installations: list[Any], - monkeypatch: pytest.MonkeyPatch, - yes_response: bool = True, -) -> DefaultInstallationManager: - """Get installation manager instance.""" - if not noninteractive: - monkeypatch.setattr( - "mlia.tools.metadata.common.yes", MagicMock(return_value=yes_response) - ) - - return DefaultInstallationManager(installations, noninteractive=noninteractive) - - -def test_installation_manager_filtering() -> None: - """Test default installation manager.""" - already_installed = _already_installed_mock() - ready_for_installation = _ready_for_installation_mock() - could_be_downloaded_and_installed = _could_be_downloaded_and_installed_mock() - - manager = DefaultInstallationManager( - [ - already_installed, - ready_for_installation, - could_be_downloaded_and_installed, - ] - ) - assert manager.already_installed("already_installed") == [already_installed] - assert manager.ready_for_installation() == [ - ready_for_installation, - could_be_downloaded_and_installed, - ] - - -@pytest.mark.parametrize("noninteractive", [True, False]) -@pytest.mark.parametrize( - "install_mock, eula_agreement, backend_name, force, expected_call", - [ - [ - _could_be_downloaded_and_installed_mock(), - True, - "could_be_downloaded_and_installed", - False, - [call(DownloadAndInstall(eula_agreement=True))], - ], - [ - _could_be_downloaded_and_installed_mock(), - False, - "could_be_downloaded_and_installed", - True, - [call(DownloadAndInstall(eula_agreement=False))], - ], - [ - _already_installed_mock(), - False, - "already_installed", - True, - [call(DownloadAndInstall(eula_agreement=False))], - ], - [ - _could_be_downloaded_and_installed_mock(), - False, - "unknown", - True, - [], - ], - ], -) -def test_installation_manager_download_and_install( - install_mock: MagicMock, - noninteractive: bool, - eula_agreement: bool, - backend_name: str, - force: bool, - expected_call: Any, - monkeypatch: pytest.MonkeyPatch, -) -> None: - """Test installation process.""" - install_mock.reset_mock() - - manager = get_installation_manager(noninteractive, [install_mock], monkeypatch) - - manager.download_and_install( - backend_name, eula_agreement=eula_agreement, force=force - ) - - assert install_mock.install.mock_calls == expected_call - if force and install_mock.already_installed: - install_mock.uninstall.assert_called_once() - else: - install_mock.uninstall.assert_not_called() - - -@pytest.mark.parametrize("noninteractive", [True, False]) -@pytest.mark.parametrize( - "install_mock, backend_name, force, expected_call", - [ - [ - _could_be_installed_from_mock(), - "could_be_installed_from", - False, - [call(InstallFromPath(Path("some_path")))], - ], - [ - _could_be_installed_from_mock(), - "unknown", - False, - [], - ], - [ - _could_be_installed_from_mock(), - "unknown", - True, - [], - ], - [ - _already_installed_mock(), - "already_installed", - False, - [], - ], - [ - _already_installed_mock(), - "already_installed", - True, - [call(InstallFromPath(Path("some_path")))], - ], - ], -) -def test_installation_manager_install_from( - install_mock: MagicMock, - noninteractive: bool, - backend_name: str, - force: bool, - expected_call: Any, - monkeypatch: pytest.MonkeyPatch, -) -> None: - """Test installation process.""" - install_mock.reset_mock() - - manager = get_installation_manager(noninteractive, [install_mock], monkeypatch) - manager.install_from(Path("some_path"), backend_name, force=force) - - assert install_mock.install.mock_calls == expected_call - if force and install_mock.already_installed: - install_mock.uninstall.assert_called_once() - else: - install_mock.uninstall.assert_not_called() - - -@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 |