1919import subprocess
2020import sys
2121import time
22- from collections .abc import AsyncGenerator
23- from contextlib import asynccontextmanager
2422
2523import httpx
2624import pytest
27- import uvicorn
28- from starlette .applications import Starlette
29- from starlette .routing import Mount
30- from starlette .types import Receive , Scope , Send
31-
32- from mcp .server import Server
33- from mcp .server .streamable_http_manager import StreamableHTTPSessionManager
34- from mcp .types import Tool
3525
3626SERVER_NAME = "test_race_condition_server"
3727
@@ -85,16 +75,40 @@ def server_url(server_port: int) -> str:
8575 return f"http://127.0.0.1:{ server_port } "
8676
8777
78+ def start_server_process (port : int ) -> subprocess .Popen [str ]:
79+ """Start server in a separate process."""
80+ # Create a temporary script to run the server
81+ import os
82+
83+ server_code = f"""
84+ import sys
85+ import os
86+ sys.path.insert(0, { repr (os .getcwd ())} )
87+
88+ import socket
89+ import time
90+ from collections.abc import AsyncGenerator
91+ from contextlib import asynccontextmanager
92+
93+ import uvicorn
94+ from starlette.applications import Starlette
95+ from starlette.routing import Mount
96+ from starlette.types import Receive, Scope, Send
97+
98+ from mcp.server import Server
99+ from mcp.server.streamable_http_manager import StreamableHTTPSessionManager
100+ from mcp.types import Tool
101+
102+ SERVER_NAME = "test_race_condition_server"
103+
88104class RaceConditionTestServer(Server):
89105 def __init__(self):
90106 super().__init__(SERVER_NAME)
91107
92108 async def on_list_tools(self) -> list[Tool]:
93109 return []
94110
95-
96111def run_server_with_logging(port: int) -> None:
97- """Run the StreamableHTTP server with logging to capture race condition errors."""
98112 app = RaceConditionTestServer()
99113
100114 # Create session manager
@@ -121,16 +135,6 @@ async def lifespan(app: Starlette) -> AsyncGenerator[None, None]:
121135 starlette_app = Starlette(routes=routes, lifespan=lifespan)
122136 uvicorn.run(starlette_app, host="127.0.0.1", port=port, log_level="debug")
123137
124-
125- def start_server_process (port : int ) -> subprocess .Popen [str ]:
126- """Start server in a separate process."""
127- # Create a temporary script to run the server
128- import os
129-
130- server_code = f"""
131- import sys
132- sys.path.insert(0, { repr (os .getcwd ())} )
133- from tests.issues.test_1363_race_condition_streamable_http import run_server_with_logging
134138run_server_with_logging({ port } )
135139"""
136140
0 commit comments