Ejemplo n.º 1
0
def test_global_1_rps():
    class TestTimer(MockTimer):

        def get_times(self) -> []:
            return [0, 500, 1000, 1001, 1500, 2000, 2001]

    rate_limiter = RateLimiter(TestTimer(), bucket_ms_interval=1)
    rate_limiter.configure_global_limit(rps=1)

    assert rate_limiter.process_request(1)  # for 0 stamp
    assert not rate_limiter.process_request(2)  # 500
    assert rate_limiter.process_request(3)  # 1000 this will pass because exactly 1 sec passed since last request
    assert not rate_limiter.process_request(4)  # 1001
    assert not rate_limiter.process_request(5)  # 1500
    assert rate_limiter.process_request(6)  # 2000 this will pass because exactly 1 sec passed since last request
    assert not rate_limiter.process_request(7)  # 2001
Ejemplo n.º 2
0
def test_user_contributes_to_global_limit():
    class TestTimer(MockTimer):

        def get_times(self) -> []:
            return [0, 500, 1000, 1001, 1500, 2000, 2001]

    rate_limiter = RateLimiter(TestTimer(), bucket_ms_interval=1)
    rate_limiter.configure_limit(user_id=1, rps=1)
    rate_limiter.configure_global_limit(rps=1)

    # user 1 makes 1 request for in 1 second interval and contribute to global limit, second user can't execute during
    # the same interval
    assert rate_limiter.process_request(1)  # for 0 stamp user 1
    assert not rate_limiter.process_request(2)  # 500 since user 1 already made a request
    assert rate_limiter.process_request(1)  # 1000 this will pass because exactly 1 sec passed since last request
    assert not rate_limiter.process_request(2)  # 1001 since user 1 just made a request
    assert not rate_limiter.process_request(1)  # 1500
    assert rate_limiter.process_request(1)  # 2000 this will pass because exactly 1 sec passed since last request
    assert not rate_limiter.process_request(2)  # 2001