33without requiring a prior initial state fetch, and returns JSON.
44"""
55
6+ import socket
67import time
7- from multiprocessing import Process
8+ from multiprocessing import Process , Queue
89
910import httpx
1011import pytest
1314from eval_protocol .types import MCPSession
1415
1516
16- def _run_airline_server ():
17+ def _run_airline_server (port_queue ):
1718 import os
1819
19- os .environ ["PORT" ] = "9780"
20+ # Use dynamic port allocation to avoid conflicts in parallel CI runs
21+ with socket .socket () as s :
22+ s .bind (("" , 0 ))
23+ port = s .getsockname ()[1 ]
24+
25+ port_queue .put (port ) # Send the port back to the test
26+ os .environ ["PORT" ] = str (port )
2027 from eval_protocol .mcp_servers .tau2 .tau2_mcp import AirlineDomainMcp
2128
2229 server = AirlineDomainMcp (seed = None )
@@ -25,29 +32,26 @@ def _run_airline_server():
2532
2633@pytest .mark .asyncio
2734async def test_tool_call_returns_json_without_prior_initial_state ():
28- proc = Process (target = _run_airline_server , daemon = True )
35+ port_queue = Queue ()
36+ proc = Process (target = _run_airline_server , args = (port_queue ,), daemon = True )
2937 proc .start ()
3038
3139 try :
32- base_url = "http://127.0.0.1:9780/mcp"
40+ # Get the dynamically assigned port
41+ port = port_queue .get (timeout = 10 )
42+ base_url = f"http://127.0.0.1:{ port } /mcp"
3343 client = httpx .Client (timeout = 1.0 )
34- start_time = time .time ()
35- deadline = start_time + 20
36- ready_time = None
44+ deadline = time .time () + 20
3745 while time .time () < deadline :
3846 try :
3947 r = client .get (base_url )
4048 if r .status_code in (200 , 307 , 406 ):
41- ready_time = time .time ()
4249 break
4350 except Exception :
4451 pass
4552 time .sleep (0.2 )
4653 else :
47- pytest .fail ("Server did not start on port 9780 in time" )
48-
49- assert ready_time is not None , "Server did not return a successful status before exiting loop"
50- assert ready_time - start_time < 20 , f"Server took too long to respond: { ready_time - start_time :.2f} s"
54+ pytest .fail (f"Server did not start on port { port } in time" )
5155
5256 session = MCPSession (base_url = base_url , session_id = "test-autocreate" , seed = None , model_id = "test-model" )
5357
0 commit comments