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
This commit is contained in:
Vedran Pavic
2018-06-01 11:50:01 +02:00
parent f55b793185
commit 63f105082a
13 changed files with 159 additions and 228 deletions

View File

@@ -17,9 +17,7 @@
package sample; package sample;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver; 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.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; 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.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; 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) @RunWith(SpringRunner.class)
@AutoConfigureMockMvc @AutoConfigureMockMvc
@SpringBootTest(classes = FindByUsernameApplication.class, webEnvironment = WebEnvironment.MOCK) @SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@ContextConfiguration(initializers = FindByUsernameTests.Initializer.class)
public class FindByUsernameTests { public class FindByUsernameTests {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @Autowired
private MockMvc mockMvc; private MockMvc mockMvc;
@@ -96,16 +79,21 @@ public class FindByUsernameTests {
home.terminateButtonDisabled(); home.terminateButtonDisabled();
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -19,9 +19,7 @@ package sample;
import java.util.List; import java.util.List;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver; 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.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; 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.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
@@ -49,26 +46,12 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Vedran Pavic * @author Vedran Pavic
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK) @SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@AutoConfigureMockMvc @AutoConfigureMockMvc
@ContextConfiguration(initializers = HttpRedisJsonTest.Initializer.class)
public class HttpRedisJsonTest { public class HttpRedisJsonTest {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @Autowired
private MockMvc mockMvc; private MockMvc mockMvc;
@@ -120,16 +103,21 @@ public class HttpRedisJsonTest {
assertThat(attributes).extracting("attributeValue").contains("Demo Value"); assertThat(attributes).extracting("attributeValue").contains("Demo Value");
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -16,20 +16,17 @@
package sample; package sample;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.GenericContainer;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.session.data.redis.config.annotation.SpringSessionRedisOperations; import org.springframework.session.data.redis.config.annotation.SpringSessionRedisOperations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -39,25 +36,11 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Vedran Pavic * @author Vedran Pavic
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class) @SpringBootTest
@ContextConfiguration(initializers = RedisSerializerTest.Initializer.class)
public class RedisSerializerTest { public class RedisSerializerTest {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @SpringSessionRedisOperations
private RedisTemplate<Object, Object> sessionRedisTemplate; private RedisTemplate<Object, Object> sessionRedisTemplate;
@@ -69,16 +52,21 @@ public class RedisSerializerTest {
.isInstanceOf(GenericJackson2JsonRedisSerializer.class); .isInstanceOf(GenericJackson2JsonRedisSerializer.class);
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -17,9 +17,7 @@
package sample; package sample;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver; 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.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; 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.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; 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) @RunWith(SpringRunner.class)
@AutoConfigureMockMvc @AutoConfigureMockMvc
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.MOCK) @SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@ContextConfiguration(initializers = BootTests.Initializer.class)
public class BootTests { public class BootTests {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @Autowired
private MockMvc mockMvc; private MockMvc mockMvc;
@@ -102,16 +85,21 @@ public class BootTests {
login.assertAt(); login.assertAt();
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -19,9 +19,7 @@ package sample;
import java.util.List; import java.util.List;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver; 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;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; 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.boot.web.server.LocalServerPort;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat; 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 Eddú Meléndez
* @author Rob Winch * @author Rob Winch
* @author Vedran Pavic
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = HelloWebFluxApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(initializers = AttributeTests.Initializer.class)
public class AttributeTests { public class AttributeTests {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @LocalServerPort
private int port; private int port;
@@ -109,16 +93,21 @@ public class AttributeTests {
assertThat(row.getAttributeValue()).isEqualTo("b"); assertThat(row.getAttributeValue()).isEqualTo("b");
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -20,8 +20,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.testcontainers.containers.GenericContainer; 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.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; 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.context.ApplicationContextInitializer; import org.springframework.context.annotation.Bean;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.TextMessage;
@@ -52,25 +49,11 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
* @author Vedran Pavic * @author Vedran Pavic
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(initializers = ApplicationTests.Initializer.class)
public class ApplicationTests { public class ApplicationTests {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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}") @Value("${local.server.port}")
private String port; private String port;
@@ -91,16 +74,21 @@ public class ApplicationTests {
.isInstanceOf(ExecutionException.class); .isInstanceOf(ExecutionException.class);
} }
static class Initializer @TestConfiguration
implements ApplicationContextInitializer<ConfigurableApplicationContext> { static class Config {
@Override @Bean
public void initialize( public GenericContainer redisContainer() {
ConfigurableApplicationContext configurableApplicationContext) { GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
TestPropertyValues .withExposedPorts(6379);
.of("spring.redis.host=" + container.getContainerIpAddress(), redisContainer.start();
"spring.redis.port=" + container.getFirstMappedPort()) return redisContainer;
.applyTo(configurableApplicationContext.getEnvironment()); }
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
} }
} }

View File

@@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor
@Profile("embedded-redis") @Profile("embedded-redis")
public class EmbeddedRedisConfig { 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() { public GenericContainer redisContainer() {
return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
} }
@Bean @Bean

View File

@@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor
@Profile("embedded-redis") @Profile("embedded-redis")
public class EmbeddedRedisConfig { 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() { public GenericContainer redisContainer() {
return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
} }
@Bean @Bean

View File

@@ -16,9 +16,7 @@
package rest; package rest;
import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.GenericContainer;
@@ -58,19 +56,6 @@ public class RestMockMvcTests {
private static final String DOCKER_IMAGE = "redis:4.0.9"; 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 @Autowired
private SessionRepositoryFilter<? extends Session> sessionRepositoryFilter; private SessionRepositoryFilter<? extends Session> sessionRepositoryFilter;
@@ -107,10 +92,18 @@ public class RestMockMvcTests {
@EnableRedisHttpSession @EnableRedisHttpSession
static class Config { static class Config {
@Bean
public GenericContainer redisContainer() {
GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
}
@Bean @Bean
public LettuceConnectionFactory redisConnectionFactory() { public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(container.getContainerIpAddress(), return new LettuceConnectionFactory(redisContainer().getContainerIpAddress(),
container.getFirstMappedPort()); redisContainer().getFirstMappedPort());
} }
@Bean @Bean

View File

@@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor
@Profile("embedded-redis") @Profile("embedded-redis")
public class EmbeddedRedisConfig { 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() { public GenericContainer redisContainer() {
return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
} }
@Bean @Bean

View File

@@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor
@Profile("embedded-redis") @Profile("embedded-redis")
public class EmbeddedRedisConfig { 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() { public GenericContainer redisContainer() {
return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
} }
@Bean @Bean

View File

@@ -28,11 +28,14 @@ import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactor
@Profile("embedded-redis") @Profile("embedded-redis")
public class EmbeddedRedisConfig { 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() { public GenericContainer redisContainer() {
return new GenericContainer(REDIS_DOCKER_IMAGE).withExposedPorts(6379); GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
} }
@Bean @Bean

View File

@@ -16,8 +16,6 @@
package org.springframework.session.data.redis; package org.springframework.session.data.redis;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.GenericContainer;
import org.springframework.context.annotation.Bean; 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 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 { protected static class BaseConfig {
@Bean
public GenericContainer redisContainer() {
GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE)
.withExposedPorts(6379);
redisContainer.start();
return redisContainer;
}
@Bean @Bean
public LettuceConnectionFactory redisConnectionFactory() { public LettuceConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration( RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(
container.getContainerIpAddress(), container.getFirstMappedPort()); redisContainer().getContainerIpAddress(),
redisContainer().getFirstMappedPort());
return new LettuceConnectionFactory(configuration); return new LettuceConnectionFactory(configuration);
} }