Files
company-haness/.claude/tests/test_runner_process_group.py

44 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""The suite timeout must reap descendants, not only the direct test process."""
import importlib.util
import os
import subprocess
import sys
import tempfile
import time
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
RUNNER = os.path.join(ROOT, ".claude", "tests", "run_all.py")
spec = importlib.util.spec_from_file_location("run_all_under_test", RUNNER)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
module.SUITE_TIMEOUT = 1
with tempfile.TemporaryDirectory(prefix="runner-pg-") as directory:
pid_path = os.path.join(directory, "child.pid")
code = (
"import subprocess,time,pathlib; "
f"p=subprocess.Popen(['{sys.executable}','-c','import time; time.sleep(30)']); "
f"pathlib.Path({pid_path!r}).write_text(str(p.pid)); "
"time.sleep(30)"
)
ok = module.run([sys.executable, "-c", code], "process-group-timeout-fixture")
if ok or not os.path.exists(pid_path):
print("FAIL timeout fixture did not run as expected")
raise SystemExit(1)
child_pid = int(open(pid_path, encoding="utf-8").read())
alive = True
for _ in range(20):
try:
os.kill(child_pid, 0)
except ProcessLookupError:
alive = False
break
time.sleep(0.05)
if alive:
subprocess.run(["kill", "-9", str(child_pid)], check=False)
print("FAIL descendant survived suite timeout")
raise SystemExit(1)
print("1 passed, 0 failed")