mirror of
https://github.com/d9pouces/id_configurator.git
synced 2026-11-09 01:47:21 +01:00
feat: initial commit
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
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
|
||||
Reference in New Issue
Block a user