Skip to content

Commit e7faca3

Browse files
scottfrederickphilwebb
authored andcommitted
Add support for Testcontainer Redis
Add support for the official `com.redis:testcontainers-redis` container. See gh-41450
1 parent 926b0ec commit e7faca3

File tree

40 files changed

+59
-104
lines changed

40 files changed

+59
-104
lines changed

spring-boot-project/spring-boot-actuator/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies {
1515
dockerTestImplementation(project(":spring-boot-project:spring-boot-autoconfigure"))
1616
dockerTestImplementation(project(":spring-boot-project:spring-boot-test"))
1717
dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker"))
18+
dockerTestImplementation("com.redis:testcontainers-redis")
1819
dockerTestImplementation("org.assertj:assertj-core")
1920
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
2021
dockerTestImplementation("org.springframework:spring-test")

spring-boot-project/spring-boot-actuator/src/dockerTest/java/org/springframework/boot/actuate/metrics/cache/RedisCacheMetricsTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.UUID;
2020
import java.util.function.BiConsumer;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import io.micrometer.core.instrument.MeterRegistry;
2324
import io.micrometer.core.instrument.Tags;
2425
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
@@ -32,7 +33,6 @@
3233
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
3334
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3435
import org.springframework.boot.test.context.runner.ContextConsumer;
35-
import org.springframework.boot.testsupport.container.RedisContainer;
3636
import org.springframework.boot.testsupport.container.TestImage;
3737
import org.springframework.cache.annotation.EnableCaching;
3838
import org.springframework.context.annotation.Configuration;

spring-boot-project/spring-boot-autoconfigure/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ dependencies {
2525

2626
dockerTestImplementation(project(":spring-boot-project:spring-boot-test"))
2727
dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker"))
28+
dockerTestImplementation("com.redis:testcontainers-redis")
2829
dockerTestImplementation("org.assertj:assertj-core")
30+
dockerTestImplementation("org.awaitility:awaitility")
2931
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
3032
dockerTestImplementation("org.mockito:mockito-core")
3133
dockerTestImplementation("org.springframework:spring-test")
@@ -37,7 +39,6 @@ dependencies {
3739
dockerTestImplementation("org.testcontainers:neo4j")
3840
dockerTestImplementation("org.testcontainers:pulsar")
3941
dockerTestImplementation("org.testcontainers:testcontainers")
40-
dockerTestImplementation("org.awaitility:awaitility")
4142

4243
optional("co.elastic.clients:elasticsearch-java") {
4344
exclude group: "commons-logging", module: "commons-logging"

spring-boot-project/spring-boot-autoconfigure/src/dockerTest/java/org/springframework/boot/autoconfigure/data/redis/RedisRepositoriesAutoConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.autoconfigure.data.redis;
1818

19+
import com.redis.testcontainers.RedisContainer;
1920
import org.junit.jupiter.api.AfterEach;
2021
import org.junit.jupiter.api.BeforeEach;
2122
import org.junit.jupiter.api.Test;
@@ -29,7 +30,6 @@
2930
import org.springframework.boot.autoconfigure.data.redis.city.City;
3031
import org.springframework.boot.autoconfigure.data.redis.city.CityRepository;
3132
import org.springframework.boot.test.util.TestPropertyValues;
32-
import org.springframework.boot.testsupport.container.RedisContainer;
3333
import org.springframework.boot.testsupport.container.TestImage;
3434
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
3535
import org.springframework.context.annotation.Configuration;

spring-boot-project/spring-boot-autoconfigure/src/dockerTest/java/org/springframework/boot/autoconfigure/session/ReactiveSessionAutoConfigurationRedisTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Duration;
2020
import java.util.List;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import org.junit.jupiter.api.Test;
2324
import org.testcontainers.junit.jupiter.Container;
2425
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -31,7 +32,6 @@
3132
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
3233
import org.springframework.boot.test.context.runner.ContextConsumer;
3334
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
34-
import org.springframework.boot.testsupport.container.RedisContainer;
3535
import org.springframework.boot.testsupport.container.TestImage;
3636
import org.springframework.http.ResponseCookie;
3737
import org.springframework.session.MapSession;

spring-boot-project/spring-boot-autoconfigure/src/dockerTest/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationRedisTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Duration;
2020
import java.util.Map;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import org.junit.jupiter.api.Test;
2324
import org.testcontainers.junit.jupiter.Container;
2425
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -31,7 +32,6 @@
3132
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
3233
import org.springframework.boot.test.context.runner.ContextConsumer;
3334
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
34-
import org.springframework.boot.testsupport.container.RedisContainer;
3535
import org.springframework.boot.testsupport.container.TestImage;
3636
import org.springframework.context.annotation.Bean;
3737
import org.springframework.context.annotation.Configuration;

spring-boot-project/spring-boot-dependencies/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2167,6 +2167,16 @@ bom {
21672167
releaseNotes("https://github.com/testcontainers/testcontainers-java/releases/tag/{version}")
21682168
}
21692169
}
2170+
library("Testcontainers Redis Module", "2.2.2") {
2171+
group("com.redis") {
2172+
modules = [
2173+
"testcontainers-redis"
2174+
]
2175+
}
2176+
links {
2177+
site("https://testcontainers.com/modules/redis/")
2178+
}
2179+
}
21702180
library("Thymeleaf", "3.1.2.RELEASE") {
21712181
group("org.thymeleaf") {
21722182
modules = [

spring-boot-project/spring-boot-docker-compose/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ dependencies {
1313
api(project(":spring-boot-project:spring-boot"))
1414

1515
dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker"))
16+
dockerTestImplementation("com.redis:testcontainers-redis")
1617
dockerTestImplementation("org.assertj:assertj-core")
1718
dockerTestImplementation("org.awaitility:awaitility")
1819
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
1920
dockerTestImplementation("org.testcontainers:testcontainers")
20-
21+
2122
dockerTestRuntimeOnly("com.microsoft.sqlserver:mssql-jdbc")
2223
dockerTestRuntimeOnly("com.oracle.database.r2dbc:oracle-r2dbc")
2324
dockerTestRuntimeOnly("io.r2dbc:r2dbc-mssql")

spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/testing/testcontainers.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ This works as long as Spring Boot is able to get the instance of the `Container`
107107

108108
If you're using a `@Bean` method, Spring Boot won't call the bean method to get the Docker image name, because this would cause eager initialization issues.
109109
Instead, the return type of the bean method is used to find out which connection detail should be used.
110-
This works as long as you're using typed containers, e.g. `Neo4jContainer` or `RabbitMQContainer`.
111-
This stops working if you're using `GenericContainer`, e.g. with Redis, as shown in the following example:
110+
This works as long as you're using typed containers such as `Neo4jContainer` or `RabbitMQContainer`.
111+
This stops working if you're using `GenericContainer`, for example with Redis as shown in the following example:
112112

113113
include-code::MyRedisConfiguration[]
114114

spring-boot-project/spring-boot-test-autoconfigure/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ dependencies {
1616
dockerTestImplementation(project(":spring-boot-project:spring-boot-testcontainers"))
1717
dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker"))
1818
dockerTestImplementation("io.projectreactor:reactor-test")
19+
dockerTestImplementation("com.redis:testcontainers-redis")
1920
dockerTestImplementation("org.assertj:assertj-core")
2021
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
2122
dockerTestImplementation("org.testcontainers:cassandra")

spring-boot-project/spring-boot-test-autoconfigure/src/dockerTest/java/org/springframework/boot/test/autoconfigure/data/redis/DataRedisTestIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.nio.charset.Charset;
2020
import java.nio.charset.StandardCharsets;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import org.junit.jupiter.api.Test;
2324
import org.testcontainers.junit.jupiter.Container;
2425
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -27,7 +28,6 @@
2728
import org.springframework.beans.factory.annotation.Autowired;
2829
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
2930
import org.springframework.boot.testcontainers.service.connection.ServiceConnectionAutoConfiguration;
30-
import org.springframework.boot.testsupport.container.RedisContainer;
3131
import org.springframework.boot.testsupport.container.TestImage;
3232
import org.springframework.context.ApplicationContext;
3333
import org.springframework.data.redis.core.RedisOperations;

spring-boot-project/spring-boot-test-autoconfigure/src/dockerTest/java/org/springframework/boot/test/autoconfigure/data/redis/DataRedisTestPropertiesIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616

1717
package org.springframework.boot.test.autoconfigure.data.redis;
1818

19+
import com.redis.testcontainers.RedisContainer;
1920
import org.junit.jupiter.api.Nested;
2021
import org.junit.jupiter.api.Test;
2122
import org.testcontainers.junit.jupiter.Container;
2223
import org.testcontainers.junit.jupiter.Testcontainers;
2324

2425
import org.springframework.beans.factory.annotation.Autowired;
2526
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
26-
import org.springframework.boot.testsupport.container.RedisContainer;
2727
import org.springframework.boot.testsupport.container.TestImage;
2828
import org.springframework.core.env.Environment;
2929

spring-boot-project/spring-boot-test-autoconfigure/src/dockerTest/java/org/springframework/boot/test/autoconfigure/data/redis/DataRedisTestReactiveIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Duration;
2020
import java.util.UUID;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import org.junit.jupiter.api.Test;
2324
import org.testcontainers.junit.jupiter.Container;
2425
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -27,7 +28,6 @@
2728
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
2829
import org.springframework.beans.factory.annotation.Autowired;
2930
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
30-
import org.springframework.boot.testsupport.container.RedisContainer;
3131
import org.springframework.boot.testsupport.container.TestImage;
3232
import org.springframework.context.ApplicationContext;
3333
import org.springframework.data.redis.core.ReactiveRedisOperations;

spring-boot-project/spring-boot-test-autoconfigure/src/dockerTest/java/org/springframework/boot/test/autoconfigure/data/redis/DataRedisTestWithIncludeFilterIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616

1717
package org.springframework.boot.test.autoconfigure.data.redis;
1818

19+
import com.redis.testcontainers.RedisContainer;
1920
import org.junit.jupiter.api.Test;
2021
import org.testcontainers.junit.jupiter.Container;
2122
import org.testcontainers.junit.jupiter.Testcontainers;
2223

2324
import org.springframework.beans.factory.annotation.Autowired;
2425
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
25-
import org.springframework.boot.testsupport.container.RedisContainer;
2626
import org.springframework.boot.testsupport.container.TestImage;
2727
import org.springframework.context.annotation.ComponentScan.Filter;
2828
import org.springframework.stereotype.Service;

spring-boot-project/spring-boot-testcontainers/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ dependencies {
8181
optional("org.testcontainers:rabbitmq")
8282
optional("org.testcontainers:redpanda")
8383
optional("org.testcontainers:r2dbc")
84+
optional("com.redis:testcontainers-redis")
8485

8586
testImplementation(project(":spring-boot-project:spring-boot-test"))
8687
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/lifecycle/TestcontainersLifecycleOrderIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collections;
2121
import java.util.List;
2222

23+
import com.redis.testcontainers.RedisContainer;
2324
import org.junit.jupiter.api.Test;
2425
import org.junit.jupiter.api.extension.ExtendWith;
2526
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -30,7 +31,6 @@
3031
import org.springframework.boot.testcontainers.lifecycle.TestcontainersLifecycleOrderIntegrationTests.TestConfig;
3132
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
3233
import org.springframework.boot.testsupport.container.DisabledIfDockerUnavailable;
33-
import org.springframework.boot.testsupport.container.RedisContainer;
3434
import org.springframework.boot.testsupport.container.TestImage;
3535
import org.springframework.context.annotation.Bean;
3636
import org.springframework.context.annotation.Configuration;
@@ -63,7 +63,7 @@ void eventsAreOrderedCorrectlyAfterStartup() {
6363
static class ContainerConfig {
6464

6565
@Bean
66-
@ServiceConnection("redis")
66+
@ServiceConnection
6767
RedisContainer redisContainer() {
6868
return TestImage.container(EventRecordingRedisContainer.class);
6969
}

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/lifecycle/TestcontainersLifecycleOrderWithScopeIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.List;
2323
import java.util.Map;
2424

25+
import com.redis.testcontainers.RedisContainer;
2526
import org.junit.jupiter.api.Test;
2627
import org.junit.jupiter.api.extension.ExtendWith;
2728
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -34,7 +35,6 @@
3435
import org.springframework.boot.testcontainers.lifecycle.TestcontainersLifecycleOrderWithScopeIntegrationTests.TestConfig;
3536
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
3637
import org.springframework.boot.testsupport.container.DisabledIfDockerUnavailable;
37-
import org.springframework.boot.testsupport.container.RedisContainer;
3838
import org.springframework.boot.testsupport.container.TestImage;
3939
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
4040
import org.springframework.context.annotation.Bean;
@@ -74,7 +74,7 @@ static class ContainerConfig {
7474

7575
@Bean
7676
@Scope("custom")
77-
@ServiceConnection("redis")
77+
@ServiceConnection
7878
RedisContainer redisContainer() {
7979
return TestImage.container(EventRecordingRedisContainer.class);
8080
}

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/properties/TestcontainersPropertySourceAutoConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22+
import com.redis.testcontainers.RedisContainer;
2223
import org.junit.jupiter.api.Test;
2324

2425
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -28,7 +29,6 @@
2829
import org.springframework.boot.testcontainers.lifecycle.BeforeTestcontainerUsedEvent;
2930
import org.springframework.boot.testcontainers.lifecycle.TestcontainersLifecycleApplicationContextInitializer;
3031
import org.springframework.boot.testsupport.container.DisabledIfDockerUnavailable;
31-
import org.springframework.boot.testsupport.container.RedisContainer;
3232
import org.springframework.boot.testsupport.container.TestImage;
3333
import org.springframework.context.ApplicationEvent;
3434
import org.springframework.context.annotation.Bean;

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/ServiceConnectionAutoConfigurationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.Set;
2020

21+
import com.redis.testcontainers.RedisContainer;
2122
import org.junit.jupiter.api.Test;
2223
import org.mockito.Mockito;
2324

@@ -32,7 +33,6 @@
3233
import org.springframework.boot.testcontainers.lifecycle.TestcontainersLifecycleApplicationContextInitializer;
3334
import org.springframework.boot.testsupport.classpath.ClassPathExclusions;
3435
import org.springframework.boot.testsupport.container.DisabledIfDockerUnavailable;
35-
import org.springframework.boot.testsupport.container.RedisContainer;
3636
import org.springframework.boot.testsupport.container.TestImage;
3737
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
3838
import org.springframework.context.annotation.Bean;
@@ -134,7 +134,7 @@ static class WithRedisAutoConfiguration {
134134
static class ContainerConfiguration {
135135

136136
@Bean
137-
@ServiceConnection("redis")
137+
@ServiceConnection
138138
RedisContainer redisContainer() {
139139
return TestImage.container(RedisContainer.class);
140140
}

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redis/RedisContainerConnectionDetailsFactoryTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.testcontainers.service.connection.redis;
1818

19+
import com.redis.testcontainers.RedisContainer;
1920
import org.junit.jupiter.api.Test;
2021
import org.testcontainers.junit.jupiter.Container;
2122
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -25,7 +26,6 @@
2526
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
2627
import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails;
2728
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
28-
import org.springframework.boot.testsupport.container.RedisContainer;
2929
import org.springframework.boot.testsupport.container.TestImage;
3030
import org.springframework.context.annotation.Configuration;
3131
import org.springframework.data.redis.connection.RedisConnection;

spring-boot-project/spring-boot-testcontainers/src/dockerTest/java/org/springframework/boot/testcontainers/service/connection/redis/RedisStackContainerConnectionDetailsFactoryTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.testcontainers.service.connection.redis;
1818

19+
import com.redis.testcontainers.RedisStackContainer;
1920
import org.junit.jupiter.api.Test;
2021
import org.testcontainers.junit.jupiter.Container;
2122
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -25,7 +26,6 @@
2526
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
2627
import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails;
2728
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
28-
import org.springframework.boot.testsupport.container.RedisStackContainer;
2929
import org.springframework.boot.testsupport.container.TestImage;
3030
import org.springframework.context.annotation.Configuration;
3131
import org.springframework.data.redis.connection.RedisConnection;

spring-boot-project/spring-boot-tools/spring-boot-test-support-docker/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ dependencies {
3131
optional("org.testcontainers:pulsar")
3232
optional("org.testcontainers:rabbitmq")
3333
optional("org.testcontainers:redpanda")
34+
optional("com.redis:testcontainers-redis")
3435
}

spring-boot-project/spring-boot-tools/spring-boot-test-support-docker/src/main/java/org/springframework/boot/testsupport/container/RedisContainer.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)