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 09579103..ab34615f 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 @@ -38,6 +38,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; /** @@ -332,6 +333,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 2e4d1fce..fcdf3ec3 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 @@ -18,6 +18,7 @@ package org.springframework.cloud.gateway.filter.ratelimit; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.assertj.core.api.Assertions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; @@ -52,6 +53,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);