From ccbb0b5cb868b610b171956eeb3c6f4062664d8b Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Tue, 15 Apr 2025 10:55:26 +0800 Subject: [PATCH] Polish usage of spring-boot-testcontainers Signed-off-by: Yanming Zhou --- ...-session-sample-boot-findbyusername.gradle | 3 ++- .../java/sample/FindByUsernameTests.java | 19 ++++++-------- .../java/sample/JdbcJsonAttributeTests.java | 20 ++++++++++++--- .../java/sample/TestContainersConfig.java | 25 +++++++++++++------ ...n-sample-boot-reactive-max-sessions.gradle | 2 +- .../com/example/TestcontainersConfig.java | 10 ++++---- ...-sample-boot-reactive-redis-indexed.gradle | 2 +- .../com/example/TestcontainersConfig.java | 10 ++++---- ...ring-session-sample-boot-redis-json.gradle | 3 ++- .../java/sample/HttpRedisJsonTest.java | 16 ++++-------- .../java/sample/RedisSerializerTest.java | 16 ++++-------- .../spring-session-sample-boot-redis.gradle | 3 ++- .../java/sample/BootTests.java | 18 +++++-------- ...n-sample-boot-webflux-custom-cookie.gradle | 3 ++- .../java/sample/AttributeTests.java | 18 +++++-------- .../spring-session-sample-boot-webflux.gradle | 3 ++- .../java/sample/AttributeTests.java | 18 +++++-------- ...pring-session-sample-boot-websocket.gradle | 3 ++- .../java/sample/ApplicationTests.java | 18 +++++-------- 19 files changed, 98 insertions(+), 112 deletions(-) diff --git a/spring-session-samples/spring-session-sample-boot-findbyusername/spring-session-sample-boot-findbyusername.gradle b/spring-session-samples/spring-session-sample-boot-findbyusername/spring-session-sample-boot-findbyusername.gradle index fd5cfd893..d16e26adf 100644 --- a/spring-session-samples/spring-session-sample-boot-findbyusername/spring-session-sample-boot-findbyusername.gradle +++ b/spring-session-samples/spring-session-sample-boot-findbyusername/spring-session-sample-boot-findbyusername.gradle @@ -22,5 +22,6 @@ dependencies { integrationTestCompile "org.htmlunit:htmlunit" integrationTestCompile "org.seleniumhq.selenium:htmlunit3-driver" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-findbyusername/src/integration-test/java/sample/FindByUsernameTests.java b/spring-session-samples/spring-session-sample-boot-findbyusername/src/integration-test/java/sample/FindByUsernameTests.java index c4e15753f..3d42eecc4 100644 --- a/spring-session-samples/spring-session-sample-boot-findbyusername/src/integration-test/java/sample/FindByUsernameTests.java +++ b/spring-session-samples/spring-session-sample-boot-findbyusername/src/integration-test/java/sample/FindByUsernameTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2025 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. @@ -16,12 +16,12 @@ package sample; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; -import org.testcontainers.containers.GenericContainer; import sample.pages.HomePage; import sample.pages.LoginPage; @@ -30,8 +30,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -40,6 +40,7 @@ * @author EddĂș MelĂ©ndez * @author Rob Winch * @author Vedran Pavic + * @author Yanming Zhou */ @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @@ -107,15 +108,9 @@ private static HomePage home(WebDriver driver) { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java index 0a1ee9cb3..5cca54bc0 100644 --- a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java +++ b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/JdbcJsonAttributeTests.java @@ -1,13 +1,25 @@ +/* + * Copyright 2014-2025 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 sample; -import java.sql.Types; import java.util.Base64; -import java.util.List; -import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.Cookie; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/TestContainersConfig.java b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/TestContainersConfig.java index e39a1f342..cd69ba72c 100644 --- a/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/TestContainersConfig.java +++ b/spring-session-samples/spring-session-sample-boot-jdbc-json-attribute/src/test/java/sample/TestContainersConfig.java @@ -1,3 +1,19 @@ +/* + * Copyright 2014-2025 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 sample; import org.testcontainers.containers.PostgreSQLContainer; @@ -10,17 +26,10 @@ @TestConfiguration(proxyBeanMethods = false) public class TestContainersConfig { - static PostgreSQLContainer postgresql = new PostgreSQLContainer<>(DockerImageName.parse("postgres:16.1")) - .withExposedPorts(5432); - - static { - postgresql.start(); - } - @Bean @ServiceConnection PostgreSQLContainer postgresContainer() { - return postgresql; + return new PostgreSQLContainer<>(DockerImageName.parse("postgres:16.1")); } } diff --git a/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/spring-session-sample-boot-reactive-max-sessions.gradle b/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/spring-session-sample-boot-reactive-max-sessions.gradle index 447d5b30f..95a2520e6 100644 --- a/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/spring-session-sample-boot-reactive-max-sessions.gradle +++ b/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/spring-session-sample-boot-reactive-max-sessions.gradle @@ -13,7 +13,7 @@ dependencies { testImplementation 'io.projectreactor:reactor-test' testImplementation 'org.springframework.security:spring-security-test' testImplementation 'org.springframework.boot:spring-boot-testcontainers' - testImplementation 'org.testcontainers:junit-jupiter' + testImplementation 'com.redis:testcontainers-redis' testImplementation "org.htmlunit:htmlunit" testImplementation "org.seleniumhq.selenium:htmlunit3-driver" diff --git a/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/src/test/java/com/example/TestcontainersConfig.java b/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/src/test/java/com/example/TestcontainersConfig.java index e91933f51..38753dffb 100644 --- a/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/src/test/java/com/example/TestcontainersConfig.java +++ b/spring-session-samples/spring-session-sample-boot-reactive-max-sessions/src/test/java/com/example/TestcontainersConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2024 the original author or authors. + * Copyright 2014-2025 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. @@ -16,7 +16,7 @@ package com.example; -import org.testcontainers.containers.GenericContainer; +import com.redis.testcontainers.RedisContainer; import org.testcontainers.utility.DockerImageName; import org.springframework.boot.test.context.TestConfiguration; @@ -27,9 +27,9 @@ public class TestcontainersConfig { @Bean - @ServiceConnection(name = "redis") - GenericContainer redisContainer() { - return new GenericContainer<>(DockerImageName.parse("redis:6.2.6")).withExposedPorts(6379); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DockerImageName.parse("redis:6.2.6")); } } diff --git a/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/spring-session-sample-boot-reactive-redis-indexed.gradle b/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/spring-session-sample-boot-reactive-redis-indexed.gradle index 4e1a94338..6bd425cea 100644 --- a/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/spring-session-sample-boot-reactive-redis-indexed.gradle +++ b/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/spring-session-sample-boot-reactive-redis-indexed.gradle @@ -11,7 +11,7 @@ dependencies { testImplementation 'io.projectreactor:reactor-test' testImplementation 'org.springframework.security:spring-security-test' testImplementation 'org.springframework.boot:spring-boot-testcontainers' - testImplementation 'org.testcontainers:junit-jupiter' + testImplementation 'com.redis:testcontainers-redis' testImplementation "org.htmlunit:htmlunit" testImplementation "org.seleniumhq.selenium:htmlunit3-driver" diff --git a/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/src/test/java/com/example/TestcontainersConfig.java b/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/src/test/java/com/example/TestcontainersConfig.java index 7be556a06..38753dffb 100644 --- a/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/src/test/java/com/example/TestcontainersConfig.java +++ b/spring-session-samples/spring-session-sample-boot-reactive-redis-indexed/src/test/java/com/example/TestcontainersConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2023 the original author or authors. + * Copyright 2014-2025 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. @@ -16,7 +16,7 @@ package com.example; -import org.testcontainers.containers.GenericContainer; +import com.redis.testcontainers.RedisContainer; import org.testcontainers.utility.DockerImageName; import org.springframework.boot.test.context.TestConfiguration; @@ -27,9 +27,9 @@ public class TestcontainersConfig { @Bean - @ServiceConnection(name = "redis") - GenericContainer redisContainer() { - return new GenericContainer<>(DockerImageName.parse("redis:6.2.6")).withExposedPorts(6379); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DockerImageName.parse("redis:6.2.6")); } } diff --git a/spring-session-samples/spring-session-sample-boot-redis-json/spring-session-sample-boot-redis-json.gradle b/spring-session-samples/spring-session-sample-boot-redis-json/spring-session-sample-boot-redis-json.gradle index 9c9bc33f6..6d9bcc51c 100644 --- a/spring-session-samples/spring-session-sample-boot-redis-json/spring-session-sample-boot-redis-json.gradle +++ b/spring-session-samples/spring-session-sample-boot-redis-json/spring-session-sample-boot-redis-json.gradle @@ -23,5 +23,6 @@ dependencies { integrationTestCompile "org.htmlunit:htmlunit" integrationTestCompile "org.seleniumhq.selenium:htmlunit3-driver" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java b/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java index 7b3d5b23c..19ea45319 100644 --- a/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java +++ b/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/HttpRedisJsonTest.java @@ -18,12 +18,12 @@ import java.util.List; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; -import org.testcontainers.containers.GenericContainer; import sample.pages.HomePage; import sample.pages.HomePage.Attribute; import sample.pages.LoginPage; @@ -34,7 +34,7 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -107,15 +107,9 @@ void createAttribute() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/RedisSerializerTest.java b/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/RedisSerializerTest.java index dde4746c4..e7eda5b3b 100644 --- a/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/RedisSerializerTest.java +++ b/spring-session-samples/spring-session-sample-boot-redis-json/src/integration-test/java/sample/RedisSerializerTest.java @@ -16,14 +16,14 @@ package sample; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.testcontainers.containers.GenericContainer; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.session.data.redis.config.annotation.SpringSessionRedisOperations; @@ -56,15 +56,9 @@ void testRedisTemplate() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-redis/spring-session-sample-boot-redis.gradle b/spring-session-samples/spring-session-sample-boot-redis/spring-session-sample-boot-redis.gradle index 689293e05..6e41816aa 100644 --- a/spring-session-samples/spring-session-sample-boot-redis/spring-session-sample-boot-redis.gradle +++ b/spring-session-samples/spring-session-sample-boot-redis/spring-session-sample-boot-redis.gradle @@ -22,5 +22,6 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" integrationTestCompile "org.htmlunit:htmlunit" integrationTestCompile "org.seleniumhq.selenium:htmlunit3-driver" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-redis/src/integration-test/java/sample/BootTests.java b/spring-session-samples/spring-session-sample-boot-redis/src/integration-test/java/sample/BootTests.java index 1cda5aaf9..b061f74db 100644 --- a/spring-session-samples/spring-session-sample-boot-redis/src/integration-test/java/sample/BootTests.java +++ b/spring-session-samples/spring-session-sample-boot-redis/src/integration-test/java/sample/BootTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2025 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. @@ -16,12 +16,12 @@ package sample; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; -import org.testcontainers.containers.GenericContainer; import sample.pages.HomePage; import sample.pages.LoginPage; @@ -30,8 +30,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -89,15 +89,9 @@ void logout() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/spring-session-sample-boot-webflux-custom-cookie.gradle b/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/spring-session-sample-boot-webflux-custom-cookie.gradle index 4c1631f4b..41c71fb74 100644 --- a/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/spring-session-sample-boot-webflux-custom-cookie.gradle +++ b/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/spring-session-sample-boot-webflux-custom-cookie.gradle @@ -17,5 +17,6 @@ dependencies { integrationTestCompile "org.htmlunit:htmlunit" integrationTestCompile "org.seleniumhq.selenium:htmlunit3-driver" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/src/integration-test/java/sample/AttributeTests.java b/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/src/integration-test/java/sample/AttributeTests.java index 796cefbd7..9268fb16f 100644 --- a/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/src/integration-test/java/sample/AttributeTests.java +++ b/spring-session-samples/spring-session-sample-boot-webflux-custom-cookie/src/integration-test/java/sample/AttributeTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2025 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. @@ -18,13 +18,13 @@ import java.util.List; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; -import org.testcontainers.containers.GenericContainer; import sample.pages.HomePage; import sample.pages.HomePage.Attribute; @@ -33,7 +33,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -95,15 +95,9 @@ void createAttribute() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-webflux/spring-session-sample-boot-webflux.gradle b/spring-session-samples/spring-session-sample-boot-webflux/spring-session-sample-boot-webflux.gradle index a8b1d32bd..3318a5442 100644 --- a/spring-session-samples/spring-session-sample-boot-webflux/spring-session-sample-boot-webflux.gradle +++ b/spring-session-samples/spring-session-sample-boot-webflux/spring-session-sample-boot-webflux.gradle @@ -17,5 +17,6 @@ dependencies { integrationTestCompile "org.htmlunit:htmlunit" integrationTestCompile "org.seleniumhq.selenium:htmlunit3-driver" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-webflux/src/integration-test/java/sample/AttributeTests.java b/spring-session-samples/spring-session-sample-boot-webflux/src/integration-test/java/sample/AttributeTests.java index 2e4898956..01d77f862 100644 --- a/spring-session-samples/spring-session-sample-boot-webflux/src/integration-test/java/sample/AttributeTests.java +++ b/spring-session-samples/spring-session-sample-boot-webflux/src/integration-test/java/sample/AttributeTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2025 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. @@ -18,13 +18,13 @@ import java.util.List; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; -import org.testcontainers.containers.GenericContainer; import sample.pages.HomePage; import sample.pages.HomePage.Attribute; @@ -33,7 +33,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -97,15 +97,9 @@ void createAttribute() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } } diff --git a/spring-session-samples/spring-session-sample-boot-websocket/spring-session-sample-boot-websocket.gradle b/spring-session-samples/spring-session-sample-boot-websocket/spring-session-sample-boot-websocket.gradle index b5a752dea..973bb9909 100644 --- a/spring-session-samples/spring-session-sample-boot-websocket/spring-session-sample-boot-websocket.gradle +++ b/spring-session-samples/spring-session-sample-boot-websocket/spring-session-sample-boot-websocket.gradle @@ -30,5 +30,6 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" testRuntimeOnly "org.junit.platform:junit-platform-launcher" - integrationTestCompile "org.testcontainers:testcontainers" + integrationTestCompile "org.springframework.boot:spring-boot-testcontainers" + integrationTestCompile "com.redis:testcontainers-redis" } diff --git a/spring-session-samples/spring-session-sample-boot-websocket/src/integration-test/java/sample/ApplicationTests.java b/spring-session-samples/spring-session-sample-boot-websocket/src/integration-test/java/sample/ApplicationTests.java index 1a837aaf1..c8da19958 100644 --- a/spring-session-samples/spring-session-sample-boot-websocket/src/integration-test/java/sample/ApplicationTests.java +++ b/spring-session-samples/spring-session-sample-boot-websocket/src/integration-test/java/sample/ApplicationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2025 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. @@ -21,9 +21,9 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; +import com.redis.testcontainers.RedisContainer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.testcontainers.containers.GenericContainer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -31,7 +31,7 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; @@ -78,15 +78,9 @@ void run() { static class Config { @Bean - GenericContainer redisContainer() { - GenericContainer redisContainer = new GenericContainer(DOCKER_IMAGE).withExposedPorts(6379); - redisContainer.start(); - return redisContainer; - } - - @Bean - LettuceConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(redisContainer().getHost(), redisContainer().getFirstMappedPort()); + @ServiceConnection + RedisContainer redisContainer() { + return new RedisContainer(DOCKER_IMAGE); } }