account_traffic_regression_test.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package service
  2. import (
  3. "context"
  4. "net/http"
  5. "testing"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestAccountTrafficTerminalFailureClassification(t *testing.T) {
  9. for _, tc := range []struct {
  10. payload string
  11. status int
  12. }{
  13. {`{"type":"response.done","response":{"status":"failed","error":{"code":"rate_limit_exceeded"}}}`, 429},
  14. {`{"type":"response.done","response":{"status":"failed","status_details":{"error":{"type":"server_error"}}}}`, 503},
  15. {`{"type":"response.failed","response":{"error":{"status_code":502}}}`, 502},
  16. {`{"type":"response.done","response":{"status":"cancelled"}}`, 499},
  17. {`{"type":"response.done","response":{"status":"completed"}}`, 200},
  18. {`{"type":"response.failed","response":{"error":{"code":"invalid_request"}}}`, 499},
  19. } {
  20. status, terminal := accountTrafficEventStatus([]byte(tc.payload))
  21. require.True(t, terminal)
  22. require.Equal(t, tc.status, status, tc.payload)
  23. body := &accountTrafficBody{}
  24. body.inspect([]byte("data: " + tc.payload + "\n\ndata: [DONE]\n\n"))
  25. require.EqualValues(t, tc.status, body.terminalStatus.Load(), "SSE must preserve the same terminal classification")
  26. }
  27. }
  28. type staleObservationCache struct{ AccountTrafficCache }
  29. func (staleObservationCache) Acquire(context.Context, AccountTrafficPlan, string) (AccountTrafficAdmission, error) {
  30. return AccountTrafficAdmission{Allowed: true, SkipObservation: true}, nil
  31. }
  32. func TestAccountTrafficConfirmedObservationChangeDoesNotBlockOrCreateLease(t *testing.T) {
  33. p := DefaultAccountTrafficPolicy()
  34. p.AdaptiveEnabled = true
  35. ctx, permit, err := NewAccountTrafficService(staleObservationCache{}).Begin(context.Background(), AccountTrafficPlan{AccountID: 42, Policy: p})
  36. require.NoError(t, err)
  37. require.Nil(t, permit)
  38. require.NoError(t, ctx.Err())
  39. }
  40. func TestAccountTrafficGrokRealtimeRejectsUnsupportedHardControlsBeforeDial(t *testing.T) {
  41. for _, controls := range []map[string]any{{"strict_rpm_enabled": true}, {"adaptive_enabled": true, "adaptive_mode": "automatic"}} {
  42. a := &Account{ID: 42, Platform: PlatformGrok, Type: AccountTypeAPIKey, Concurrency: 8, Extra: map[string]any{AccountTrafficPolicyKey: controls}}
  43. gateway := &OpenAIGatewayService{}
  44. _, err := gateway.OpenGrokRealtime(context.Background(), a, "unused-test-token", "unused-model")
  45. var local *UpstreamFailoverError
  46. require.ErrorAs(t, err, &local)
  47. require.Equal(t, http.StatusBadRequest, local.StatusCode)
  48. require.False(t, local.ShouldReportAccountScheduleFailure())
  49. require.Contains(t, local.ClientMessage, "逐轮硬限制")
  50. }
  51. a := &Account{ID: 42, Platform: PlatformGrok, Concurrency: 8, Extra: map[string]any{AccountTrafficPolicyKey: map[string]any{"adaptive_enabled": true}}}
  52. require.NoError(t, validateGrokRealtimeTrafficPolicy(a))
  53. }