From 0b4f4659215753a06065093d16741650b5822824 Mon Sep 17 00:00:00 2001 From: Joshua Valluru <326636767+joshua-berri@users.noreply.github.com> Date: Sat, 26 Sep 2026 11:50:38 -0700 Subject: [PATCH] test(mcp): verify forced cleanup of a stalled reference --- .../mcp/test_mcp_official_conformance.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/integration/mcp/test_mcp_official_conformance.py b/tests/integration/mcp/test_mcp_official_conformance.py index 7a69b3649e1..fa3f52c709d 100644 --- a/tests/integration/mcp/test_mcp_official_conformance.py +++ b/tests/integration/mcp/test_mcp_official_conformance.py @@ -74,3 +74,21 @@ def test_official_runner_rejects_unknown_scenario(tmp_path: Path) -> None: with pytest.raises(AssertionError): run_scenario(Path(os.environ["MCP_CONFORMANCE_ROOT"]), "http://127.0.0.1:1/mcp", "missing-scenario", output) assert "missing-scenario" in (output / "runner.log").read_text() + + +def test_stalled_reference_is_killed_and_cannot_report_clean_teardown(tmp_path: Path, unused_tcp_port: int) -> None: + import signal + from contextlib import ExitStack + + import psutil + + children: Final = frozenset(child.pid for child in psutil.Process().children()) + with ExitStack() as cleanup: + cleanup.enter_context(reference_server(Path(os.environ["MCP_CONFORMANCE_ROOT"]), tmp_path, unused_tcp_port)) + started: Final = tuple(child for child in psutil.Process().children() if child.pid not in children) + assert len(started) == 1, started + victim: Final = started[0] + victim.send_signal(signal.SIGSTOP) + with pytest.raises(AssertionError, match="forced cleanup"): + cleanup.close() + assert not psutil.pid_exists(victim.pid), "Stopped official reference survived forced cleanup"