hermes-agent/tests/tools/test_mcp_stdio_watchdog.py
Bruce-anle 3d031bdb29 fix(mcp): use direct parent identity in stdio watchdog
Use the direct POSIX parent relationship instead of process creation time and pid_exists checks. Remove the dead create-time argument chain while preserving process-group cleanup and signal forwarding.\n\nRefs #62505
2026-07-18 04:15:13 -07:00

47 lines
1.2 KiB
Python

"""Contract tests for the direct POSIX stdio MCP child watchdog."""
import os
import sys
import pytest
from tools import mcp_stdio_watchdog, mcp_tool
def test_is_orphaned_is_false_while_direct_parent_is_unchanged():
original_ppid = 1234
assert mcp_stdio_watchdog._is_orphaned(
original_ppid,
getppid=lambda: original_ppid,
) is False
def test_is_orphaned_is_true_after_direct_parent_changes():
assert mcp_stdio_watchdog._is_orphaned(
1234,
getppid=lambda: 5678,
) is True
@pytest.mark.skipif(os.name != "posix", reason="watchdog wrapping is POSIX-only")
def test_wrap_command_uses_stable_parent_pid_and_preserves_command_tail():
parent_pid = os.getpid()
command = "/opt/hermes/bin/mcp-server"
command_args = ["--label", "value with spaces", "--", "literal-tail"]
wrapped_command, wrapped_args = mcp_tool._wrap_command_with_watchdog(
command,
command_args,
)
assert wrapped_command == sys.executable
assert wrapped_args == [
os.path.join(os.path.dirname(mcp_tool.__file__), "mcp_stdio_watchdog.py"),
"--ppid",
str(parent_pid),
"--",
command,
*command_args,
]
assert "--create-time" not in wrapped_args