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
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