def test_fixed_window_with_elastic_expiry_memcache(self):
     storage = MemcachedStorage('localhost', 11211)
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = PER_SECOND(10, 2)
     self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
 def test_fixed_window_with_elastic_expiry_redis(self):
     storage = RedisStorage('redis://localhost:6379')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = PER_SECOND(10, 2)
     self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
Example #3
0
 def test_fixed_window_with_elastic_expiry_redis(self):
     storage = RedisStorage('redis://localhost:6379')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = PER_SECOND(10, 2)
     self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
Example #4
0
 def test_fixed_window_with_elastic_expiry_memcache(self):
     storage = MemcachedStorage('memcached://localhost:11211')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = PER_SECOND(10, 2)
     self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
     time.sleep(1)
     self.assertFalse(limiter.hit(limit))
 def test_fixed_window_with_elastic_expiry_in_memory(self):
     storage = MemoryStorage()
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     with hiro.Timeline().freeze() as timeline:
         limit = PER_SECOND(10, 2)
         self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
         timeline.forward(1)
         self.assertFalse(limiter.hit(limit))
         timeline.forward(1)
         self.assertFalse(limiter.hit(limit))
Example #6
0
 def test_fixed_window_with_elastic_expiry_memcache_concurrency(self):
     storage = MemcachedStorage('memcached://localhost:11211')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     start = int(time.time())
     limit = PER_SECOND(100, 2)
     def _c():
         for i in range(0,50):
             limiter.hit(limit)
     t1, t2 = threading.Thread(target=_c), threading.Thread(target=_c)
     t1.start(), t2.start()
     [t1.join(), t2.join()]
     self.assertEqual(limiter.get_window_stats(limit)[1], 0)
     self.assertTrue(start + 2 <= limiter.get_window_stats(limit)[0] <= start + 3)
     self.assertEqual(storage.get(limit.key_for()), 100)
Example #7
0
 def test_fixed_window_with_elastic_expiry_in_memory(self):
     storage = MemoryStorage()
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     with hiro.Timeline().freeze() as timeline:
         start = int(time.time())
         limit = PER_SECOND(10, 2)
         self.assertTrue(all([limiter.hit(limit) for _ in range(0,10)]))
         timeline.forward(1)
         self.assertFalse(limiter.hit(limit))
         self.assertEqual(limiter.get_window_stats(limit)[1], 0)
         # three extensions to the expiry
         self.assertEqual(limiter.get_window_stats(limit)[0], start + 3)
         timeline.forward(1)
         self.assertFalse(limiter.hit(limit))
         timeline.forward(3)
         start = int(time.time())
         self.assertTrue(limiter.hit(limit))
         self.assertEqual(limiter.get_window_stats(limit)[1], 9)
         self.assertEqual(limiter.get_window_stats(limit)[0], start + 2)