Esempio n. 1
0
 def test_moving_window_redis(self):
     storage = RedisStorage("redis://localhost:6379")
     limiter = MovingWindowRateLimiter(storage)
     limit = PER_SECOND(10, 2)
     for i in range(0,10):
         self.assertTrue(limiter.hit(limit))
         self.assertEqual(limiter.get_window_stats(limit)[1], 10 - (i + 1))
         time.sleep(2*0.095)
     self.assertFalse(limiter.hit(limit))
     time.sleep(0.4)
     self.assertTrue(limiter.hit(limit))
     self.assertTrue(limiter.hit(limit))
     self.assertEqual(limiter.get_window_stats(limit)[1], 0)
Esempio n. 2
0
 def test_moving_window_in_memory(self):
     storage = MemoryStorage()
     limiter = MovingWindowRateLimiter(storage)
     with hiro.Timeline().freeze() as timeline:
         limit = PER_MINUTE(10)
         for i in range(0,5):
             self.assertTrue(limiter.hit(limit))
             self.assertTrue(limiter.hit(limit))
             self.assertEqual(
                 limiter.get_window_stats(limit)[1],
                 10 - ((i + 1) * 2)
             )
             timeline.forward(10)
         self.assertEqual(limiter.get_window_stats(limit)[1], 0)
         self.assertFalse(limiter.hit(limit))
         timeline.forward(20)
         self.assertEqual(limiter.get_window_stats(limit)[1], 2)
         self.assertEqual(limiter.get_window_stats(limit)[0], int(time.time() + 30))
         timeline.forward(31)
         self.assertEqual(limiter.get_window_stats(limit)[1], 10)