account_traffic_regression_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package repository
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestAccountTrafficLoweredRPMWaitsUntilActualCapacity(t *testing.T) {
  9. server, cache, plan := trafficFixture(t)
  10. ctx := context.Background()
  11. start := time.Date(2026, 9, 14, 12, 0, 0, 0, time.UTC)
  12. for i := 0; i < 3; i++ {
  13. server.SetTime(start.Add(time.Duration(i) * 10 * time.Second))
  14. a, err := cache.Acquire(ctx, plan, string(rune('a'+i)))
  15. require.NoError(t, err)
  16. require.True(t, a.Allowed)
  17. }
  18. server.SetTime(start.Add(30 * time.Second))
  19. plan.Revision = 2
  20. plan.Signature = "lowered"
  21. plan.Policy.RPM = 1
  22. plan.Policy.Burst = 1
  23. require.NoError(t, cache.Sync(ctx, plan))
  24. denied, err := cache.Acquire(ctx, plan, "blocked")
  25. require.NoError(t, err)
  26. require.False(t, denied.Allowed)
  27. require.Equal(t, 50*time.Second, denied.RetryAfter)
  28. server.SetTime(start.Add(80 * time.Second))
  29. admitted, err := cache.Acquire(ctx, plan, "ready")
  30. require.NoError(t, err)
  31. require.True(t, admitted.Allowed)
  32. }
  33. func TestAccountTrafficStaleObservationCannotBypassNewHardPolicy(t *testing.T) {
  34. _, cache, old := trafficFixture(t)
  35. ctx := context.Background()
  36. old.Policy.StrictRPMEnabled = false
  37. old.Policy.AdaptiveEnabled = true
  38. next := old
  39. next.Revision = 2
  40. next.Signature = "new-observe-threshold"
  41. next.Policy.FailureThreshold = 5
  42. require.NoError(t, cache.Sync(ctx, next))
  43. result, err := cache.Acquire(ctx, old, "old-turn")
  44. require.NoError(t, err)
  45. require.True(t, result.Allowed)
  46. require.True(t, result.SkipObservation)
  47. state, err := cache.Snapshot(ctx, next)
  48. require.NoError(t, err)
  49. require.Zero(t, state.Accepted)
  50. require.Zero(t, state.InFlight)
  51. next.Revision = 3
  52. next.Signature = "strict-enabled"
  53. next.Policy.StrictRPMEnabled = true
  54. require.NoError(t, cache.Sync(ctx, next))
  55. result, err = cache.Acquire(ctx, old, "old-turn-after-enable")
  56. require.NoError(t, err)
  57. require.False(t, result.Allowed)
  58. require.False(t, result.SkipObservation)
  59. }