test_rate_limit.py 944 B

12345678910111213141516171819202122232425262728293031323334
  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="global",
  6. limit=2,
  7. window_seconds=60,
  8. now_epoch_seconds=120)
  9. second = limiter.check(
  10. key="global",
  11. limit=2,
  12. window_seconds=60,
  13. now_epoch_seconds=121)
  14. third = limiter.check(
  15. key="global",
  16. limit=2,
  17. window_seconds=60,
  18. now_epoch_seconds=122)
  19. next_window = limiter.check(
  20. key="global",
  21. limit=2,
  22. window_seconds=60,
  23. now_epoch_seconds=180)
  24. assert first.allowed is True
  25. assert first.remaining == 1
  26. assert second.allowed is True
  27. assert second.remaining == 0
  28. assert third.allowed is False
  29. assert third.reset_epoch_seconds == 180
  30. assert next_window.allowed is True