From 7dddebde73d74d02c662b14d12d1dbf9016db885 Mon Sep 17 00:00:00 2001 From: Rightup Date: Tue, 8 Sep 2026 23:36:15 +0100 Subject: [PATCH] test: add case for legacy restart interrupted being likely successful --- repeater/service_utils.py | 9 ++++++--- tests/test_restart_job_submission.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/repeater/service_utils.py b/repeater/service_utils.py index c01697d..9f8442c 100644 --- a/repeater/service_utils.py +++ b/repeater/service_utils.py @@ -294,14 +294,17 @@ def restart_service() -> Tuple[bool, str]: logger.info("Service restart via legacy fallback succeeded (%s)", reason) return True, "Service restart initiated (legacy fallback)" if legacy.returncode < 0: + # When running inside the service cgroup, a direct restart can + # terminate this process before subprocess.run returns. Treat + # termination by signal as likely success. logger.warning( - "Legacy restart interrupted (%s) after %s", + "Legacy restart interrupted by signal (%s) after %s; treating as likely success", legacy.returncode, reason, ) return ( - False, - "Restart unconfirmed: legacy fallback interrupted; check service status", + True, + "Service restart likely initiated (legacy fallback interrupted by signal)", ) legacy_err = legacy.stderr.strip() or f"exit status {legacy.returncode}" return False, f"legacy fallback failed: {legacy_err}" diff --git a/tests/test_restart_job_submission.py b/tests/test_restart_job_submission.py index ba43b21..31e9257 100644 --- a/tests/test_restart_job_submission.py +++ b/tests/test_restart_job_submission.py @@ -84,6 +84,24 @@ def test_non_root_denied_schedule_retries_legacy_and_succeeds(monkeypatch): assert run.call_count == 2 +def test_non_root_denied_schedule_legacy_interrupted_is_likely_success(monkeypatch): + monkeypatch.setattr(su.os, "geteuid", lambda: 1000) + monkeypatch.setattr(su.os.path, "exists", lambda p: p == su._SUDO_SYSTEMCTL_BIN) + run = Mock( + side_effect=[ + subprocess.CompletedProcess([], 1, "", "sudo: a password is required"), + subprocess.CompletedProcess([], -15, "", ""), + ] + ) + monkeypatch.setattr(su.subprocess, "run", run) + + ok, message = su.restart_service() + + assert ok is True + assert "likely initiated" in message + assert run.call_count == 2 + + def test_installer_authorizes_only_fixed_restart_timer_command(): script = (Path(__file__).resolve().parents[1] / "manage.sh").read_text() rules = [line for line in script.splitlines() if "NOPASSWD:" in line]