executeHTTP handles HTTP transport scenarios
(ctx context.Context, t *testing.T, scenario Scenario)
| 73 | |
| 74 | // executeHTTP handles HTTP transport scenarios |
| 75 | func (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 | } |
no test coverage detected