70 lines
2 KiB
Python
70 lines
2 KiB
Python
from __future__ import annotations
|
|
|
|
from enroll.package_hints import (
|
|
add_pkgs_from_etc_topdirs,
|
|
hint_names,
|
|
maybe_add_specific_paths,
|
|
package_section_from_installations,
|
|
role_id,
|
|
role_name_from_pkg,
|
|
role_name_from_unit,
|
|
safe_name,
|
|
)
|
|
|
|
|
|
class _Backend:
|
|
def __init__(self, *, fail: bool = False):
|
|
self.fail = fail
|
|
|
|
def specific_paths_for_hints(self, hints):
|
|
if self.fail:
|
|
raise RuntimeError("backend unavailable")
|
|
return [f"/backend/{h}" for h in sorted(hints)]
|
|
|
|
|
|
def test_role_name_helpers_sanitise_reserved_and_odd_names():
|
|
assert safe_name("pkg.name+with-dash") == "pkg_name_with_dash"
|
|
assert role_id("123 Camel-Case!!") == "r_123_camel_case"
|
|
assert role_name_from_unit("class.service") == "class"
|
|
assert role_name_from_pkg("flatpak") == "package_flatpak"
|
|
|
|
|
|
def test_package_section_from_installations_filters_empty_and_unspecified():
|
|
assert package_section_from_installations([]) is None
|
|
assert (
|
|
package_section_from_installations([{"section": "none"}, {"group": ""}]) is None
|
|
)
|
|
assert (
|
|
package_section_from_installations([{"section": "z-utils"}, {"group": "admin"}])
|
|
== "admin"
|
|
)
|
|
|
|
|
|
def test_hint_names_expands_templates_packages_and_dot_prefixes():
|
|
assert hint_names("postgresql@14-main.service", {"postgresql.14"}) == {
|
|
"postgresql@14-main",
|
|
"postgresql",
|
|
"postgresql.14",
|
|
}
|
|
|
|
|
|
def test_add_pkgs_from_etc_topdirs_skips_shared_dirs():
|
|
pkgs: set[str] = set()
|
|
add_pkgs_from_etc_topdirs(
|
|
{"ssh", "nginx"},
|
|
{"ssh": {"openssh-server"}, "nginx": {"nginx"}, "nginx.d": {"nginx-extra"}},
|
|
pkgs,
|
|
)
|
|
assert pkgs == {"nginx", "nginx-extra"}
|
|
|
|
|
|
def test_maybe_add_specific_paths_uses_backend_and_fallback():
|
|
assert maybe_add_specific_paths({"a", "b"}, _Backend()) == [
|
|
"/backend/a",
|
|
"/backend/b",
|
|
]
|
|
assert maybe_add_specific_paths({"svc"}, _Backend(fail=True)) == [
|
|
"/etc/default/svc",
|
|
"/etc/init.d/svc",
|
|
"/etc/sysctl.d/svc.conf",
|
|
]
|