예제 #1
0
 def test_in_memory_expiry(self):
     with hiro.Timeline().freeze() as timeline:
         storage = MemoryStorage()
         limiter = FixedWindowRateLimiter(storage)
         per_min = RateLimitItemPerMinute(10)
         for i in range(0,10):
             self.assertTrue(limiter.hit(per_min))
         timeline.forward(60)
         # touch another key and yield
         limiter.hit(RateLimitItemPerSecond(1))
         time.sleep(0.1)
         self.assertTrue(per_min.key_for() not in storage.storage)
예제 #2
0
 def test_in_memory_expiry(self):
     with hiro.Timeline().freeze() as timeline:
         storage = MemoryStorage()
         limiter = FixedWindowRateLimiter(storage)
         per_min = RateLimitItemPerMinute(10)
         for i in range(0, 10):
             self.assertTrue(limiter.hit(per_min))
         timeline.forward(60)
         # touch another key and yield
         limiter.hit(RateLimitItemPerSecond(1))
         time.sleep(0.1)
         self.assertTrue(per_min.key_for() not in storage.storage)
예제 #3
0
 def test_in_memory_expiry_moving_window(self):
     with hiro.Timeline().freeze() as timeline:
         storage = MemoryStorage()
         limiter = MovingWindowRateLimiter(storage)
         per_min = RateLimitItemPerMinute(10)
         per_sec = RateLimitItemPerSecond(1)
         for i in range(0,2):
             for i in range(0,10):
                 self.assertTrue(limiter.hit(per_min))
             timeline.forward(60)
             self.assertTrue(limiter.hit(per_sec))
             time.sleep(1)
             self.assertEqual([], storage.events[per_min.key_for()])
예제 #4
0
 def test_in_memory_expiry_moving_window(self):
     with hiro.Timeline().freeze() as timeline:
         storage = MemoryStorage()
         limiter = MovingWindowRateLimiter(storage)
         per_min = RateLimitItemPerMinute(10)
         per_sec = RateLimitItemPerSecond(1)
         for i in range(0, 2):
             for i in range(0, 10):
                 self.assertTrue(limiter.hit(per_min))
             timeline.forward(60)
             self.assertTrue(limiter.hit(per_sec))
             time.sleep(1)
             self.assertEqual([], storage.events[per_min.key_for()])
예제 #5
0
 def test_redis_cluster_reset(self):
     storage = RedisClusterStorage("redis+cluster://localhost:7000")
     limiter = FixedWindowRateLimiter(storage)
     for i in range(0, 10000):
         rate = RateLimitItemPerMinute(i)
         limiter.hit(rate)
     self.assertEqual(storage.reset(), 10000)
예제 #6
0
파일: test_storage.py 프로젝트: er0k/limits
 def test_moving_window_clear(self):
     limiter = MovingWindowRateLimiter(self.storage)
     per_min = RateLimitItemPerMinute(1)
     limiter.hit(per_min)
     self.assertFalse(limiter.hit(per_min))
     limiter.clear(per_min)
     self.assertTrue(limiter.hit(per_min))
예제 #7
0
 def test_memcached_clear(self):
     limiter = FixedWindowRateLimiter(self.storage)
     per_min = RateLimitItemPerMinute(1)
     limiter.hit(per_min)
     self.assertFalse(limiter.hit(per_min))
     limiter.clear(per_min)
     self.assertTrue(limiter.hit(per_min))
예제 #8
0
 def test_redis_sentinel_reset(self):
     storage = RedisSentinelStorage("redis+sentinel://localhost:26379",
                                    service_name="localhost-redis-sentinel")
     limiter = FixedWindowRateLimiter(storage)
     for i in range(0, 10000):
         rate = RateLimitItemPerMinute(i)
         limiter.hit(rate)
     self.assertEqual(storage.reset(), 10000)
예제 #9
0
파일: test_storage.py 프로젝트: er0k/limits
 def test_clear(self):
     storage = MemcachedStorage("memcached://localhost:22122")
     limiter = FixedWindowRateLimiter(storage)
     per_min = RateLimitItemPerMinute(1)
     limiter.hit(per_min)
     self.assertFalse(limiter.hit(per_min))
     limiter.clear(per_min)
     self.assertTrue(limiter.hit(per_min))
예제 #10
0
 def test_redis_cluster_clear(self):
     storage = RedisClusterStorage("redis+cluster://localhost:7000")
     limiter = MovingWindowRateLimiter(storage)
     per_min = RateLimitItemPerMinute(1)
     limiter.hit(per_min)
     self.assertFalse(limiter.hit(per_min))
     limiter.clear(per_min)
     self.assertTrue(limiter.hit(per_min))
예제 #11
0
 def test_in_memory_fixed_window_clear(self):
     storage = MemoryStorage()
     limiter = FixedWindowRateLimiter(storage)
     per_min = RateLimitItemPerMinute(1)
     limiter.hit(per_min)
     self.assertFalse(limiter.hit(per_min))
     limiter.clear(per_min)
     self.assertTrue(limiter.hit(per_min))
예제 #12
0
파일: test_storage.py 프로젝트: er0k/limits
 def test_in_memory(self):
     with hiro.Timeline().freeze() as timeline:
         limiter = FixedWindowRateLimiter(self.storage)
         per_min = RateLimitItemPerMinute(10)
         for i in range(0, 10):
             self.assertTrue(limiter.hit(per_min))
         self.assertFalse(limiter.hit(per_min))
         timeline.forward(61)
         self.assertTrue(limiter.hit(per_min))
예제 #13
0
파일: test_storage.py 프로젝트: er0k/limits
 def test_reset(self):
     limiter = FixedWindowRateLimiter(self.storage)
     per_min = RateLimitItemPerMinute(10)
     for i in range(0, 10):
         self.assertTrue(limiter.hit(per_min))
     self.assertFalse(limiter.hit(per_min))
     self.storage.reset()
     for i in range(0, 10):
         self.assertTrue(limiter.hit(per_min))
     self.assertFalse(limiter.hit(per_min))
예제 #14
0
 def test_moving_window_in_memory(self):
     storage = MemoryStorage()
     limiter = MovingWindowRateLimiter(storage)
     with hiro.Timeline().freeze() as timeline:
         limit = RateLimitItemPerMinute(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)
예제 #15
0
파일: test_storage.py 프로젝트: er0k/limits
 def test_reset(self):
     limiter = FixedWindowRateLimiter(self.storage)
     for i in range(0, 10):
         rate = RateLimitItemPerMinute(i)
         limiter.hit(rate)
     self.assertEqual(self.storage.reset(), 10)