77import json
88import multiprocessing
99import socket
10- import time
1110from collections .abc import Generator
1211from typing import Any
1312
4342from mcp .shared .message import ClientMessageMetadata
4443from mcp .shared .session import RequestResponder
4544from mcp .types import InitializeResult , TextContent , TextResourceContents , Tool
45+ from tests .test_helpers import wait_for_server
4646
4747# Test constants
4848SERVER_NAME = "test_streamable_http_server"
@@ -344,18 +344,7 @@ def basic_server(basic_server_port: int) -> Generator[None, None, None]:
344344 proc .start ()
345345
346346 # Wait for server to be running
347- max_attempts = 20
348- attempt = 0
349- while attempt < max_attempts :
350- try :
351- with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
352- s .connect (("127.0.0.1" , basic_server_port ))
353- break
354- except ConnectionRefusedError :
355- time .sleep (0.1 )
356- attempt += 1
357- else :
358- raise RuntimeError (f"Server failed to start after { max_attempts } attempts" )
347+ wait_for_server (basic_server_port )
359348
360349 yield
361350
@@ -391,18 +380,7 @@ def event_server(
391380 proc .start ()
392381
393382 # Wait for server to be running
394- max_attempts = 20
395- attempt = 0
396- while attempt < max_attempts :
397- try :
398- with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
399- s .connect (("127.0.0.1" , event_server_port ))
400- break
401- except ConnectionRefusedError :
402- time .sleep (0.1 )
403- attempt += 1
404- else :
405- raise RuntimeError (f"Server failed to start after { max_attempts } attempts" )
383+ wait_for_server (event_server_port )
406384
407385 yield event_store , f"http://127.0.0.1:{ event_server_port } "
408386
@@ -422,18 +400,7 @@ def json_response_server(json_server_port: int) -> Generator[None, None, None]:
422400 proc .start ()
423401
424402 # Wait for server to be running
425- max_attempts = 20
426- attempt = 0
427- while attempt < max_attempts :
428- try :
429- with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
430- s .connect (("127.0.0.1" , json_server_port ))
431- break
432- except ConnectionRefusedError :
433- time .sleep (0.1 )
434- attempt += 1
435- else :
436- raise RuntimeError (f"Server failed to start after { max_attempts } attempts" )
403+ wait_for_server (json_server_port )
437404
438405 yield
439406
@@ -1407,18 +1374,7 @@ def context_aware_server(basic_server_port: int) -> Generator[None, None, None]:
14071374 proc .start ()
14081375
14091376 # Wait for server to be running
1410- max_attempts = 20
1411- attempt = 0
1412- while attempt < max_attempts :
1413- try :
1414- with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
1415- s .connect (("127.0.0.1" , basic_server_port ))
1416- break
1417- except ConnectionRefusedError :
1418- time .sleep (0.1 )
1419- attempt += 1
1420- else :
1421- raise RuntimeError (f"Context-aware server failed to start after { max_attempts } attempts" )
1377+ wait_for_server (basic_server_port )
14221378
14231379 yield
14241380
0 commit comments