@@ -62,7 +62,7 @@ func TestSSEServer(t *testing.T) {
6262 defer sseResp .Body .Close ()
6363
6464 // Read the endpoint event
65- endpointEvent , err := readSeeEvent (sseResp )
65+ endpointEvent , err := readSSEEvent (sseResp )
6666 if err != nil {
6767 t .Fatalf ("Failed to read SSE response: %v" , err )
6868 }
@@ -195,7 +195,7 @@ func TestSSEServer(t *testing.T) {
195195 }
196196 defer resp .Body .Close ()
197197
198- endpointEvent , err = readSeeEvent (sseResp )
198+ endpointEvent , err = readSSEEvent (sseResp )
199199 if err != nil {
200200 t .Fatalf ("Failed to read SSE response: %v" , err )
201201 }
@@ -590,7 +590,7 @@ func TestSSEServer(t *testing.T) {
590590 defer sseResp .Body .Close ()
591591
592592 // Read the endpoint event
593- endpointEvent , err := readSeeEvent (sseResp )
593+ endpointEvent , err := readSSEEvent (sseResp )
594594 if err != nil {
595595 t .Fatalf ("Failed to read SSE response: %v" , err )
596596 }
@@ -632,16 +632,16 @@ func TestSSEServer(t *testing.T) {
632632 }
633633
634634 // Verify response
635- endpointEvent , err = readSeeEvent (sseResp )
635+ endpointEvent , err = readSSEEvent (sseResp )
636636 if err != nil {
637637 t .Fatalf ("Failed to read SSE response: %v" , err )
638638 }
639- respFromSee := strings .TrimSpace (
639+ respFromSSE := strings .TrimSpace (
640640 strings .Split (strings .Split (endpointEvent , "data: " )[1 ], "\n " )[0 ],
641641 )
642642
643643 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 {
645645 t .Fatalf ("Failed to decode response: %v" , err )
646646 }
647647
@@ -680,17 +680,17 @@ func TestSSEServer(t *testing.T) {
680680 }
681681 defer resp .Body .Close ()
682682
683- endpointEvent , err = readSeeEvent (sseResp )
683+ endpointEvent , err = readSSEEvent (sseResp )
684684 if err != nil {
685685 t .Fatalf ("Failed to read SSE response: %v" , err )
686686 }
687687
688- respFromSee = strings .TrimSpace (
688+ respFromSSE = strings .TrimSpace (
689689 strings .Split (strings .Split (endpointEvent , "data: " )[1 ], "\n " )[0 ],
690690 )
691691
692692 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 {
694694 t .Fatalf ("Failed to decode response: %v" , err )
695695 }
696696
@@ -1140,7 +1140,7 @@ func TestSSEServer(t *testing.T) {
11401140 registeredSession = s
11411141 }
11421142 })
1143-
1143+
11441144 mcpServer := NewMCPServer ("test" , "1.0.0" , WithHooks (hooks ))
11451145 testServer := NewTestServer (mcpServer )
11461146 defer testServer .Close ()
@@ -1153,7 +1153,7 @@ func TestSSEServer(t *testing.T) {
11531153 defer sseResp .Body .Close ()
11541154
11551155 // Read the endpoint event to ensure session is established
1156- _ , err = readSeeEvent (sseResp )
1156+ _ , err = readSSEEvent (sseResp )
11571157 if err != nil {
11581158 t .Fatalf ("Failed to read SSE response: %v" , err )
11591159 }
@@ -1240,9 +1240,87 @@ func TestSSEServer(t *testing.T) {
12401240 t .Error ("Expected final_tool to exist" )
12411241 }
12421242 })
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+ })
12431321}
12441322
1245- func readSeeEvent (sseResp * http.Response ) (string , error ) {
1323+ func readSSEEvent (sseResp * http.Response ) (string , error ) {
12461324 buf := make ([]byte , 1024 )
12471325 n , err := sseResp .Body .Read (buf )
12481326 if err != nil {
0 commit comments