From 63f105082a8766d05eef0d4e7a5b714493c5f44c Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Fri, 1 Jun 2018 11:50:01 +0200 Subject: [PATCH] Optimize Redis integration tests This commit ensures that Redis Testcontainers used for integration testing are managed by Spring to ensure proper ordering on shutdown. Previously, Redis Testcontainer was closed before LettuceConnectionFactory which caused pending commands to hang and added a lot of wait to project build. Closes gh-1086 --- .../java/sample/FindByUsernameTests.java | 48 +++++++----------- .../java/sample/HttpRedisJsonTest.java | 48 +++++++----------- .../java/sample/RedisSerializerTest.java | 48 +++++++----------- .../java/sample/BootTests.java | 48 +++++++----------- .../java/sample/AttributeTests.java | 49 +++++++------------ .../test/java/sample/ApplicationTests.java | 48 +++++++----------- .../main/java/sample/EmbeddedRedisConfig.java | 9 ++-- .../main/java/sample/EmbeddedRedisConfig.java | 9 ++-- .../java/rest/RestMockMvcTests.java | 27 ++++------ .../main/java/sample/EmbeddedRedisConfig.java | 9 ++-- .../main/java/sample/EmbeddedRedisConfig.java | 9 ++-- .../main/java/sample/EmbeddedRedisConfig.java | 9 ++-- .../data/redis/AbstractRedisITests.java | 26 ++++------ 13 files changed, 159 insertions(+), 228 deletions(-) diff --git a/samples/boot/findbyusername/src/integration-test/java/sample/FindByUsernameTests.java b/samples/boot/findbyusername/src/integration-test/java/sample/FindByUsernameTests.java index 1fca0f90..7ffa9b22 100644 --- a/samples/boot/findbyusername/src/integration-test/java/sample/FindByUsernameTests.java +++ b/samples/boot/findbyusername/src/integration-test/java/sample/FindByUsernameTests.java @@ -17,9 +17,7 @@ package sample; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; @@ -31,10 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -46,25 +43,11 @@ import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDr */ @RunWith(SpringRunner.class) @AutoConfigureMockMvc -@SpringBootTest(classes = FindByUsernameApplication.class, webEnvironment = WebEnvironment.MOCK) -@ContextConfiguration(initializers = FindByUsernameTests.Initializer.class) +@SpringBootTest(webEnvironment = WebEnvironment.MOCK) public class FindByUsernameTests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @Autowired private MockMvc mockMvc; @@ -96,16 +79,21 @@ public class FindByUsernameTests { home.terminateButtonDisabled(); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/boot/redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java b/samples/boot/redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java index 045d4fdb..736b7264 100644 --- a/samples/boot/redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java +++ b/samples/boot/redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java @@ -19,9 +19,7 @@ package sample; import java.util.List; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; @@ -34,10 +32,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -49,26 +46,12 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Vedran Pavic */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK) +@SpringBootTest(webEnvironment = WebEnvironment.MOCK) @AutoConfigureMockMvc -@ContextConfiguration(initializers = HttpRedisJsonTest.Initializer.class) public class HttpRedisJsonTest { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @Autowired private MockMvc mockMvc; @@ -120,16 +103,21 @@ public class HttpRedisJsonTest { assertThat(attributes).extracting("attributeValue").contains("Demo Value"); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/boot/redis-json/src/integration-test/java/sample/RedisSerializerTest.java b/samples/boot/redis-json/src/integration-test/java/sample/RedisSerializerTest.java index fac6cd25..cb40fb39 100644 --- a/samples/boot/redis-json/src/integration-test/java/sample/RedisSerializerTest.java +++ b/samples/boot/redis-json/src/integration-test/java/sample/RedisSerializerTest.java @@ -16,20 +16,17 @@ package sample; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.testcontainers.containers.GenericContainer; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.session.data.redis.config.annotation.SpringSessionRedisOperations; -import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -39,25 +36,11 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Vedran Pavic */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -@ContextConfiguration(initializers = RedisSerializerTest.Initializer.class) +@SpringBootTest public class RedisSerializerTest { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @SpringSessionRedisOperations private RedisTemplate sessionRedisTemplate; @@ -69,16 +52,21 @@ public class RedisSerializerTest { .isInstanceOf(GenericJackson2JsonRedisSerializer.class); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/boot/redis/src/integration-test/java/sample/BootTests.java b/samples/boot/redis/src/integration-test/java/sample/BootTests.java index 1ac64ce0..f6cdb169 100644 --- a/samples/boot/redis/src/integration-test/java/sample/BootTests.java +++ b/samples/boot/redis/src/integration-test/java/sample/BootTests.java @@ -17,9 +17,7 @@ package sample; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; @@ -31,10 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -45,25 +42,11 @@ import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDr */ @RunWith(SpringRunner.class) @AutoConfigureMockMvc -@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK) -@ContextConfiguration(initializers = BootTests.Initializer.class) +@SpringBootTest(webEnvironment = WebEnvironment.MOCK) public class BootTests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @Autowired private MockMvc mockMvc; @@ -102,16 +85,21 @@ public class BootTests { login.assertAt(); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/boot/webflux/src/integration-test/java/sample/AttributeTests.java b/samples/boot/webflux/src/integration-test/java/sample/AttributeTests.java index d785136e..32b12ed8 100644 --- a/samples/boot/webflux/src/integration-test/java/sample/AttributeTests.java +++ b/samples/boot/webflux/src/integration-test/java/sample/AttributeTests.java @@ -19,9 +19,7 @@ package sample; import java.util.List; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.WebDriver; @@ -32,11 +30,10 @@ import sample.pages.HomePage.Attribute; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -44,27 +41,14 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author EddĂș MelĂ©ndez * @author Rob Winch + * @author Vedran Pavic */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = HelloWebFluxApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ContextConfiguration(initializers = AttributeTests.Initializer.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class AttributeTests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @LocalServerPort private int port; @@ -109,16 +93,21 @@ public class AttributeTests { assertThat(row.getAttributeValue()).isEqualTo("b"); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/boot/websocket/src/test/java/sample/ApplicationTests.java b/samples/boot/websocket/src/test/java/sample/ApplicationTests.java index d4a92e1a..e03f2c9e 100644 --- a/samples/boot/websocket/src/test/java/sample/ApplicationTests.java +++ b/samples/boot/websocket/src/test/java/sample/ApplicationTests.java @@ -20,8 +20,6 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.testcontainers.containers.GenericContainer; @@ -30,10 +28,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ContextConfiguration; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.TextMessage; @@ -52,25 +49,11 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * @author Vedran Pavic */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ContextConfiguration(initializers = ApplicationTests.Initializer.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class ApplicationTests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @Value("${local.server.port}") private String port; @@ -91,16 +74,21 @@ public class ApplicationTests { .isInstanceOf(ExecutionException.class); } - static class Initializer - implements ApplicationContextInitializer { + @TestConfiguration + static class Config { - @Override - public void initialize( - ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues - .of("spring.redis.host=" + container.getContainerIpAddress(), - "spring.redis.port=" + container.getFirstMappedPort()) - .applyTo(configurableApplicationContext.getEnvironment()); + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + + @Bean + public LettuceConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } } diff --git a/samples/javaconfig/custom-cookie/src/main/java/sample/EmbeddedRedisConfig.java b/samples/javaconfig/custom-cookie/src/main/java/sample/EmbeddedRedisConfig.java index 7aed044a..57563183 100644 --- a/samples/javaconfig/custom-cookie/src/main/java/sample/EmbeddedRedisConfig.java +++ b/samples/javaconfig/custom-cookie/src/main/java/sample/EmbeddedRedisConfig.java @@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor @Profile("embedded-redis") public class EmbeddedRedisConfig { - private static final String REDIS_DOCKER_IMAGE = "redis:4.0.9"; + private static final String DOCKER_IMAGE = "redis:4.0.9"; - @Bean(initMethod = "start") + @Bean public GenericContainer redisContainer() { - return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; } @Bean diff --git a/samples/javaconfig/redis/src/main/java/sample/EmbeddedRedisConfig.java b/samples/javaconfig/redis/src/main/java/sample/EmbeddedRedisConfig.java index 7aed044a..57563183 100644 --- a/samples/javaconfig/redis/src/main/java/sample/EmbeddedRedisConfig.java +++ b/samples/javaconfig/redis/src/main/java/sample/EmbeddedRedisConfig.java @@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor @Profile("embedded-redis") public class EmbeddedRedisConfig { - private static final String REDIS_DOCKER_IMAGE = "redis:4.0.9"; + private static final String DOCKER_IMAGE = "redis:4.0.9"; - @Bean(initMethod = "start") + @Bean public GenericContainer redisContainer() { - return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; } @Bean diff --git a/samples/javaconfig/rest/src/integration-test/java/rest/RestMockMvcTests.java b/samples/javaconfig/rest/src/integration-test/java/rest/RestMockMvcTests.java index c5eda608..09a8ae2f 100644 --- a/samples/javaconfig/rest/src/integration-test/java/rest/RestMockMvcTests.java +++ b/samples/javaconfig/rest/src/integration-test/java/rest/RestMockMvcTests.java @@ -16,9 +16,7 @@ package rest; -import org.junit.AfterClass; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.testcontainers.containers.GenericContainer; @@ -58,19 +56,6 @@ public class RestMockMvcTests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - @Autowired private SessionRepositoryFilter sessionRepositoryFilter; @@ -107,10 +92,18 @@ public class RestMockMvcTests { @EnableRedisHttpSession static class Config { + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + @Bean public LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(container.getContainerIpAddress(), - container.getFirstMappedPort()); + return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); } @Bean diff --git a/samples/javaconfig/rest/src/main/java/sample/EmbeddedRedisConfig.java b/samples/javaconfig/rest/src/main/java/sample/EmbeddedRedisConfig.java index 7aed044a..57563183 100644 --- a/samples/javaconfig/rest/src/main/java/sample/EmbeddedRedisConfig.java +++ b/samples/javaconfig/rest/src/main/java/sample/EmbeddedRedisConfig.java @@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor @Profile("embedded-redis") public class EmbeddedRedisConfig { - private static final String REDIS_DOCKER_IMAGE = "redis:4.0.9"; + private static final String DOCKER_IMAGE = "redis:4.0.9"; - @Bean(initMethod = "start") + @Bean public GenericContainer redisContainer() { - return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; } @Bean diff --git a/samples/javaconfig/security/src/main/java/sample/EmbeddedRedisConfig.java b/samples/javaconfig/security/src/main/java/sample/EmbeddedRedisConfig.java index 7aed044a..57563183 100644 --- a/samples/javaconfig/security/src/main/java/sample/EmbeddedRedisConfig.java +++ b/samples/javaconfig/security/src/main/java/sample/EmbeddedRedisConfig.java @@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor @Profile("embedded-redis") public class EmbeddedRedisConfig { - private static final String REDIS_DOCKER_IMAGE = "redis:4.0.9"; + private static final String DOCKER_IMAGE = "redis:4.0.9"; - @Bean(initMethod = "start") + @Bean public GenericContainer redisContainer() { - return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; } @Bean diff --git a/samples/xml/redis/src/main/java/sample/EmbeddedRedisConfig.java b/samples/xml/redis/src/main/java/sample/EmbeddedRedisConfig.java index 7aed044a..57563183 100644 --- a/samples/xml/redis/src/main/java/sample/EmbeddedRedisConfig.java +++ b/samples/xml/redis/src/main/java/sample/EmbeddedRedisConfig.java @@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor @Profile("embedded-redis") public class EmbeddedRedisConfig { - private static final String REDIS_DOCKER_IMAGE = "redis:4.0.9"; + private static final String DOCKER_IMAGE = "redis:4.0.9"; - @Bean(initMethod = "start") + @Bean public GenericContainer redisContainer() { - return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; } @Bean diff --git a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/AbstractRedisITests.java b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/AbstractRedisITests.java index 1c42201e..52b0dccb 100644 --- a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/AbstractRedisITests.java +++ b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/AbstractRedisITests.java @@ -16,8 +16,6 @@ package org.springframework.session.data.redis; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.testcontainers.containers.GenericContainer; import org.springframework.context.annotation.Bean; @@ -33,25 +31,21 @@ public abstract class AbstractRedisITests { private static final String DOCKER_IMAGE = "redis:4.0.9"; - private static GenericContainer container = new GenericContainer(DOCKER_IMAGE) - .withExposedPorts(6379); - - @BeforeClass - public static void setUpClass() { - container.start(); - } - - @AfterClass - public static void tearDownClass() { - container.stop(); - } - protected static class BaseConfig { + @Bean + public GenericContainer redisContainer() { + GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE) + .withExposedPorts(6379); + redisContainer.start(); + return redisContainer; + } + @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration( - container.getContainerIpAddress(), container.getFirstMappedPort()); + redisContainer().getContainerIpAddress(), + redisContainer().getFirstMappedPort()); return new LettuceConnectionFactory(configuration); }