fix(mcp): preserve loop during probes
This commit is contained in:
@@ -162,14 +162,14 @@ class TestProbeMcpServerTools:
|
||||
assert result["github"][0] == ("my_tool", "")
|
||||
|
||||
def test_cleanup_called_even_on_failure(self):
|
||||
"""_stop_mcp_loop is called even when probe fails."""
|
||||
"""Probe cleanup is attempted even when probe fails."""
|
||||
config = {"github": {"command": "npx", "connect_timeout": 5}}
|
||||
|
||||
with patch("tools.mcp_tool._MCP_AVAILABLE", True), \
|
||||
patch("tools.mcp_tool._load_mcp_config", return_value=config), \
|
||||
patch("tools.mcp_tool._ensure_mcp_loop"), \
|
||||
patch("tools.mcp_tool._run_on_mcp_loop", side_effect=RuntimeError("boom")), \
|
||||
patch("tools.mcp_tool._stop_mcp_loop") as mock_stop:
|
||||
patch("tools.mcp_tool._stop_mcp_loop_if_idle") as mock_stop:
|
||||
|
||||
from tools.mcp_tool import probe_mcp_server_tools
|
||||
result = probe_mcp_server_tools()
|
||||
|
||||
@@ -57,6 +57,32 @@ class TestMCPLoopExceptionHandler:
|
||||
finally:
|
||||
mcp_mod._stop_mcp_loop()
|
||||
|
||||
def test_probe_cleanup_does_not_stop_loop_with_registered_servers(self):
|
||||
"""Probe cleanup must not kill the shared loop used by live MCP tools."""
|
||||
import tools.mcp_tool as mcp_mod
|
||||
|
||||
with mcp_mod._lock:
|
||||
mcp_mod._servers.clear()
|
||||
mcp_mod._server_connecting.clear()
|
||||
try:
|
||||
mcp_mod._ensure_mcp_loop()
|
||||
with mcp_mod._lock:
|
||||
loop = mcp_mod._mcp_loop
|
||||
mcp_mod._servers["live"] = MagicMock(session=object())
|
||||
|
||||
assert mcp_mod._stop_mcp_loop_if_idle() is False
|
||||
|
||||
with mcp_mod._lock:
|
||||
assert mcp_mod._mcp_loop is loop
|
||||
assert mcp_mod._mcp_thread is not None
|
||||
assert loop is not None
|
||||
assert loop.is_running()
|
||||
finally:
|
||||
with mcp_mod._lock:
|
||||
mcp_mod._servers.clear()
|
||||
mcp_mod._server_connecting.clear()
|
||||
mcp_mod._stop_mcp_loop()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fix 2: stdio PID tracking
|
||||
|
||||
Reference in New Issue
Block a user