33without requiring a prior initial state fetch, and returns JSON.
44"""
55
6+ import asyncio
7+ import subprocess
8+ import sys
69import time
7- from multiprocessing import Process
810
911import httpx
1012import pytest
1315from eval_protocol .types import MCPSession
1416
1517
16- def _run_airline_server ():
17- import os
18- import sys
19-
18+ @pytest .mark .asyncio
19+ async def test_tool_call_returns_json_without_prior_initial_state ():
2020 # Get Python version directly from sys.version_info
2121 minor_version = sys .version_info .minor # 10, 11, 12
2222
2323 # Map Python versions to port offsets: 3.10->0, 3.11->1, 3.12->2
2424 port_offset = minor_version - 10
25- port = str (9780 )
26- print (f"[SERVER DEBUG] Python 3.{ minor_version } -> Setting PORT={ port } " )
27- os .environ ["PORT" ] = port
28- from eval_protocol .mcp_servers .tau2 .tau2_mcp import AirlineDomainMcp
29-
30- print (f"[SERVER DEBUG] About to create AirlineDomainMcp with PORT={ os .environ .get ('PORT' )} " )
31- server = AirlineDomainMcp (seed = None )
32- print (f"[SERVER DEBUG] Server created, FastMCP port={ server .mcp .settings .port } " )
33- print (f"[SERVER DEBUG] About to run on port { port } " )
34- server .run (transport = "streamable-http" )
35-
25+ port = str (9780 + port_offset )
26+ print (f"[TEST DEBUG] Python 3.{ minor_version } -> Looking for server on port { port } " )
27+
28+ # Create server script to run as subprocess instead of multiprocessing
29+ server_script = """
30+ import sys
31+ import os
32+
33+ # Get Python version directly from sys.version_info
34+ minor_version = sys.version_info.minor # 10, 11, 12
35+
36+ # Map Python versions to port offsets: 3.10->0, 3.11->1, 3.12->2
37+ port_offset = minor_version - 10
38+ port = str(9780 + port_offset)
39+ print(f"[SERVER DEBUG] Python 3.{minor_version} -> Setting PORT={port}")
40+ os.environ["PORT"] = port
41+
42+ from eval_protocol.mcp_servers.tau2.tau2_mcp import AirlineDomainMcp
43+
44+ print(f"[SERVER DEBUG] About to create AirlineDomainMcp with PORT={os.environ.get('PORT')}")
45+ server = AirlineDomainMcp(seed=None)
46+ print(f"[SERVER DEBUG] Server created, FastMCP port={server.mcp.settings.port}")
47+ print(f"[SERVER DEBUG] About to run on port {port}")
48+ server.run(transport="streamable-http")
49+ """
3650
37- @pytest .mark .asyncio
38- async def test_tool_call_returns_json_without_prior_initial_state ():
39- import sys
51+ # Start server as subprocess instead of multiprocessing.Process
52+ proc = subprocess .Popen ([sys .executable , "-c" , server_script ])
4053
41- proc = Process ( target = _run_airline_server , daemon = True )
42- proc . start ( )
54+ # Give server time to start
55+ await asyncio . sleep ( 3 )
4356
4457 try :
45- # Get Python version directly from sys.version_info
46- minor_version = sys .version_info .minor # 10, 11, 12
47-
48- # Map Python versions to port offsets: 3.10->0, 3.11->1, 3.12->2
49- port_offset = minor_version - 10
50- port = str (9780 )
51- print (f"[TEST DEBUG] Python 3.{ minor_version } -> Looking for server on port { port } " )
52-
5358 base_url = f"http://127.0.0.1:{ port } /mcp"
5459 print (f"[TEST DEBUG] base_url = { base_url } " )
5560 client = httpx .Client (timeout = 1.0 )
@@ -66,7 +71,7 @@ async def test_tool_call_returns_json_without_prior_initial_state():
6671 pass
6772 time .sleep (0.2 )
6873 else :
69- pytest .fail ("Server did not start on port 9780 in time" )
74+ pytest .fail (f "Server did not start on port { port } in time" )
7075
7176 assert ready_time is not None , "Server did not return a successful status before exiting loop"
7277 assert ready_time - start_time < 20 , f"Server took too long to respond: { ready_time - start_time :.2f} s"
@@ -86,4 +91,4 @@ async def test_tool_call_returns_json_without_prior_initial_state():
8691 await mgr .close_session (session )
8792 finally :
8893 proc .terminate ()
89- proc .join (timeout = 5 )
94+ proc .wait (timeout = 5 )
0 commit comments