from pathlib import Path import pytest from pytest_mock import MockerFixture from dangerzone import errors from dangerzone.container_utils import Runtime from dangerzone.settings import Settings def test_get_runtime_name_from_settings(mocker: MockerFixture, tmp_path: Path) -> None: mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path) mocker.patch("dangerzone.container_utils.Path.exists", return_value=True) settings = Settings() settings.set("container_runtime", "/opt/somewhere/docker", autosave=True) assert Runtime().name == "docker" def test_get_runtime_name_linux(mocker: MockerFixture, tmp_path: Path) -> None: mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path) mocker.patch("platform.system", return_value="Linux") mocker.patch( "dangerzone.container_utils.shutil.which", return_value="/usr/bin/podman" ) mocker.patch("dangerzone.container_utils.os.path.exists", return_value=True) runtime = Runtime() assert runtime.name == "podman" assert runtime.path == Path("/usr/bin/podman") def test_get_runtime_name_non_linux(mocker: MockerFixture, tmp_path: Path) -> None: mocker.patch("platform.system", return_value="Windows") mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path) mocker.patch( "dangerzone.container_utils.shutil.which", return_value="/usr/bin/docker" ) mocker.patch("dangerzone.container_utils.os.path.exists", return_value=True) runtime = Runtime() assert runtime.name == "docker" assert runtime.path == Path("/usr/bin/docker") mocker.patch("platform.system", return_value="Something else") runtime = Runtime() assert runtime.name == "docker" assert runtime.path == Path("/usr/bin/docker") assert Runtime().name == "docker" def test_get_unsupported_runtime_name(mocker: MockerFixture, tmp_path: Path) -> None: mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path) settings = Settings() settings.set( "container_runtime", "/opt/somewhere/new-kid-on-the-block", autosave=True ) with pytest.raises(errors.UnsupportedContainerRuntime): assert Runtime().name == "new-kid-on-the-block"