import base64 from id_configurator.config import Configuration from id_configurator.context import Context from id_configurator.modules.apt import AptModule SOURCE_CONTENT = { "uuid": "12345678-1234-5678-1234-567812345678", "organisation": "InterDiode", "configurations": { "apt": { "sources": [ { "name": "interdiode", "uris": ["http://example.invalid/debian"], "suites": ["stable"], "signed-by": "/etc/apt/keyrings/interdiode.asc", } ], "keys": [ { "name": "interdiode", "content": base64.b64encode(b"fake-key-bytes").decode("ascii"), } ], } }, } def make_config() -> Configuration: return Configuration.model_validate(SOURCE_CONTENT) def test_is_relevant_false_without_src(tmp_path) -> None: context = Context(config=make_config(), dst=tmp_path / "dst", src=None) assert AptModule().is_relevant(context) is False # nosec B101 def test_is_relevant_false_without_apt_dir(tmp_path) -> None: src = tmp_path / "src" src.mkdir() context = Context(config=make_config(), dst=tmp_path / "dst", src=src) assert AptModule().is_relevant(context) is False # nosec B101 def test_is_relevant_true_with_apt_dir(tmp_path) -> None: src = tmp_path / "src" (src / "etc/apt").mkdir(parents=True) context = Context(config=make_config(), dst=tmp_path / "dst", src=src) assert AptModule().is_relevant(context) is True # nosec B101 def test_apply_disables_existing_sources_and_adds_configured_ones(tmp_path) -> None: src = tmp_path / "src" apt_dir = src / "etc/apt" sources_list_d = apt_dir / "sources.list.d" sources_list_d.mkdir(parents=True) (apt_dir / "sources.list").write_text( "# already disabled\ndeb http://example.invalid/legacy stable main\n\n", encoding="utf-8", ) (sources_list_d / "extra.list").write_text( "deb http://example.invalid/extra stable main\n", encoding="utf-8" ) (sources_list_d / "docker.sources").write_text( "Types: deb\nURIs: http://example.invalid/docker\nSuites: stable\nEnabled: yes\n" "\n" "Types: deb\nURIs: http://example.invalid/docker2\nSuites: stable\n" "\n\n", encoding="utf-8", ) (sources_list_d / "ignored.txt").write_text("not a source file\n", encoding="utf-8") dst = tmp_path / "dst" context = Context(config=make_config(), dst=dst, src=src) AptModule().apply(context) disabled_top_level = (dst / "etc/apt/sources.list").read_text(encoding="utf-8") assert ( disabled_top_level == "# already disabled\n# deb http://example.invalid/legacy stable main\n\n" ) # nosec B101 disabled_list = (dst / "etc/apt/sources.list.d/extra.list").read_text( encoding="utf-8" ) # nosec B101 assert disabled_list == "# deb http://example.invalid/extra stable main\n" # nosec B101 disabled_sources = (dst / "etc/apt/sources.list.d/docker.sources").read_text( encoding="utf-8" ) # nosec B101 assert disabled_sources == ( # nosec B101 "Types: deb\nURIs: http://example.invalid/docker\nSuites: stable\nEnabled: no" "\n\n" "Types: deb\nURIs: http://example.invalid/docker2\nSuites: stable\nEnabled: no\n" ) assert not (dst / "etc/apt/sources.list.d/ignored.txt").exists() # nosec B101 keyring = (dst / "etc/apt/keyrings/interdiode.asc").read_bytes() assert keyring == b"fake-key-bytes" # nosec B101 configured_source = (dst / "etc/apt/sources.list.d/interdiode.sources").read_text( encoding="utf-8" ) assert configured_source == ( # nosec B101 "Types: deb\nURIs: http://example.invalid/debian\nSuites: stable\n" "Signed-By: /etc/apt/keyrings/interdiode.asc\nEnabled: yes\n" ) def test_apply_without_existing_top_level_sources_list(tmp_path) -> None: src = tmp_path / "src" (src / "etc/apt").mkdir(parents=True) dst = tmp_path / "dst" context = Context(config=make_config(), dst=dst, src=src) AptModule().apply(context) assert not (dst / "etc/apt/sources.list").exists() # nosec B101 assert (dst / "etc/apt/sources.list.d/interdiode.sources").exists() # nosec B101