diff --git a/tests/issues/test_88_random_error.py b/tests/issues/test_88_random_error.py index d595ed022..c3570a39c 100644 --- a/tests/issues/test_88_random_error.py +++ b/tests/issues/test_88_random_error.py @@ -28,8 +28,7 @@ async def test_notification_validation_error(tmp_path: Path): server = Server(name="test") request_count = 0 - slow_request_started = anyio.Event() - slow_request_complete = anyio.Event() + slow_request_lock = anyio.Event() @server.list_tools() async def list_tools() -> list[types.Tool]: @@ -52,16 +51,9 @@ async def slow_tool(name: str, arg) -> Sequence[ContentBlock]: request_count += 1 if name == "slow": - # Signal that slow request has started - slow_request_started.set() - # Long enough to ensure timeout - await anyio.sleep(0.2) - # Signal completion - slow_request_complete.set() + await slow_request_lock.wait() # it should timeout here return [TextContent(type="text", text=f"slow {request_count}")] elif name == "fast": - # Fast enough to complete before timeout - await anyio.sleep(0.01) return [TextContent(type="text", text=f"fast {request_count}")] return [TextContent(type="text", text=f"unknown {request_count}")] @@ -90,16 +82,15 @@ async def client(read_stream, write_stream, scope): # First call should work (fast operation) result = await session.call_tool("fast") assert result.content == [TextContent(type="text", text="fast 1")] - assert not slow_request_complete.is_set() + assert not slow_request_lock.is_set() # Second call should timeout (slow operation) with pytest.raises(McpError) as exc_info: await session.call_tool("slow") assert "Timed out while waiting" in str(exc_info.value) - # Wait for slow request to complete in the background - with anyio.fail_after(1): # Timeout after 1 second - await slow_request_complete.wait() + # release the slow request not to have hanging process + slow_request_lock.set() # Third call should work (fast operation), # proving server is still responsive