From cd8ab7ddb3190b589e3f40830259ff80cb799134 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Fri, 17 Sep 2021 09:38:01 -0400 Subject: [PATCH 1/6] Enabled Redis tests --- .../RedisRouteDefinitionRepositoryTests.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java index 9329df03..89356152 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.function.Predicate; import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; @@ -33,14 +34,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.cloud.gateway.filter.FilterDefinition; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; import org.springframework.web.server.ServerWebExchange; import static org.assertj.core.api.Assertions.assertThat; @@ -52,15 +57,20 @@ import static org.assertj.core.api.Assertions.assertThat; @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @ActiveProfiles("redis-route-repository") @Testcontainers +@ContextConfiguration(initializers = RedisRouteDefinitionRepositoryTests.RedisDbInitializer.class) public class RedisRouteDefinitionRepositoryTests { @Container - public GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); + public static GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); @Autowired private RedisRouteDefinitionRepository redisRouteDefinitionRepository; - @Disabled + @BeforeAll + public static void startRedisContainer() { + redis.start(); + } + @Test public void testAddRouteToRedis() { @@ -75,7 +85,6 @@ public class RedisRouteDefinitionRepositoryTests { assertThat(routeDefinitions.get(0)).isEqualTo(testRouteDefinition); } - @Disabled @Test public void testRemoveRouteFromRedis() { @@ -165,4 +174,14 @@ public class RedisRouteDefinitionRepositoryTests { } + public static class RedisDbInitializer implements ApplicationContextInitializer { + @Override + public void initialize(ConfigurableApplicationContext configurableApplicationContext) { + TestPropertyValues values = TestPropertyValues.of( + "spring.redis.host="+redis.getHost(), + "spring.redis.port="+redis.getFirstMappedPort() + ); + values.applyTo(configurableApplicationContext); + } + } } From ea756e587b7ac461165a3dcba4abda415e3533e1 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Fri, 17 Sep 2021 09:52:30 -0400 Subject: [PATCH 2/6] Formatting changes --- .../route/RedisRouteDefinitionRepositoryTests.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java index 89356152..bc500cc2 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java @@ -23,7 +23,6 @@ import java.util.function.Predicate; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; import org.testcontainers.junit.jupiter.Container; @@ -175,13 +174,14 @@ public class RedisRouteDefinitionRepositoryTests { } public static class RedisDbInitializer implements ApplicationContextInitializer { + @Override public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues values = TestPropertyValues.of( - "spring.redis.host="+redis.getHost(), - "spring.redis.port="+redis.getFirstMappedPort() - ); + TestPropertyValues values = TestPropertyValues.of("spring.redis.host=" + redis.getHost(), + "spring.redis.port=" + redis.getFirstMappedPort()); values.applyTo(configurableApplicationContext); } + } + } From 90b31b8138cacf1c5abb5b8fa1abc32b942414f4 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Fri, 17 Sep 2021 11:00:43 -0400 Subject: [PATCH 3/6] Removed host from configurable app context --- .../gateway/route/RedisRouteDefinitionRepositoryTests.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java index bc500cc2..00ccf3d8 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java @@ -177,8 +177,7 @@ public class RedisRouteDefinitionRepositoryTests { @Override public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues values = TestPropertyValues.of("spring.redis.host=" + redis.getHost(), - "spring.redis.port=" + redis.getFirstMappedPort()); + TestPropertyValues values = TestPropertyValues.of("spring.redis.port=" + redis.getFirstMappedPort()); values.applyTo(configurableApplicationContext); } From 36d888588072d6d9b9027b5ffcba6465750c6b24 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Fri, 17 Sep 2021 11:01:16 -0400 Subject: [PATCH 4/6] Formatting --- .../gateway/route/RedisRouteDefinitionRepositoryTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java index 00ccf3d8..d213b515 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java @@ -52,7 +52,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Dennis Menge */ -@SpringBootTest(properties = { "debug=true", "logging.level.org.springframework.cloud.gateway=trace" }) +@SpringBootTest(properties = {"debug=true", "logging.level.org.springframework.cloud.gateway=trace"}) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @ActiveProfiles("redis-route-repository") @Testcontainers From e51f2bdf07b41498fa1001c782a9dd9b7aeffe08 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Fri, 17 Sep 2021 14:13:50 -0400 Subject: [PATCH 5/6] Changes for redis and docker test to run --- .../GatewayRedisAutoConfigurationTests.java | 24 ------- ...itionRepositoryEnabledByPropertyTests.java | 70 +++++++++++++++++++ 2 files changed, 70 insertions(+), 24 deletions(-) create mode 100644 spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfigurationTests.java index d9d88da0..a3a1b6ce 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfigurationTests.java @@ -18,8 +18,6 @@ package org.springframework.cloud.gateway.config; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.junit.jupiter.Container; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; @@ -113,26 +111,4 @@ public class GatewayRedisAutoConfigurationTests { } - /** - * @author Dennis Menge - */ - @Nested - @SpringBootTest(classes = GatewayRedisAutoConfigurationTests.Config.class, - properties = "spring.cloud.gateway.redis-route-definition-repository.enabled=true") - @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) - class RedisRouteDefinitionRepositoryEnabledByProperty { - - @Container - public GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); - - @Autowired(required = false) - private RedisRouteDefinitionRepository redisRouteDefinitionRepository; - - @Test - public void redisRouteDefinitionRepository() { - assertThat(redisRouteDefinitionRepository).isNotNull(); - } - - } - } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java new file mode 100644 index 00000000..47d51c04 --- /dev/null +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java @@ -0,0 +1,70 @@ +/* + * Copyright 2013-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.config; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.cloud.gateway.route.RedisRouteDefinitionRepository; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(classes = GatewayRedisAutoConfigurationTests.Config.class, + properties = "spring.cloud.gateway.redis-route-definition-repository.enabled=true") +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +@Testcontainers +@ContextConfiguration( + initializers = GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.RedisDbInitializer.class) +public class GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests { + + @Container + public static GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); + + @Autowired(required = false) + private RedisRouteDefinitionRepository redisRouteDefinitionRepository; + + @BeforeAll + public static void startRedisContainer() { + redis.start(); + } + + @Test + public void redisRouteDefinitionRepository() { + assertThat(redisRouteDefinitionRepository).isNotNull(); + } + + public static class RedisDbInitializer implements ApplicationContextInitializer { + + @Override + public void initialize(ConfigurableApplicationContext configurableApplicationContext) { + TestPropertyValues values = TestPropertyValues.of("spring.redis.port=" + redis.getFirstMappedPort()); + values.applyTo(configurableApplicationContext); + } + + } + +} From 73b1f7a2437e55c295d603057c342c30d3f85b9c Mon Sep 17 00:00:00 2001 From: spencergibb Date: Fri, 17 Sep 2021 16:31:16 -0400 Subject: [PATCH 6/6] Changes how redis tests get configuration from Testcontainers. Moved from ApplicationContextInitializer to DynamicPropertyRegistry --- ...itionRepositoryEnabledByPropertyTests.java | 24 ++++++----------- .../ratelimit/RedisRateLimiterTests.java | 10 ++++++- .../RedisRouteDefinitionRepositoryTests.java | 26 +++++++------------ 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java index 47d51c04..919e2c27 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.java @@ -24,12 +24,10 @@ import org.testcontainers.junit.jupiter.Testcontainers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.cloud.gateway.route.RedisRouteDefinitionRepository; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import static org.assertj.core.api.Assertions.assertThat; @@ -37,8 +35,6 @@ import static org.assertj.core.api.Assertions.assertThat; properties = "spring.cloud.gateway.redis-route-definition-repository.enabled=true") @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @Testcontainers -@ContextConfiguration( - initializers = GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests.RedisDbInitializer.class) public class GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests { @Container @@ -52,19 +48,15 @@ public class GatewayRedisRouteDefinitionRepositoryEnabledByPropertyTests { redis.start(); } + @DynamicPropertySource + static void containerProperties(DynamicPropertyRegistry registry) { + registry.add("spring.redis.host", redis::getContainerIpAddress); + registry.add("spring.redis.port", redis::getFirstMappedPort); + } + @Test public void redisRouteDefinitionRepository() { assertThat(redisRouteDefinitionRepository).isNotNull(); } - public static class RedisDbInitializer implements ApplicationContextInitializer { - - @Override - public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues values = TestPropertyValues.of("spring.redis.port=" + redis.getFirstMappedPort()); - values.applyTo(configurableApplicationContext); - } - - } - } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java index e2ddd304..96e226c8 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java @@ -34,6 +34,8 @@ import org.springframework.cloud.gateway.filter.ratelimit.RateLimiter.Response; import org.springframework.cloud.gateway.test.BaseWebClientTests; import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.is; @@ -55,11 +57,17 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen public class RedisRateLimiterTests extends BaseWebClientTests { @Container - public GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); + public static GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); @Autowired private RedisRateLimiter rateLimiter; + @DynamicPropertySource + static void containerProperties(DynamicPropertyRegistry registry) { + registry.add("spring.redis.host", redis::getContainerIpAddress); + registry.add("spring.redis.port", redis::getFirstMappedPort); + } + @BeforeEach public void setUp() { assumeThat("Ignore on Circle", System.getenv("CIRCLECI"), is(nullValue())); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java index d213b515..a1b68795 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RedisRouteDefinitionRepositoryTests.java @@ -33,18 +33,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.cloud.gateway.filter.FilterDefinition; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import org.springframework.web.server.ServerWebExchange; import static org.assertj.core.api.Assertions.assertThat; @@ -52,11 +50,10 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Dennis Menge */ -@SpringBootTest(properties = {"debug=true", "logging.level.org.springframework.cloud.gateway=trace"}) +@SpringBootTest(properties = { "debug=true", "logging.level.org.springframework.cloud.gateway=trace" }) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @ActiveProfiles("redis-route-repository") @Testcontainers -@ContextConfiguration(initializers = RedisRouteDefinitionRepositoryTests.RedisDbInitializer.class) public class RedisRouteDefinitionRepositoryTests { @Container @@ -70,9 +67,14 @@ public class RedisRouteDefinitionRepositoryTests { redis.start(); } + @DynamicPropertySource + static void containerProperties(DynamicPropertyRegistry registry) { + registry.add("spring.redis.host", redis::getContainerIpAddress); + registry.add("spring.redis.port", redis::getFirstMappedPort); + } + @Test public void testAddRouteToRedis() { - RouteDefinition testRouteDefinition = defaultTestRoute(); redisRouteDefinitionRepository.save(Mono.just(testRouteDefinition)).block(); @@ -173,14 +175,4 @@ public class RedisRouteDefinitionRepositoryTests { } - public static class RedisDbInitializer implements ApplicationContextInitializer { - - @Override - public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues values = TestPropertyValues.of("spring.redis.port=" + redis.getFirstMappedPort()); - values.applyTo(configurableApplicationContext); - } - - } - }