TestDisabledProviderHandler asserts that requests to a disabled provider return a 503 with an ErrorCodeProviderDisabled body and that a sibling enabled provider keeps routing normally.
(t *testing.T)
| 285 | // provider return a 503 with an ErrorCodeProviderDisabled body and |
| 286 | // that a sibling enabled provider keeps routing normally. |
| 287 | func TestDisabledProviderHandler(t *testing.T) { |
| 288 | t.Parallel() |
| 289 | |
| 290 | logger := slogtest.Make(t, nil) |
| 291 | |
| 292 | upstream := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { |
| 293 | _, _ = w.Write([]byte("upstream-reached")) |
| 294 | })) |
| 295 | t.Cleanup(upstream.Close) |
| 296 | |
| 297 | enabled := aibridge.NewOpenAIProvider(config.OpenAI{Name: "enabled-openai", BaseURL: upstream.URL}) |
| 298 | disabled := aibridge.NewDisabledProviderStub("disabled-openai", "openai") |
| 299 | bridge, err := aibridge.NewRequestBridge( |
| 300 | t.Context(), |
| 301 | []provider.Provider{enabled, disabled}, |
| 302 | nil, nil, logger, nil, bridgeTestTracer, |
| 303 | ) |
| 304 | require.NoError(t, err) |
| 305 | |
| 306 | for _, tc := range []struct { |
| 307 | name string |
| 308 | path string |
| 309 | }{ |
| 310 | {name: "Bridged", path: "/disabled-openai/v1/chat/completions"}, |
| 311 | {name: "Passthrough", path: "/disabled-openai/v1/models"}, |
| 312 | {name: "Unknown", path: "/disabled-openai/anything/else"}, |
| 313 | } { |
| 314 | t.Run("DisabledProviderReturnsSentinel/"+tc.name, func(t *testing.T) { |
| 315 | t.Parallel() |
| 316 | |
| 317 | req := httptest.NewRequest(http.MethodPost, tc.path, nil) |
| 318 | resp := httptest.NewRecorder() |
| 319 | bridge.ServeHTTP(resp, req) |
| 320 | |
| 321 | assert.Equal(t, http.StatusServiceUnavailable, resp.Code) |
| 322 | assert.Contains(t, resp.Body.String(), aibridge.ErrorCodeProviderDisabled) |
| 323 | assert.Contains(t, resp.Body.String(), "disabled-openai") |
| 324 | }) |
| 325 | } |
| 326 | |
| 327 | t.Run("EnabledProviderUnaffected", func(t *testing.T) { |
| 328 | t.Parallel() |
| 329 | |
| 330 | req := httptest.NewRequest(http.MethodGet, "/enabled-openai/v1/models", nil) |
| 331 | resp := httptest.NewRecorder() |
| 332 | bridge.ServeHTTP(resp, req) |
| 333 | |
| 334 | assert.Equal(t, http.StatusOK, resp.Code) |
| 335 | assert.Equal(t, "upstream-reached", resp.Body.String()) |
| 336 | }) |
| 337 | } |
nothing calls this directly
no test coverage detected