zai-proxy/notes/bf-4gif.md
jedarden 4216114dd1 docs(bf-4gif): verify MockUpstream server scenarios and methods
- Verified all 12 MockUpstream scenarios work correctly
- Verified all 6 MockUpstream methods work correctly
- All tests pass: scenarios, methods, and proxy integration
- Comprehensive test coverage in mockupstream_test.go
2026-07-02 18:50:04 -04:00

2.7 KiB

MockUpstream Test Verification

Summary

Verified all MockUpstream server scenarios and methods work correctly via comprehensive test suite.

Test Results

All Scenario Tests (TestMockUpstream_AllScenarios)

All 12 scenarios verified:

  • 429-with-retry-after-then-success - Returns 429 with Retry-After header for N requests, then succeeds
  • 429-no-header-then-429 - Always returns 429 without Retry-After header
  • empty-json-body - Returns 200 OK with empty body (triggers retry logic)
  • invalid-json-body - Returns 200 OK with malformed JSON (triggers retry logic)
  • empty-streaming - Returns 200 OK with empty SSE stream (triggers retry logic)
  • 422-no-retry - Returns 422 without retry (correct error code passthrough)
  • 500-no-retry - Returns 500 without retry (correct error code passthrough)
  • 404-no-retry - Returns 404 without retry (correct error code passthrough)
  • network-error-then-success - Simulates connection failures, then succeeds
  • success - Returns successful JSON response immediately
  • malformed-streaming - Returns invalid SSE format (triggers retry logic)

All Method Tests (TestMockUpstream_Methods)

All 6 methods verified:

  • GetRequestCount() - Accurately tracks and returns request count
  • SetFailUntilCount() - Correctly configures failure behavior
  • SetRetryAfter() - Sets Retry-After header value
  • SetDelayMs() - Adds response delay (verified 100ms delay took ~100.5ms)
  • SetCustomHandler() - Overrides default scenario behavior
  • ResetCounters() - Resets counters to 0

Proxy Integration Tests (TestMockUpstream_ProxyIntegration)

All 9 integration scenarios verified:

  • Success through proxy (1 upstream call, fast completion)
  • 429 with retry-after through proxy (2 calls, ~2s delay with Retry-After: 1)
  • Empty JSON body triggers retry (2 calls, returns 502)
  • Invalid JSON body triggers retry (2 calls, returns 502)
  • Empty streaming triggers retry (2 calls, returns 502)
  • 422 no retry through proxy (1 call, passes through 422)
  • 500 no retry through proxy (1 call, passes through 500)
  • 404 no retry through proxy (1 call, passes through 404)

Test Execution

All tests passed successfully:

go test -v -run TestMockUpstream ./proxy/
PASS: TestMockUpstream_AllScenarios (0.00s)
PASS: TestMockUpstream_Methods (0.10s)
PASS: TestMockUpstream_ProxyIntegration (5.01s)

Coverage

The test suite provides comprehensive coverage of:

  • Direct mock server behavior (via HTTP requests to mock server)
  • Mock server configuration methods
  • Integration with proxy handler and retry logic
  • Prometheus metrics verification for error scenarios

Files

  • Implementation: /home/coding/zai-proxy/proxy/helpers_test.go (lines 63-246)
  • Tests: /home/coding/zai-proxy/proxy/mockupstream_test.go