Skip to content

Commit 4096f2e

Browse files
committed
Add test for server-side task creation
1 parent 0da9dbb commit 4096f2e

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

tests/server/test_session_tasks.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,3 +553,63 @@ async def test_delete_task_without_capability():
553553
assert "not announced tasks capability" in str(e) or str(types.INVALID_REQUEST) in str(e)
554554
finally:
555555
tg.cancel_scope.cancel()
556+
557+
558+
@pytest.mark.anyio
559+
async def test_server_receives_request_with_task_metadata():
560+
"""Test server creates task when receiving request with task metadata."""
561+
task_store = InMemoryTaskStore()
562+
client_task_store = InMemoryTaskStore()
563+
server = Server("test", task_store=task_store)
564+
565+
# Register a simple tool handler
566+
@server.call_tool()
567+
async def handle_tool(name: str, arguments: dict[str, str]) -> list[types.TextContent]:
568+
return [types.TextContent(type="text", text=f"Tool {name} called")]
569+
570+
async with create_client_server_memory_streams() as (client_streams, server_streams):
571+
client_read, client_write = client_streams
572+
server_read, server_write = server_streams
573+
574+
async with anyio.create_task_group() as tg:
575+
tg.start_soon(
576+
lambda: server.run(
577+
server_read,
578+
server_write,
579+
server.create_initialization_options(),
580+
)
581+
)
582+
583+
try:
584+
async with ClientSession(
585+
read_stream=client_read,
586+
write_stream=client_write,
587+
task_store=client_task_store,
588+
) as client_session:
589+
await client_session.initialize()
590+
591+
# Send a request with task metadata
592+
task_id = "test-task-with-metadata"
593+
task_meta = types.TaskMetadata(taskId=task_id, keepAlive=60000)
594+
595+
# Use send_request with task parameter to inject task metadata
596+
result = await client_session.send_request(
597+
types.ClientRequest(
598+
types.CallToolRequest(
599+
params=types.CallToolRequestParams(name="test_tool", arguments={"arg": "value"})
600+
)
601+
),
602+
types.CallToolResult,
603+
task=task_meta,
604+
)
605+
606+
# Verify the tool was called
607+
assert len(result.content) > 0
608+
609+
# Verify the task was created in the server's task store
610+
server_task = await task_store.get_task(task_id)
611+
assert server_task is not None
612+
assert server_task.taskId == task_id
613+
assert server_task.status == "submitted"
614+
finally:
615+
tg.cancel_scope.cancel()

0 commit comments

Comments
 (0)