1+ """Tests for rate limiting functionality."""
2+
3+ import time
4+ import pytest
5+ from gradient ._utils import RateLimiter
6+
7+
8+ class TestRateLimiter :
9+ """Test rate limiting functionality."""
10+
11+ def test_rate_limiter_basic (self ):
12+ """Test basic rate limiter operations."""
13+ limiter = RateLimiter (requests_per_minute = 10 )
14+
15+ # Should allow initial requests
16+ assert limiter .acquire () is True
17+ assert limiter .acquire () is True
18+
19+ # Should deny when tokens exhausted
20+ limiter .tokens = 0 # Force exhaustion
21+ assert limiter .acquire () is False
22+
23+ def test_rate_limiter_wait_time (self ):
24+ """Test wait time calculation."""
25+ limiter = RateLimiter (requests_per_minute = 60 ) # 1 request per second
26+
27+ # Exhaust tokens
28+ limiter .tokens = 0
29+
30+ # Should calculate correct wait time
31+ wait_time = limiter .wait_time ()
32+ assert wait_time > 0
33+ assert wait_time <= 1.0 # Should not exceed 1 second
34+
35+ def test_rate_limiter_refill (self ):
36+ """Test token refill over time."""
37+ limiter = RateLimiter (requests_per_minute = 60 ) # 1 token per second
38+
39+ # Exhaust tokens
40+ limiter .tokens = 0
41+ start_time = limiter ._now ()
42+
43+ # Wait for refill
44+ time .sleep (0.1 )
45+
46+ # Should have refilled some tokens
47+ limiter ._refill ()
48+ assert limiter .tokens > 0
49+
50+ def test_rate_limiter_custom_rate (self ):
51+ """Test custom rate limits."""
52+ limiter = RateLimiter (requests_per_minute = 120 ) # 2 requests per second
53+
54+ # Should have double the tokens of default
55+ assert limiter .requests_per_minute == 120
56+ assert limiter .refill_rate == 2.0
0 commit comments