@@ -17,145 +17,122 @@ def __init__(self):
1717 self ._responded = False
1818 self .request_meta = {}
1919 self .message_metadata = None
20-
20+
2121 async def send (self , response ):
2222 if self ._responded :
2323 raise AssertionError (f"Request { self .request_id } already responded to" )
2424 self ._responded = True
25-
25+
2626 async def respond (self , response ):
2727 await self .send (response )
28-
28+
2929 def cancel (self ):
3030 """Simulate the cancel() method sending an error response."""
31- asyncio .create_task (self .send (ServerResult (
32- error = types .ErrorData (
33- code = - 32800 ,
34- message = "Request cancelled"
35- )
36- )))
31+ asyncio .create_task (self .send (ServerResult (error = types .ErrorData (code = - 32800 , message = "Request cancelled" ))))
3732
3833
3934@pytest .mark .asyncio
4035async def test_cancelled_request_no_double_response ():
4136 """Verify server handles cancelled requests without double response."""
42-
37+
4338 # Create a server instance
4439 server = Server ("test-server" )
45-
40+
4641 # Track if multiple responses are attempted
4742 response_count = 0
48-
43+
4944 # Override the send method to track calls
5045 mock_message = MockRequestResponder ()
5146 original_send = mock_message .send
52-
47+
5348 async def tracked_send (response ):
5449 nonlocal response_count
5550 response_count += 1
5651 await original_send (response )
57-
52+
5853 mock_message .send = tracked_send
59-
54+
6055 # Create a slow handler that will be cancelled
6156 async def slow_handler (req ):
6257 await asyncio .sleep (10 )
6358 return types .ServerResult (types .EmptyResult ())
64-
59+
6560 # Use PingRequest as it's a valid request type
6661 server .request_handlers [types .PingRequest ] = slow_handler
67-
62+
6863 # Create mock message and session
6964 mock_req = PingRequest (method = "ping" , params = {})
7065 mock_session = MagicMock ()
7166 mock_context = None
72-
67+
7368 # Start the request
7469 handle_task = asyncio .create_task (
75- server ._handle_request (
76- mock_message ,
77- mock_req ,
78- mock_session ,
79- mock_context ,
80- raise_exceptions = False
81- )
70+ server ._handle_request (mock_message , mock_req , mock_session , mock_context , raise_exceptions = False )
8271 )
83-
72+
8473 # Give it time to start
8574 await asyncio .sleep (0.1 )
86-
75+
8776 # Simulate cancellation
8877 mock_message .cancel ()
8978 handle_task .cancel ()
90-
79+
9180 # Wait for cancellation to propagate
9281 try :
9382 await handle_task
9483 except asyncio .CancelledError :
9584 pass
96-
85+
9786 # Give time for any duplicate response attempts
9887 await asyncio .sleep (0.1 )
99-
88+
10089 # Should only have one response (from cancel())
10190 assert response_count == 1 , f"Expected 1 response, got { response_count } "
10291
10392
104- @pytest .mark .asyncio
93+ @pytest .mark .asyncio
10594async def test_server_remains_functional_after_cancel ():
10695 """Verify server can handle new requests after a cancellation."""
107-
96+
10897 server = Server ("test-server" )
109-
98+
11099 # Add handlers
111100 async def slow_handler (req ):
112101 await asyncio .sleep (5 )
113102 return types .ServerResult (types .EmptyResult ())
114-
103+
115104 async def fast_handler (req ):
116105 return types .ServerResult (types .EmptyResult ())
117-
106+
118107 # Override ping handler for our test
119108 server .request_handlers [types .PingRequest ] = slow_handler
120-
109+
121110 # First request (will be cancelled)
122111 mock_message1 = MockRequestResponder ()
123112 mock_req1 = PingRequest (method = "ping" , params = {})
124-
113+
125114 handle_task = asyncio .create_task (
126- server ._handle_request (
127- mock_message1 ,
128- mock_req1 ,
129- MagicMock (),
130- None ,
131- raise_exceptions = False
132- )
115+ server ._handle_request (mock_message1 , mock_req1 , MagicMock (), None , raise_exceptions = False )
133116 )
134-
117+
135118 await asyncio .sleep (0.1 )
136119 mock_message1 .cancel ()
137120 handle_task .cancel ()
138-
121+
139122 try :
140123 await handle_task
141124 except asyncio .CancelledError :
142125 pass
143-
126+
144127 # Change handler to fast one
145128 server .request_handlers [types .PingRequest ] = fast_handler
146-
129+
147130 # Second request (should work normally)
148131 mock_message2 = MockRequestResponder ()
149132 mock_req2 = PingRequest (method = "ping" , params = {})
150-
133+
151134 # This should complete successfully
152- await server ._handle_request (
153- mock_message2 ,
154- mock_req2 ,
155- MagicMock (),
156- None ,
157- raise_exceptions = False
158- )
159-
135+ await server ._handle_request (mock_message2 , mock_req2 , MagicMock (), None , raise_exceptions = False )
136+
160137 # Server handled the second request successfully
161- assert mock_message2 ._responded
138+ assert mock_message2 ._responded
0 commit comments