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