File size: 714 Bytes
3530326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from __future__ import annotations

from rate_limit import RateLimiter


def test_limits_each_key_within_window() -> None:
    limiter = RateLimiter(limit=2, window_seconds=10)

    assert limiter.take("client", now=0) == (True, 0)
    assert limiter.take("client", now=1) == (True, 0)
    allowed, retry_after = limiter.take("client", now=2)

    assert not allowed
    assert retry_after == 8
    assert limiter.take("other-client", now=2) == (True, 0)


def test_resets_after_window() -> None:
    limiter = RateLimiter(limit=1, window_seconds=10)

    assert limiter.take("client", now=0) == (True, 0)
    assert limiter.take("client", now=5)[0] is False
    assert limiter.take("client", now=10) == (True, 0)