@@ -62,7 +62,7 @@ func TestSSEServer(t *testing.T) {
62
62
defer sseResp .Body .Close ()
63
63
64
64
// Read the endpoint event
65
- endpointEvent , err := readSeeEvent (sseResp )
65
+ endpointEvent , err := readSSEEvent (sseResp )
66
66
if err != nil {
67
67
t .Fatalf ("Failed to read SSE response: %v" , err )
68
68
}
@@ -195,7 +195,7 @@ func TestSSEServer(t *testing.T) {
195
195
}
196
196
defer resp .Body .Close ()
197
197
198
- endpointEvent , err = readSeeEvent (sseResp )
198
+ endpointEvent , err = readSSEEvent (sseResp )
199
199
if err != nil {
200
200
t .Fatalf ("Failed to read SSE response: %v" , err )
201
201
}
@@ -590,7 +590,7 @@ func TestSSEServer(t *testing.T) {
590
590
defer sseResp .Body .Close ()
591
591
592
592
// Read the endpoint event
593
- endpointEvent , err := readSeeEvent (sseResp )
593
+ endpointEvent , err := readSSEEvent (sseResp )
594
594
if err != nil {
595
595
t .Fatalf ("Failed to read SSE response: %v" , err )
596
596
}
@@ -632,16 +632,16 @@ func TestSSEServer(t *testing.T) {
632
632
}
633
633
634
634
// Verify response
635
- endpointEvent , err = readSeeEvent (sseResp )
635
+ endpointEvent , err = readSSEEvent (sseResp )
636
636
if err != nil {
637
637
t .Fatalf ("Failed to read SSE response: %v" , err )
638
638
}
639
- respFromSee := strings .TrimSpace (
639
+ respFromSSE := strings .TrimSpace (
640
640
strings .Split (strings .Split (endpointEvent , "data: " )[1 ], "\n " )[0 ],
641
641
)
642
642
643
643
var response map [string ]interface {}
644
- if err := json .NewDecoder (strings .NewReader (respFromSee )).Decode (& response ); err != nil {
644
+ if err := json .NewDecoder (strings .NewReader (respFromSSE )).Decode (& response ); err != nil {
645
645
t .Fatalf ("Failed to decode response: %v" , err )
646
646
}
647
647
@@ -680,17 +680,17 @@ func TestSSEServer(t *testing.T) {
680
680
}
681
681
defer resp .Body .Close ()
682
682
683
- endpointEvent , err = readSeeEvent (sseResp )
683
+ endpointEvent , err = readSSEEvent (sseResp )
684
684
if err != nil {
685
685
t .Fatalf ("Failed to read SSE response: %v" , err )
686
686
}
687
687
688
- respFromSee = strings .TrimSpace (
688
+ respFromSSE = strings .TrimSpace (
689
689
strings .Split (strings .Split (endpointEvent , "data: " )[1 ], "\n " )[0 ],
690
690
)
691
691
692
692
response = make (map [string ]interface {})
693
- if err := json .NewDecoder (strings .NewReader (respFromSee )).Decode (& response ); err != nil {
693
+ if err := json .NewDecoder (strings .NewReader (respFromSSE )).Decode (& response ); err != nil {
694
694
t .Fatalf ("Failed to decode response: %v" , err )
695
695
}
696
696
@@ -1140,7 +1140,7 @@ func TestSSEServer(t *testing.T) {
1140
1140
registeredSession = s
1141
1141
}
1142
1142
})
1143
-
1143
+
1144
1144
mcpServer := NewMCPServer ("test" , "1.0.0" , WithHooks (hooks ))
1145
1145
testServer := NewTestServer (mcpServer )
1146
1146
defer testServer .Close ()
@@ -1153,7 +1153,7 @@ func TestSSEServer(t *testing.T) {
1153
1153
defer sseResp .Body .Close ()
1154
1154
1155
1155
// Read the endpoint event to ensure session is established
1156
- _ , err = readSeeEvent (sseResp )
1156
+ _ , err = readSSEEvent (sseResp )
1157
1157
if err != nil {
1158
1158
t .Fatalf ("Failed to read SSE response: %v" , err )
1159
1159
}
@@ -1240,9 +1240,87 @@ func TestSSEServer(t *testing.T) {
1240
1240
t .Error ("Expected final_tool to exist" )
1241
1241
}
1242
1242
})
1243
+
1244
+ t .Run ("TestServerResponseMarshalError" , func (t * testing.T ) {
1245
+ mcpServer := NewMCPServer ("test" , "1.0.0" ,
1246
+ WithResourceCapabilities (true , true ),
1247
+ WithHooks (& Hooks {
1248
+ OnAfterInitialize : []OnAfterInitializeFunc {
1249
+ func (ctx context.Context , id any , message * mcp.InitializeRequest , result * mcp.InitializeResult ) {
1250
+ result .Result .Meta = map [string ]interface {}{"invalid" : func () {}} // marshal will fail
1251
+ },
1252
+ },
1253
+ }),
1254
+ )
1255
+ testServer := NewTestServer (mcpServer )
1256
+ defer testServer .Close ()
1257
+
1258
+ // Connect to SSE endpoint
1259
+ sseResp , err := http .Get (fmt .Sprintf ("%s/sse" , testServer .URL ))
1260
+ if err != nil {
1261
+ t .Fatalf ("Failed to connect to SSE endpoint: %v" , err )
1262
+ }
1263
+ defer sseResp .Body .Close ()
1264
+
1265
+ // Read the endpoint event
1266
+ endpointEvent , err := readSSEEvent (sseResp )
1267
+ if err != nil {
1268
+ t .Fatalf ("Failed to read SSE response: %v" , err )
1269
+ }
1270
+ if ! strings .Contains (endpointEvent , "event: endpoint" ) {
1271
+ t .Fatalf ("Expected endpoint event, got: %s" , endpointEvent )
1272
+ }
1273
+
1274
+ // Extract message endpoint URL
1275
+ messageURL := strings .TrimSpace (
1276
+ strings .Split (strings .Split (endpointEvent , "data: " )[1 ], "\n " )[0 ],
1277
+ )
1278
+
1279
+ // Send initialize request
1280
+ initRequest := map [string ]interface {}{
1281
+ "jsonrpc" : "2.0" ,
1282
+ "id" : 1 ,
1283
+ "method" : "initialize" ,
1284
+ "params" : map [string ]interface {}{
1285
+ "protocolVersion" : "2024-11-05" ,
1286
+ "clientInfo" : map [string ]interface {}{
1287
+ "name" : "test-client" ,
1288
+ "version" : "1.0.0" ,
1289
+ },
1290
+ },
1291
+ }
1292
+
1293
+ requestBody , err := json .Marshal (initRequest )
1294
+ if err != nil {
1295
+ t .Fatalf ("Failed to marshal request: %v" , err )
1296
+ }
1297
+
1298
+ resp , err := http .Post (
1299
+ messageURL ,
1300
+ "application/json" ,
1301
+ bytes .NewBuffer (requestBody ),
1302
+ )
1303
+ if err != nil {
1304
+ t .Fatalf ("Failed to send message: %v" , err )
1305
+ }
1306
+ defer resp .Body .Close ()
1307
+
1308
+ if resp .StatusCode != http .StatusAccepted {
1309
+ t .Errorf ("Expected status 202, got %d" , resp .StatusCode )
1310
+ }
1311
+
1312
+ endpointEvent , err = readSSEEvent (sseResp )
1313
+ if err != nil {
1314
+ t .Fatalf ("Failed to read SSE response: %v" , err )
1315
+ }
1316
+
1317
+ if ! strings .Contains (endpointEvent , "\" id\" : null" ) {
1318
+ t .Errorf ("Expected id to be null" )
1319
+ }
1320
+ })
1243
1321
}
1244
1322
1245
- func readSeeEvent (sseResp * http.Response ) (string , error ) {
1323
+ func readSSEEvent (sseResp * http.Response ) (string , error ) {
1246
1324
buf := make ([]byte , 1024 )
1247
1325
n , err := sseResp .Body .Read (buf )
1248
1326
if err != nil {
0 commit comments