looking at rate-limiting implementations
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import pytest
|
||||
|
||||
from fixed_window import FixedWindowLimiter
|
||||
|
||||
def test_limit_respected():
|
||||
limiter = FixedWindowLimiter(10, 10)
|
||||
try:
|
||||
for i in range(9):
|
||||
with limiter:
|
||||
pass
|
||||
except RuntimeError as e:
|
||||
assert False, f"Limiter raised an exception -> {e}"
|
||||
|
||||
def test_limit_enforced():
|
||||
limiter = FixedWindowLimiter(10, 10)
|
||||
with pytest.raises(RuntimeError) as e:
|
||||
for i in range(11):
|
||||
with limiter:
|
||||
pass
|
||||
assert "Rate exceeded" in str(e.value)
|
||||
@@ -0,0 +1,25 @@
|
||||
import pytest
|
||||
from time import sleep
|
||||
from token_bucket import TokenBucketLimiter, RateLimitExceeded
|
||||
|
||||
def test_limit_respected() -> None:
|
||||
limiter = TokenBucketLimiter(10, 10)
|
||||
|
||||
try:
|
||||
for i in range(30):
|
||||
with limiter:
|
||||
sleep(0.1)
|
||||
except RateLimitExceeded:
|
||||
assert False, "Rate limit exceeded!"
|
||||
|
||||
|
||||
def test_limit_exceeded() -> None:
|
||||
limiter = TokenBucketLimiter(10, 10)
|
||||
|
||||
with pytest.raises(RateLimitExceeded) as e:
|
||||
for i in range(20):
|
||||
with limiter:
|
||||
continue
|
||||
|
||||
assert "Rate exceeded" in str(e.value)
|
||||
|
||||
Reference in New Issue
Block a user