Layout consistency: everything ckn-bw deploys to the host now lives under deploy/. ckn-bw's install_left4me_scripts copy-action goes away in lockstep with this commit and is replaced by target-side symlinks. Also updates all path references in docs, tests (conftest.py parents[] depth, test_overlay_helper.py HELPER_SOURCE), and deploy/README.md. Part of 2026-05-15-deployment-responsibility-design.md migration step 4.
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
import subprocess
|
|
|
|
from conftest import LIBEXEC, env_with_fake_commands, fake_command
|
|
|
|
|
|
SYSTEMCTL_HELPER = LIBEXEC / "left4me-systemctl"
|
|
|
|
|
|
def test_systemctl_helper_passes_shell_syntax_check_and_rejects_bad_args(tmp_path):
|
|
subprocess.run(["sh", "-n", str(SYSTEMCTL_HELPER)], check=True)
|
|
marker = fake_command(tmp_path, "systemctl")
|
|
|
|
for args in [
|
|
["bad/action", "alpha"],
|
|
# `start` and `stop` are no longer accepted verbs — the lifecycle now
|
|
# uses `enable`/`disable` for reboot survival via WantedBy= symlinks.
|
|
["start", "alpha"],
|
|
["stop", "alpha"],
|
|
["enable", ""],
|
|
["enable", ".hidden"],
|
|
["enable", "bad..name"],
|
|
["enable", "bad/name"],
|
|
["enable", "bad\\name"],
|
|
["enable", "bad name"],
|
|
]:
|
|
result = subprocess.run(
|
|
["sh", str(SYSTEMCTL_HELPER), *args],
|
|
env=env_with_fake_commands(tmp_path),
|
|
check=False,
|
|
)
|
|
assert result.returncode != 0
|
|
assert not marker.exists()
|
|
|
|
script = SYSTEMCTL_HELPER.read_text()
|
|
assert 'unit="left4me-server@${name}.service"' in script
|
|
assert 'enable) exec "$systemctl" enable --now "$unit"' in script
|
|
assert 'disable) exec "$systemctl" disable --now "$unit"' in script
|
|
assert "--property=ActiveState" in script
|
|
assert "--property=SubState" in script
|