Skip to content

Commit e47ca34

Browse files
Add clean SSE client-server test
1 parent ce10f77 commit e47ca34

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

tests/test_sse_client_server.py

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
1+
import asyncio
2+
from typing import AsyncGenerator, List
3+
from fastapi import FastAPI
4+
from starlette.responses import StreamingResponse
5+
import uvicorn
6+
from threading import Thread
7+
import httpx
8+
from mcp.client.sse import aconnect_sse
9+
110
app = FastAPI()
211

312
@app.get("/sse")
413
async def sse_endpoint() -> StreamingResponse:
514
async def event_stream() -> AsyncGenerator[str, None]:
615
for i in range(3):
7-
yield f"data: Hello {i+1}\n\n"
16+
yield f"data: Hello {i+1}\\n\\n"
817
await asyncio.sleep(0.1)
918
return StreamingResponse(event_stream(), media_type="text/event-stream")
1019

1120
def run_mock_server() -> None:
1221
uvicorn.run(app, host="127.0.0.1", port=8012, log_level="warning")
1322

14-
async def test_aconnect_sse_server_response() -> None:
23+
async def run_sse_test() -> None:
1524
server_thread = Thread(target=run_mock_server, daemon=True)
1625
server_thread.start()
1726
await asyncio.sleep(1)
1827

1928
messages: List[str] = []
20-
2129
async with httpx.AsyncClient() as client:
2230
async with aconnect_sse(client, "GET", "http://127.0.0.1:8012/sse") as event_source:
2331
async for event in event_source.aiter_sse():
@@ -27,5 +35,11 @@ async def test_aconnect_sse_server_response() -> None:
2735
if len(messages) == 3:
2836
break
2937

30-
assert messages == ["Hello 1", "Hello 2", "Hello 3"]
31-
print("\n Test passed! SSE connection via aconnect_sse worked correctly.")
38+
if messages == ["Hello 1", "Hello 2", "Hello 3"]:
39+
print("\\n Test passed!")
40+
else:
41+
print("\\n Test failed:", messages)
42+
43+
if __name__ == "__main__":
44+
asyncio.run(run_sse_test())
45+

0 commit comments

Comments
 (0)