From 0e23b9bc2f35fdf4a083bddad24fae2450e7bcb5 Mon Sep 17 00:00:00 2001 From: Cristian Ruiz Bonilla Date: Wed, 1 Dec 2021 20:12:11 +0100 Subject: [PATCH] Throw an error when replenishRate > burstCapacity Fixes gh-2453 --- .../cloud/gateway/filter/ratelimit/RedisRateLimiter.java | 3 +++ .../filter/ratelimit/RedisRateLimiterConfigTests.java | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java index 1e93a8d4..d1edc66c 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java @@ -40,6 +40,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.core.style.ToStringCreator; import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.util.Assert; import org.springframework.validation.annotation.Validated; /** @@ -335,6 +336,8 @@ public class RedisRateLimiter extends AbstractRateLimiter= this.replenishRate, "BurstCapacity(" + burstCapacity + + ") must be greater than or equal than replenishRate(" + this.replenishRate + ")"); this.burstCapacity = burstCapacity; return this; } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java index 7fe96f74..07f859a2 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.gateway.filter.ratelimit; +import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,6 +56,11 @@ public class RedisRateLimiterConfigTests { routeLocator.getRoutes().collectList().block(); } + @Test + public void shouldThrowAnErrorWhenReplenishRateIsHigherThanBurstCapacity() { + Assertions.assertThatThrownBy(() -> new RedisRateLimiter(10, 5)).isInstanceOf(IllegalArgumentException.class); + } + @Test public void redisRateConfiguredFromEnvironment() { assertFilter("redis_rate_limiter_config_test", 10, 20, 1, false);