Files
id_configurator/tests/test_apk.py
T
2026-09-09 22:20:16 +02:00

105 lines
3.3 KiB
Python

import hashlib
from id_configurator.config import Configuration
from id_configurator.context import Context
from id_configurator.modules.apk import ApkModule
KEY_BYTES = b"fake-apk-key-bytes"
KEY_FILENAME = f"{hashlib.sha256(KEY_BYTES).hexdigest()[:16]}.rsa.pub"
CONFIG_DATA = {
"uuid": "12345678-1234-5678-1234-567812345678",
"organisation": "InterDiode",
"configurations": {
"apk": {
"repositories": [
{
"name": "main",
"url": "https://example.invalid/v3.19/main",
"key": KEY_BYTES,
},
{"name": "community", "url": "https://example.invalid/v3.19/community"},
]
}
},
}
def make_config() -> Configuration:
return Configuration.model_validate(CONFIG_DATA)
def test_is_relevant_false_without_src(tmp_path) -> None:
context = Context(config=make_config(), dst=tmp_path / "dst", src=None)
assert ApkModule().is_relevant(context) is False
def test_is_relevant_false_without_apk_dir(tmp_path) -> None:
src = tmp_path / "src"
src.mkdir()
context = Context(config=make_config(), dst=tmp_path / "dst", src=src)
assert ApkModule().is_relevant(context) is False
def test_is_relevant_true_with_apk_dir(tmp_path) -> None:
src = tmp_path / "src"
(src / "etc/apk").mkdir(parents=True)
context = Context(config=make_config(), dst=tmp_path / "dst", src=src)
assert ApkModule().is_relevant(context) is True
def test_apply_disables_existing_and_adds_configured_repositories(tmp_path) -> None:
src = tmp_path / "src"
apk_dir = src / "etc/apk"
apk_dir.mkdir(parents=True)
(apk_dir / "repositories").write_text(
"# comment\nhttps://old-mirror.invalid/v3.18/main\nhttps://old-mirror.invalid/v3.18/community\n",
encoding="utf-8",
)
dst = tmp_path / "dst"
context = Context(config=make_config(), dst=dst, src=src)
ApkModule().apply(context)
content = (dst / "etc/apk/repositories").read_text(encoding="utf-8")
assert content == (
"# comment\n"
"# https://old-mirror.invalid/v3.18/main\n"
"# https://old-mirror.invalid/v3.18/community\n"
"https://example.invalid/v3.19/main\n"
"https://example.invalid/v3.19/community\n"
)
key_content = (dst / "etc/apk/keys" / KEY_FILENAME).read_bytes()
assert key_content == KEY_BYTES
def test_apply_without_existing_repositories_file(tmp_path) -> None:
src = tmp_path / "src"
(src / "etc/apk").mkdir(parents=True)
dst = tmp_path / "dst"
context = Context(config=make_config(), dst=dst, src=src)
ApkModule().apply(context)
content = (dst / "etc/apk/repositories").read_text(encoding="utf-8")
assert (
content
== "https://example.invalid/v3.19/main\nhttps://example.invalid/v3.19/community\n"
)
def test_apply_writes_nothing_when_no_repositories_at_all(tmp_path) -> None:
empty_config = Configuration.model_validate(
{"uuid": "12345678-1234-5678-1234-567812345678", "organisation": "InterDiode"}
)
src = tmp_path / "src"
(src / "etc/apk").mkdir(parents=True)
dst = tmp_path / "dst"
context = Context(config=empty_config, dst=dst, src=src)
ApkModule().apply(context)
assert not (dst / "etc/apk/repositories").exists()