From 9abfe775cc7788e32cb446a0eb9cd0c4d214999c Mon Sep 17 00:00:00 2001 From: Jerome Date: Thu, 13 Feb 2025 15:22:23 +1300 Subject: [PATCH] Added failing test --- tests/server/fastmcp/test_concurrency.py | 49 ++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/server/fastmcp/test_concurrency.py diff --git a/tests/server/fastmcp/test_concurrency.py b/tests/server/fastmcp/test_concurrency.py new file mode 100644 index 0000000..a56c0d3 --- /dev/null +++ b/tests/server/fastmcp/test_concurrency.py @@ -0,0 +1,49 @@ +import anyio +from pydantic import AnyUrl + +from mcp.server.fastmcp import FastMCP +from mcp.shared.memory import ( + create_connected_server_and_client_session as create_session, +) + +_sleep_time_seconds = 0.01 +_resource_name = "slow://slow_resource" + + +async def test_messages_are_executed_concurrently(): + server = FastMCP("test") + + @server.tool("sleep") + async def sleep_tool(): + await anyio.sleep(_sleep_time_seconds) + return "done" + + @server.resource(_resource_name) + async def slow_resource(): + await anyio.sleep(_sleep_time_seconds) + return "slow" + + async with create_session(server._mcp_server) as client_session: + start_time = anyio.current_time() + async with anyio.create_task_group() as tg: + for _ in range(10): + tg.start_soon(client_session.call_tool, "sleep") + tg.start_soon(client_session.read_resource, AnyUrl(_resource_name)) + + end_time = anyio.current_time() + + duration = end_time - start_time + assert duration < 3 * _sleep_time_seconds + print(duration) + + +def main(): + anyio.run(test_messages_are_executed_concurrently) + + +if __name__ == "__main__": + import logging + + logging.basicConfig(level=logging.DEBUG) + + main()