MCPcopy Create free account
hub / github.com/coder/aibridge / newMockUpstream

Function newMockUpstream

internal/integrationtest/mockupstream.go:116–143  ·  view source on GitHub ↗

newMockUpstream creates a started httptest.Server that replays fixture responses. Responses are returned in order: first call → first response. The test fails if the number of requests doesn't match the number of responses (when AllowOverflow is not set, default). srv := newMockUpstream(ctx, t, ne

(ctx context.Context, t *testing.T, responses ...upstreamResponse)

Source from the content-addressed store, hash-verified

114// srv := newMockUpstream(ctx, t, newFixtureResponse(fix)) // simple
115// srv := newMockUpstream(ctx, t, newFixtureResponse(fix), newFixtureToolResponse(fix)) // multi-turn
116func newMockUpstream(ctx context.Context, t *testing.T, responses ...upstreamResponse) *mockUpstream {
117 t.Helper()
118 require.NotEmpty(t, responses, "at least one upstreamResponse required")
119
120 ms := &mockUpstream{
121 t: t,
122 responses: responses,
123 }
124
125 srv := httptest.NewUnstartedServer(http.HandlerFunc(ms.handle))
126 srv.Config.BaseContext = func(_ net.Listener) context.Context { return ctx }
127 srv.Start()
128
129 t.Cleanup(func() {
130 srv.Close()
131
132 // Verify the number of requests matches expectations.
133 calls := int(ms.Calls.Load())
134 if ms.AllowOverflow {
135 require.LessOrEqual(t, len(ms.responses), calls, "too few requests, got: %v, want at least: %v", calls, len(ms.responses))
136 } else {
137 require.Equal(t, len(ms.responses), calls, "unexpected number of requests, got: %v, want: %v", calls, len(ms.responses))
138 }
139 })
140
141 ms.Server = srv
142 return ms
143}
144
145func (ms *mockUpstream) handle(w http.ResponseWriter, r *http.Request) {
146 call := int(ms.Calls.Add(1) - 1)

Calls 2

StartMethod · 0.80
CloseMethod · 0.45