예제 #1
0
 def test_fixed_window_with_elastic_expiry_redis(self):
     storage = RedisStorage('redis://localhost:6379')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
예제 #2
0
 def test_fixed_window_with_elastic_expiry_memcache(self):
     storage = MemcachedStorage('memcached://localhost:11211')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
예제 #3
0
 def test_fixed_window_with_elastic_expiry_memcache(self):
     storage = MemcachedStorage('memcached://localhost:11211')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
예제 #4
0
 def test_fixed_window_with_elastic_expiry_redis(self):
     storage = RedisStorage('redis://localhost:6379')
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
예제 #5
0
 def test_fixed_window_with_elastic_expiry_redis_sentinel(self):
     storage = RedisSentinelStorage("redis+sentinel://localhost:26379",
                                    service_name="localhost-redis-sentinel")
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
     self.assertEqual(limiter.get_window_stats(limit)[1], 0)
예제 #6
0
 def test_fixed_window_with_elastic_expiry_redis_sentinel(self):
     storage = RedisSentinelStorage(
         "redis+sentinel://localhost:26379",
         service_name="localhost-redis-sentinel"
     )
     limiter = FixedWindowElasticExpiryRateLimiter(storage)
     limit = RateLimitItemPerSecond(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))
     self.assertEqual(limiter.get_window_stats(limit)[1], 0)
예제 #7
0
    def test_fixed_window_with_elastic_expiry(self):
        storage = MemcachedStorage("memcached://localhost:22122")
        limiter = FixedWindowElasticExpiryRateLimiter(storage)
        per_sec = RateLimitItemPerSecond(2, 2)

        self.assertTrue(limiter.hit(per_sec))
        time.sleep(1)
        self.assertTrue(limiter.hit(per_sec))
        self.assertFalse(limiter.test(per_sec))
        time.sleep(1)
        self.assertFalse(limiter.test(per_sec))
        time.sleep(1)
        self.assertTrue(limiter.test(per_sec))
예제 #8
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 = RateLimitItemPerSecond(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)
예제 #9
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 = RateLimitItemPerSecond(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)
예제 #10
0
def test():
    storage = RedisStorage("redis://127.0.0.1/3")
    strategy = FixedWindowElasticExpiryRateLimiter(storage)
    # one_per_second = RateLimitItemPerSecond(20, 1)
    one_per_min = RateLimitItemPerMinute(100, 1)
    r = strategy.hit(one_per_min, "k", "v")
    if r == True:
        print(True)
    else:
        print("请求满了")