disagreement/tests/test_rate_limiter.py
2025-06-09 22:25:14 -06:00

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