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

Method executeHTTP

jsonrpc/integration_tests/framework/executor.go:75–170  ·  view source on GitHub ↗

executeHTTP handles HTTP transport scenarios

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

Source from the content-addressed store, hash-verified

73
74// executeHTTP handles HTTP transport scenarios
75func (e *executor) executeHTTP(ctx context.Context, t *testing.T, scenario Scenario) {
76 t.Helper()
77
78 // Create client
79 client, err := harness.NewClient(e.serverURL, nil)
80 require.NoError(t, err, "Failed to create client")
81
82 // Build request
83 method := scenario.Request.GetMethod(scenario.Method)
84
85 // Try CLI client first for non-streaming scenarios
86 // Skip CLI if custom JSONRPC field is specified
87 if e.config.WorkDir != "" && scenario.Request.JSONRPC == "" {
88 cliClient, err := harness.NewCLIClient(e.config.WorkDir, e.serverURL)
89 if err != nil {
90 } else if cliClient.CanHandle(method, scenario.Request.Params) {
91 // For CLI, we need to separate service and method
92 // Default to "test" service if no dot in method name
93 service := "test"
94 methodName := method
95 if parts := strings.Split(method, "."); len(parts) == 2 {
96 service = parts[0]
97 methodName = parts[1]
98 }
99
100 result, err := cliClient.CallMethod(ctx, service, methodName, scenario.Request.Params)
101 if err != nil {
102 if scenario.Expect.Error != nil {
103 // Expected error - validate it
104 e.validateError(t, err, scenario.Expect.Error)
105 return
106 }
107 require.NoError(t, err, "CLI call failed")
108 }
109
110 // With verbose flag, CLI now returns the raw transport-level response
111 if result != nil {
112 // Wrap in JSON-RPC envelope
113 response := map[string]any{
114 "jsonrpc": "2.0",
115 "id": scenario.Request.ID,
116 "result": result,
117 }
118 e.validateJSONRPCResponse(t, response, scenario.Expect)
119 } else if !scenario.Expect.NoResponse {
120 assert.Fail(t, "Expected response but got none")
121 }
122 return
123 }
124 }
125
126 // Fall back to direct client
127
128 req := harness.JSONRPCRequest{
129 Method: method,
130 Params: scenario.Request.Params,
131 ID: scenario.Request.ID,
132 }

Callers 1

executeSimpleMethod · 0.95

Calls 8

CanHandleMethod · 0.95
CallMethodMethod · 0.95
validateErrorMethod · 0.95
CallHTTPMethod · 0.95
NewClientFunction · 0.92
NewCLIClientFunction · 0.92
GetMethodMethod · 0.80

Tested by

no test coverage detected