Files
Artemis-Eapil/tests/unit/test_recording_process.py

43 lines
1.3 KiB
Python

"""Exercise Windows ownership without recording a user screen or running FFmpeg."""
import os
from pathlib import Path
import subprocess
import sys
import time
import psutil
import pytest
@pytest.mark.skipif(os.name != "nt", reason="Windows capture process ownership")
def test_worker_exit_terminates_owned_capture_child():
project = str(Path(__file__).resolve().parents[2])
script = f"""
import os, subprocess, sys
sys.path.insert(0, {project!r})
from artemis.plugins.recording_process import CaptureProcessJob
job = CaptureProcessJob()
child = subprocess.Popen([sys.executable, '-c', 'import time; time.sleep(120)'],
creationflags=0x08000000, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
job.assign(child.pid)
print(child.pid, flush=True)
os._exit(0)
"""
parent = subprocess.run(
[sys.executable, "-c", script],
capture_output=True,
text=True,
timeout=15,
creationflags=0x08000000,
check=True,
)
pid = int(parent.stdout.strip())
for _ in range(50):
if not psutil.pid_exists(pid):
return
time.sleep(0.1)
# Only the disposable child created above is eligible for cleanup.
psutil.Process(pid).kill()
pytest.fail("Owned capture child survived abrupt worker exit")