diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java index 47037e8c..e8544d2b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.List; import java.util.function.Predicate; +import jakarta.validation.constraints.NotNull; import org.springframework.web.server.ServerWebExchange; /** @@ -65,6 +66,7 @@ public class BeforeRoutePredicateFactory extends AbstractRoutePredicateFactory patterns = new ArrayList<>(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java index 009b7680..c61e0ad1 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.function.Predicate; import org.springframework.http.HttpMethod; -import org.springframework.validation.annotation.Validated; import org.springframework.web.server.ServerWebExchange; import static java.util.Arrays.stream; @@ -67,7 +66,6 @@ public class MethodRoutePredicateFactory extends AbstractRoutePredicateFactory patterns = new ArrayList<>(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java index 2dd37fbd..1a7fd9b1 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java @@ -23,7 +23,6 @@ import java.util.function.Predicate; import jakarta.validation.constraints.NotEmpty; import org.springframework.util.StringUtils; -import org.springframework.validation.annotation.Validated; import org.springframework.web.server.ServerWebExchange; /** @@ -84,7 +83,6 @@ public class QueryRoutePredicateFactory extends AbstractRoutePredicateFactory> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(1); + } + } + } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java index 585ef49d..9ffb5b3d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java @@ -18,10 +18,17 @@ package org.springframework.cloud.gateway.handler.predicate; import java.time.ZonedDateTime; import java.util.HashMap; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; +import org.springframework.cloud.gateway.handler.predicate.BeforeRoutePredicateFactory.Config; + import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.cloud.gateway.handler.predicate.BeforeRoutePredicateFactory.DATETIME_KEY; import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateFactoryTests.bindConfig; @@ -85,17 +92,42 @@ public class BeforeRoutePredicateFactoryTests { BeforeRoutePredicateFactory factory = new BeforeRoutePredicateFactory(); - BeforeRoutePredicateFactory.Config config = bindConfig(map, factory); + Config config = bindConfig(map, factory); return factory.apply(config).test(getExchange()); } @Test public void toStringFormat() { - BeforeRoutePredicateFactory.Config config = new BeforeRoutePredicateFactory.Config(); + Config config = new Config(); config.setDatetime(ZonedDateTime.now()); Predicate predicate = new BeforeRoutePredicateFactory().apply(config); assertThat(predicate.toString()).contains("Before: " + config.getDatetime()); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setDatetime(ZonedDateTime.now()); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(1); + } + } + } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java index 18913c13..c6cbbd1d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java @@ -19,11 +19,17 @@ package org.springframework.cloud.gateway.handler.predicate; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; import org.springframework.boot.convert.ApplicationConversionService; +import org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateFactory.Config; import org.springframework.cloud.gateway.support.ConfigurationService; import org.springframework.cloud.gateway.support.StringToZonedDateTimeConverter; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; @@ -152,14 +158,14 @@ public class BetweenRoutePredicateFactoryTests { BetweenRoutePredicateFactory factory = new BetweenRoutePredicateFactory(); - BetweenRoutePredicateFactory.Config config = bindConfig(map, factory); + Config config = bindConfig(map, factory); return factory.apply(config).test(getExchange()); } @Test public void toStringFormat() { - BetweenRoutePredicateFactory.Config config = new BetweenRoutePredicateFactory.Config(); + Config config = new Config(); config.setDatetime1(ZonedDateTime.now()); config.setDatetime2(ZonedDateTime.now().plusHours(1)); Predicate predicate = new BetweenRoutePredicateFactory().apply(config); @@ -167,4 +173,30 @@ public class BetweenRoutePredicateFactoryTests { .contains("Between: " + config.getDatetime1() + " and " + config.getDatetime2()); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setDatetime1(ZonedDateTime.now()); + config.setDatetime2(ZonedDateTime.now()); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(2); + } + } + } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java index 07d79a5e..92f70bcd 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java @@ -16,8 +16,13 @@ package org.springframework.cloud.gateway.handler.predicate; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; import org.springframework.cloud.gateway.handler.predicate.CookieRoutePredicateFactory.Config; @@ -64,4 +69,30 @@ public class CookieRoutePredicateFactoryTests extends BaseWebClientTests { assertThat(predicate.toString()).contains("Cookie: name=mycookie regexp=myregexp"); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setName("mycookie"); + config.setRegexp("myregexp"); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(2); + } + } + } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java index 6792ed97..1a8f5a88 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java @@ -16,8 +16,13 @@ package org.springframework.cloud.gateway.handler.predicate; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; @@ -106,6 +111,31 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests { .valueEquals(ROUTE_ID_HEADER, "header_test_comma_separated"); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setHeader("myheader"); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(1); + } + } + @EnableAutoConfiguration @SpringBootConfiguration @Import(DefaultTestConfig.class) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java index 270a1a50..e3abf08f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java @@ -16,8 +16,13 @@ package org.springframework.cloud.gateway.handler.predicate; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -87,6 +92,31 @@ public class QueryRoutePredicateFactoryTests extends BaseWebClientTests { assertThat(predicate.toString()).contains("Query: param=myparam regexp=myregexp"); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setParam("myparam"); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(1); + } + } + @EnableAutoConfiguration @SpringBootConfiguration @Import(DefaultTestConfig.class) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java index 2599d34c..e1e0a255 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java @@ -17,8 +17,13 @@ package org.springframework.cloud.gateway.handler.predicate; import java.time.Duration; +import java.util.Set; import java.util.function.Predicate; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -89,6 +94,31 @@ public class RemoteAddrRoutePredicateFactoryTests extends BaseWebClientTests { assertThat(predicate.toString()).contains("RemoteAddrs: [1.2.3.4, 5.6.7.8]"); } + @Test + public void testConfig() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + config.setSources("1.2.3.4", "5.6.7.8"); + + assertThat(validator.validate(config).isEmpty()).isTrue(); + } + } + + @Test + public void testConfigNullField() { + try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + Validator validator = factory.getValidator(); + + Config config = new Config(); + Set> validate = validator.validate(config); + + assertThat(validate.isEmpty()).isFalse(); + assertThat(validate.size()).isEqualTo(1); + } + } + @EnableAutoConfiguration @SpringBootConfiguration @Import(DefaultTestConfig.class)