def test_rate_limiting_custom_backend(self): """Test rate limiter with a custom backend.""" # Intentionally set a bad host self.app.config.setdefault('RATELIMITER_BACKEND_OPTIONS', {'host': 'invalid-host'}) # Generate a good Redis client and attached backend redis = StrictRedis(host=environ.get('REDIS_HOST', 'localhost')) SimpleRedisBackend = RateLimiter.get_backend('SimpleRedisBackend') redis_backend = SimpleRedisBackend(cache=redis) RateLimiter(self.app, backend=redis_backend) @self.app.route('/custom-backend-limit') @ratelimit(1, 10) def test_custom_backend_limit(): return 'custom-backend-limit' with self.app.test_client() as c: res = c.get('/custom-backend-limit') self.assertEqual(request.endpoint, 'test_custom_backend_limit') self.assertEqual(g._rate_limit_info.remaining, 0) self.assertEqual(g._rate_limit_info.limit_exceeded, False) self.assertEqual(res.status_code, 200) res = c.get('/custom-backend-limit') self.assertEqual(g._rate_limit_info.remaining, 0) self.assertEqual(g._rate_limit_info.limit_exceeded, True) self.assertEqual(res.status_code, 429)
def test_get_incorrect_backend(self): """Test get_backend function with incorrect input.""" self.assertEqual(RateLimiter.get_backend('CrazyBackendX').__name__, 'SimpleRedisBackend')
def test_get_correct_backend(self): """Test get_backend function with correct input.""" backend = RateLimiter.get_backend('SimpleRedisBackend') self.assertEqual(backend.__name__, 'SimpleRedisBackend')