Add game data capture vertical slice
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from game_data_capture.ingest.clipboard import ClipboardIntake, WatchConfig
|
||||
|
||||
|
||||
def test_shutdown_reaps_real_child_process_group(
|
||||
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
child: subprocess.Popen[bytes] | None = None
|
||||
real_popen = subprocess.Popen
|
||||
|
||||
def fake_popen(args: list[str], **kwargs: object) -> subprocess.Popen[bytes]:
|
||||
nonlocal child
|
||||
assert args[0] == "wl-paste" and kwargs["shell"] is False
|
||||
child = real_popen(
|
||||
[sys.executable, "-c", "import time; time.sleep(30)"],
|
||||
stdin=subprocess.DEVNULL,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
)
|
||||
return child
|
||||
|
||||
monkeypatch.setattr(subprocess, "Popen", fake_popen)
|
||||
intake = ClipboardIntake(
|
||||
WatchConfig((tmp_path / "spool").resolve(), 100, 1, "v1", 1, 0.01, 0.2)
|
||||
)
|
||||
intake.arm()
|
||||
assert child is not None and child.poll() is None
|
||||
intake.shutdown()
|
||||
for _ in range(20):
|
||||
if child.poll() is not None:
|
||||
break
|
||||
time.sleep(0.01)
|
||||
assert child.poll() is not None
|
||||
Reference in New Issue
Block a user