test_rate_limit.py 980 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. from core_shared.rate_limit import InMemoryFixedWindowRateLimiter
  2. def test_in_memory_fixed_window_rate_limiter_blocks_after_limit() -> None:
  3. limiter = InMemoryFixedWindowRateLimiter()
  4. first = limiter.check(
  5. key="tenant:t1",
  6. limit=2,
  7. window_seconds=60,
  8. now_epoch_seconds=120,
  9. )
  10. second = limiter.check(
  11. key="tenant:t1",
  12. limit=2,
  13. window_seconds=60,
  14. now_epoch_seconds=121,
  15. )
  16. third = limiter.check(
  17. key="tenant:t1",
  18. limit=2,
  19. window_seconds=60,
  20. now_epoch_seconds=122,
  21. )
  22. next_window = limiter.check(
  23. key="tenant:t1",
  24. limit=2,
  25. window_seconds=60,
  26. now_epoch_seconds=180,
  27. )
  28. assert first.allowed is True
  29. assert first.remaining == 1
  30. assert second.allowed is True
  31. assert second.remaining == 0
  32. assert third.allowed is False
  33. assert third.reset_epoch_seconds == 180
  34. assert next_window.allowed is True