mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-10-30 19:51:59 +01:00
test: add case for legacy restart interrupted being likely successful
This commit is contained in:
1 parent
fb92b0c4eb
commit
7dddebde73
2 files changed
+24
-3
No files matched your search
@@ -294,14 +294,17 @@ def restart_service() -> Tuple[bool, str]:
|
|||||||
logger.info("Service restart via legacy fallback succeeded (%s)", reason)
|
logger.info("Service restart via legacy fallback succeeded (%s)", reason)
|
||||||
return True, "Service restart initiated (legacy fallback)"
|
return True, "Service restart initiated (legacy fallback)"
|
||||||
if legacy.returncode < 0:
|
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(
|
logger.warning(
|
||||||
"Legacy restart interrupted (%s) after %s",
|
"Legacy restart interrupted by signal (%s) after %s; treating as likely success",
|
||||||
legacy.returncode,
|
legacy.returncode,
|
||||||
reason,
|
reason,
|
||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
False,
|
True,
|
||||||
"Restart unconfirmed: legacy fallback interrupted; check service status",
|
"Service restart likely initiated (legacy fallback interrupted by signal)",
|
||||||
)
|
)
|
||||||
legacy_err = legacy.stderr.strip() or f"exit status {legacy.returncode}"
|
legacy_err = legacy.stderr.strip() or f"exit status {legacy.returncode}"
|
||||||
return False, f"legacy fallback failed: {legacy_err}"
|
return False, f"legacy fallback failed: {legacy_err}"
|
||||||
|
|||||||
@@ -84,6 +84,24 @@ def test_non_root_denied_schedule_retries_legacy_and_succeeds(monkeypatch):
|
|||||||
assert run.call_count == 2
|
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():
|
def test_installer_authorizes_only_fixed_restart_timer_command():
|
||||||
script = (Path(__file__).resolve().parents[1] / "manage.sh").read_text()
|
script = (Path(__file__).resolve().parents[1] / "manage.sh").read_text()
|
||||||
rules = [line for line in script.splitlines() if "NOPASSWD:" in line]
|
rules = [line for line in script.splitlines() if "NOPASSWD:" in line]
|
||||||
|
|||||||
Reference in new issue
Block a user