Beispiel #1
0
 def test_rate_limiter_first_time(self, sleep):
     # The first time we see a URL, there is no rate limiting.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data', 'twitter-home.dat')
     message.new('GET', 'http://example.com/')
     limiter.wait(message)
     sleep.assert_called_with(0)
Beispiel #2
0
 def test_rate_limiter_second_time_with_query_on_request(self, time, sleep):
     # A query parameter on the original request is ignored.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 1,
                               })
     limiter.update(message.new('GET', 'http://example.com/foo?baz=7'))
     limiter.wait(message)
     sleep.assert_called_with(300)
Beispiel #3
0
 def test_rate_limiter_second_time(self, time, sleep):
     # The second time we see the URL, we get rate limited.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 1,
                               })
     limiter.update(message.new('GET', 'http://example.com'))
     limiter.wait(message)
     sleep.assert_called_with(300)
Beispiel #4
0
 def test_rate_limiter_unlimited(self, time, sleep):
     # With more than 5 calls remaining in this window, we don't rate
     # limit, even if we've already seen this url.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 10,
                               })
     limiter.update(message.new('GET', 'http://example.com/omega'))
     limiter.wait(message)
     sleep.assert_called_with(0)
Beispiel #5
0
 def test_rate_limiter_medium(self, time, sleep):
     # With a few calls remaining this window, we time slice the remaining
     # time evenly between those remaining calls.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 3,
                               })
     limiter.update(message.new('GET', 'http://example.com/beta'))
     limiter.wait(message)
     sleep.assert_called_with(100.0)
Beispiel #6
0
 def test_rate_limiter_until_end_of_window(self, time, sleep):
     # With no remaining calls left this window, we wait until the end of
     # the window.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 0,
                               })
     limiter.update(message.new('GET', 'http://example.com/alpha'))
     limiter.wait(message)
     sleep.assert_called_with(300)
Beispiel #7
0
 def test_rate_limiter_maximum(self, time, sleep):
     # With one remaining call this window, we get rate limited to the
     # full amount of the remaining window.
     limiter = RateLimiter()
     message = FakeSoupMessage('friends.tests.data',
                               'twitter-home.dat',
                               headers={
                                   'X-Rate-Limit-Reset': 1349382153 + 300,
                                   'X-Rate-Limit-Remaining': 1,
                               })
     limiter.update(message.new('GET', 'http://example.com/alpha'))
     limiter.wait(message)
     sleep.assert_called_with(300)