@@ -201,6 +201,51 @@ func TestProtocol_RequestHandler(t *testing.T) {
201
201
}
202
202
}
203
203
204
+ func TestProtocol_RequestHandler_ErrorResponse (t * testing.T ) {
205
+ p := NewProtocol (nil )
206
+ tr := testingutils .NewMockTransport ()
207
+
208
+ if err := p .Connect (tr ); err != nil {
209
+ t .Fatalf ("Connect failed: %v" , err )
210
+ }
211
+
212
+ // Register request handler
213
+ handlerCalled := false
214
+ p .SetRequestHandler ("test_method" , func (ctx context.Context , req * transport.BaseJSONRPCRequest , extra RequestHandlerExtra ) (transport.JsonRpcBody , error ) {
215
+ handlerCalled = true
216
+ return nil , errors .New ("sample error" )
217
+ })
218
+
219
+ // Simulate incoming request
220
+ tr .SimulateMessage (transport .NewBaseMessageRequest (& transport.BaseJSONRPCRequest {
221
+ Jsonrpc : "2.0" ,
222
+ Method : "test_method" ,
223
+ Params : json .RawMessage (`{"param": "value"}` ),
224
+ }))
225
+
226
+ // Give some time for handler to be called
227
+ time .Sleep (50 * time .Millisecond )
228
+
229
+ if ! handlerCalled {
230
+ t .Error ("Request handler was not called" )
231
+ }
232
+
233
+ // Check response
234
+ msgs := tr .GetMessages ()
235
+ if len (msgs ) != 1 {
236
+ t .Fatalf ("Expected 1 message, got %d" , len (msgs ))
237
+ }
238
+
239
+ response := msgs [0 ]
240
+ if response .Type != transport .BaseMessageTypeJSONRPCErrorType {
241
+ t .Fatal ("Message is not a response" )
242
+ }
243
+
244
+ if string (response .JsonRpcError .Error .Message ) != "sample error" {
245
+ t .Errorf ("Expected result 'sample error', got %v" , string (response .JsonRpcError .Error .Message ))
246
+ }
247
+ }
248
+
204
249
// TestProtocol_NotificationHandler tests the handling of incoming notifications.
205
250
// This is important for asynchronous events and status updates.
206
251
// It verifies:
0 commit comments