31 lines
794 B
Python
31 lines
794 B
Python
import asyncio
|
|
import time
|
|
|
|
import pytest
|
|
|
|
from disagreement.rate_limiter import RateLimiter
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_route_rate_limit_sleep():
|
|
rl = RateLimiter()
|
|
task = asyncio.create_task(rl.handle_rate_limit("GET:/a", 0.05, False))
|
|
await asyncio.sleep(0) # ensure task starts
|
|
start = time.monotonic()
|
|
await rl.acquire("GET:/a")
|
|
duration = time.monotonic() - start
|
|
await task
|
|
assert duration >= 0.05
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_global_rate_limit_blocks_all_routes():
|
|
rl = RateLimiter()
|
|
task = asyncio.create_task(rl.handle_rate_limit("GET:/a", 0.05, True))
|
|
await asyncio.sleep(0)
|
|
start = time.monotonic()
|
|
await rl.acquire("POST:/b")
|
|
duration = time.monotonic() - start
|
|
await task
|
|
assert duration >= 0.05
|