MCPcopy Create free account
hub / github.com/goadesign/goa / executeSSESequence

Method executeSSESequence

jsonrpc/integration_tests/framework/executor.go:313–365  ·  view source on GitHub ↗

executeSSESequence handles SSE streaming sequences

(ctx context.Context, t *testing.T, scenario Scenario)

Source from the content-addressed store, hash-verified

311
312// executeSSESequence handles SSE streaming sequences
313func (e *executor) executeSSESequence(ctx context.Context, t *testing.T, scenario Scenario) {
314 t.Helper()
315
316 // SSE only supports server-to-client streaming
317 require.True(t, scenario.Request.Params != nil || scenario.Request.ID != nil, "SSE requires an initial request")
318
319 client, err := harness.NewClient(e.serverURL, nil)
320 require.NoError(t, err, "Failed to create client")
321
322 // Send request and get SSE events
323 method := scenario.Request.GetMethod(scenario.Method)
324 req := harness.JSONRPCRequest{
325 Method: method,
326 Params: scenario.Request.Params,
327 ID: scenario.Request.ID,
328 }
329 // Handle JSONRPC field:
330 // - Not specified (empty string) → Use default "2.0"
331 // - "-" → Omit the field entirely
332 // - Any other value → Use that value
333 if scenario.Request.JSONRPC == "-" {
334 // Special value to omit the field
335 emptyStr := ""
336 req.JSONRPC = &emptyStr
337 } else if scenario.Request.JSONRPC != "" {
338 // Custom value specified
339 req.JSONRPC = &scenario.Request.JSONRPC
340 }
341 // If JSONRPC is empty string (not specified), req.JSONRPC remains nil and defaults to "2.0"
342 events, err := client.CallSSE(ctx, req)
343 require.NoError(t, err, "SSE request failed")
344
345 // Validate sequence
346 require.Len(t, events, len(scenario.Sequence), "Event count mismatch")
347
348 for i, step := range scenario.Sequence {
349 require.Equalf(t, "receive", step.Type, "SSE only supports 'receive' steps, got %s", step.Type)
350
351 require.Lessf(t, i, len(events), "Expected event at step %d, but no more events", i)
352
353 // Parse and validate the event
354 var response map[string]any
355 err := json.Unmarshal(events[i], &response)
356 require.NoErrorf(t, err, "Failed to unmarshal event %d", i)
357
358 // For SSE streaming, step.Expect contains the full expected JSON-RPC message
359 expectedMsg, ok := step.Expect.(map[string]any)
360 require.True(t, ok, "Step %d: invalid expect format", i)
361
362 // Compare the messages
363 e.compareJSONRPCMessages(t, response, expectedMsg)
364 }
365}
366
367// executeBatch handles batch request scenarios
368func (e *executor) executeBatch(t *testing.T, scenario Scenario) {

Callers 1

executeStreamingMethod · 0.95

Calls 4

CallSSEMethod · 0.95
NewClientFunction · 0.92
GetMethodMethod · 0.80

Tested by

no test coverage detected