Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build-plugin/spring-boot-gradle-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ dependencies {
dockerTestImplementation(gradleTestKit())
dockerTestImplementation("org.assertj:assertj-core")
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
dockerTestImplementation("org.testcontainers:junit-jupiter")
dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter")
dockerTestImplementation("org.testcontainers:testcontainers")

implementation(project(":buildpack:spring-boot-buildpack-platform"))
Expand Down
2 changes: 1 addition & 1 deletion build-plugin/spring-boot-maven-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ dependencies {
}
dockerTestImplementation("org.assertj:assertj-core")
dockerTestImplementation("org.junit.jupiter:junit-jupiter")
dockerTestImplementation("org.testcontainers:junit-jupiter")
dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter")
dockerTestImplementation("org.testcontainers:testcontainers")

implementation(project(":buildpack:spring-boot-buildpack-platform"))
Expand Down
8 changes: 4 additions & 4 deletions core/spring-boot-testcontainers/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ dependencies {
dockerTestImplementation("org.mockito:mockito-core")
dockerTestImplementation("org.springframework:spring-core-test")
dockerTestImplementation("org.springframework:spring-jdbc")
dockerTestImplementation("org.testcontainers:junit-jupiter")
dockerTestImplementation("org.testcontainers:postgresql")
dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter")
dockerTestImplementation("org.testcontainers:testcontainers-postgresql")

dockerTestRuntimeOnly("com.zaxxer:HikariCP")
dockerTestRuntimeOnly("com.h2database:h2")
Expand All @@ -54,8 +54,8 @@ dependencies {

testImplementation(project(":core:spring-boot-test"))
testImplementation(project(":test-support:spring-boot-test-support"))
testImplementation("org.testcontainers:junit-jupiter")
testImplementation("org.testcontainers:postgresql")
testImplementation("org.testcontainers:testcontainers-junit-jupiter")
testImplementation("org.testcontainers:testcontainers-postgresql")
}

dockerTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.Container;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.testcontainers.beans.TestcontainerBeanDefinition;
import org.springframework.boot.testcontainers.context.ImportTestcontainers;
Expand Down Expand Up @@ -127,7 +127,7 @@ void importWhenHasBadArgsDynamicPropertySourceMethod() {
static class ImportWithoutValue {

@ContainerAnnotation
static PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

}

Expand All @@ -144,21 +144,21 @@ static class NoContainers {
@ImportTestcontainers
static class NullContainer {

static @Nullable PostgreSQLContainer<?> container = null;
static @Nullable PostgreSQLContainer container = null;

}

@ImportTestcontainers
static class NonStaticContainer {

PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

}

interface ContainerDefinitions {

@ContainerAnnotation
PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

}

Expand All @@ -170,7 +170,7 @@ interface ContainerDefinitions {
@ImportTestcontainers
static class ContainerDefinitionsWithDynamicPropertySource {

static PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

@DynamicPropertySource
static void containerProperties(DynamicPropertyRegistry registry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package org.springframework.boot.testcontainers;

import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.testcontainers.service.connection.ServiceConnection;

Expand All @@ -30,6 +30,6 @@ interface LoadTimeWeaverAwareConsumerContainers {

@Container
@ServiceConnection
PostgreSQLContainer<?> postgreSQLContainer = new PostgreSQLContainer<>("postgres:16.1");
PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:16.1");

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand Down Expand Up @@ -90,7 +90,7 @@ public void setUrl(@Nullable String url) {
static class Containers {

@Container
static PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

@DynamicPropertySource
static void setConnectionProperties(DynamicPropertyRegistry registry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
Expand Down Expand Up @@ -54,17 +54,17 @@ void startsInParallel(CapturedOutput out) {
static class ContainerConfig {

@Bean
static PostgreSQLContainer<?> container1() {
static PostgreSQLContainer container1() {
return TestImage.container(PostgreSQLContainer.class);
}

@Bean
static PostgreSQLContainer<?> container2() {
static PostgreSQLContainer container2() {
return TestImage.container(PostgreSQLContainer.class);
}

@Bean
static PostgreSQLContainer<?> container3() {
static PostgreSQLContainer container3() {
return TestImage.container(PostgreSQLContainer.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
Expand Down Expand Up @@ -52,13 +52,13 @@ void startsInParallel(CapturedOutput out) {
static class Containers {

@Container
static PostgreSQLContainer<?> container1 = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container1 = TestImage.container(PostgreSQLContainer.class);

@Container
static PostgreSQLContainer<?> container2 = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container2 = TestImage.container(PostgreSQLContainer.class);

@Container
static PostgreSQLContainer<?> container3 = TestImage.container(PostgreSQLContainer.class);
static PostgreSQLContainer container3 = TestImage.container(PostgreSQLContainer.class);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.aot.test.generate.TestGenerationContext;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
Expand Down Expand Up @@ -142,7 +142,7 @@ static class ContainerConfiguration {

@Bean
@ServiceConnection
PostgreSQLContainer<?> postgresContainer() {
PostgreSQLContainer postgresContainer() {
return TestImage.container(PostgreSQLContainer.class);
}

Expand Down Expand Up @@ -176,7 +176,7 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B

static class TestcontainersRootBeanDefinition extends RootBeanDefinition implements TestcontainerBeanDefinition {

private final PostgreSQLContainer<?> container = TestImage.container(PostgreSQLContainer.class);
private final PostgreSQLContainer container = TestImage.container(PostgreSQLContainer.class);

TestcontainersRootBeanDefinition() {
setBeanClass(PostgreSQLContainer.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import javax.sql.DataSource;

import org.junit.jupiter.api.Test;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.postgresql.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;

import org.springframework.boot.testsupport.container.TestImage;
Expand Down Expand Up @@ -67,7 +67,7 @@ DataSource dataSource() {

}

static class StartCountingPostgreSQLContainer extends PostgreSQLContainer<StartCountingPostgreSQLContainer> {
static class StartCountingPostgreSQLContainer extends PostgreSQLContainer {

final AtomicInteger startCount = new AtomicInteger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
Expand All @@ -45,7 +45,7 @@ class ConnectionDetailsRegistrarTests {

private Origin origin;

private PostgreSQLContainer<?> container;
private PostgreSQLContainer container;

private MergedAnnotation<ServiceConnection> annotation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails;
import org.springframework.boot.autoconfigure.service.connection.ConnectionDetailsFactory;
Expand All @@ -50,7 +50,7 @@ class ContainerConnectionDetailsFactoryTests {

private Origin origin;

private PostgreSQLContainer<?> container;
private PostgreSQLContainer container;

private MergedAnnotation<ServiceConnection> annotation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.FutureContainer;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails;
import org.springframework.boot.origin.Origin;
Expand All @@ -45,7 +45,7 @@ class ContainerConnectionSourceTests {

private Origin origin;

private PostgreSQLContainer<?> container;
private PostgreSQLContainer container;

private MergedAnnotation<ServiceConnection> annotation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentMatchers;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.postgresql.PostgreSQLContainer;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
Expand Down Expand Up @@ -51,7 +51,7 @@ class ServiceConnectionContextCustomizerTests {

private Origin origin;

private PostgreSQLContainer<?> container;
private PostgreSQLContainer container;

private MergedAnnotation<ServiceConnection> annotation;

Expand Down Expand Up @@ -94,8 +94,8 @@ void customizeContextRegistersServiceConnections() {

@Test
void equalsAndHashCode() {
PostgreSQLContainer<?> container1 = mock(PostgreSQLContainer.class);
PostgreSQLContainer<?> container2 = mock(PostgreSQLContainer.class);
PostgreSQLContainer container1 = mock(PostgreSQLContainer.class);
PostgreSQLContainer container2 = mock(PostgreSQLContainer.class);
MergedAnnotation<ServiceConnection> annotation1 = MergedAnnotation.of(ServiceConnection.class,
Map.of("name", "", "type", new Class<?>[0]));
MergedAnnotation<ServiceConnection> annotation2 = MergedAnnotation.of(ServiceConnection.class,
Expand Down
8 changes: 4 additions & 4 deletions documentation/spring-boot-docs/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,10 @@ dependencies {
implementation("org.springframework.security:spring-security-web")
implementation("org.springframework.ws:spring-ws-core")
implementation("org.springframework.ws:spring-ws-test")
implementation("org.testcontainers:junit-jupiter")
implementation("org.testcontainers:neo4j")
implementation("org.testcontainers:mongodb")
implementation("org.testcontainers:elasticsearch")
implementation("org.testcontainers:testcontainers-junit-jupiter")
implementation("org.testcontainers:testcontainers-neo4j")
implementation("org.testcontainers:testcontainers-mongodb")
implementation("org.testcontainers:testcontainers-elasticsearch")
implementation("org.junit.jupiter:junit-jupiter")
implementation("org.yaml:snakeyaml")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ NOTE: In most cases, you will additionally need to configure the application to

A common pattern with Testcontainers is to declare the container instances as static fields in an interface.

For example, the following interface declares two containers, one named `mongo` of type javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.containers.MongoDBContainer[] and another named `neo4j` of type javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.containers.Neo4jContainer[]:
For example, the following interface declares two containers, one named `mongo` of type javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.mongodb.MongoDBContainer[] and another named `neo4j` of type javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.neo4j.Neo4jContainer[]:

include-code::MyContainers[]

Expand Down Expand Up @@ -150,10 +150,10 @@ The following service connection factories are provided in the `spring-boot-test
| Containers of type javadoc:{url-testcontainers-jdbc-javadoc}/org.testcontainers.containers.JdbcDatabaseContainer[]

| javadoc:org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails[]
| Containers of type javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.containers.MongoDBContainer[] or javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.mongodb.MongoDBAtlasLocalContainer[]
| Containers of type javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.mongodb.MongoDBContainer[] or javadoc:{url-testcontainers-mongodb-javadoc}/org.testcontainers.mongodb.MongoDBAtlasLocalContainer[]

| javadoc:org.springframework.boot.neo4j.autoconfigure.Neo4jConnectionDetails[]
| Containers of type javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.containers.Neo4jContainer[]
| Containers of type javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.neo4j.Neo4jContainer[]

| javadoc:org.springframework.boot.opentelemetry.actuate.autoconfigure.logging.OpenTelemetryLoggingConnectionDetails[]
| Containers named "otel/opentelemetry-collector-contrib" or of type javadoc:org.testcontainers.grafana.LgtmStackContainer[]
Expand All @@ -165,16 +165,16 @@ The following service connection factories are provided in the `spring-boot-test
| Containers named "otel/opentelemetry-collector-contrib" or of type javadoc:org.testcontainers.grafana.LgtmStackContainer[]

| javadoc:org.springframework.boot.pulsar.autoconfigure.PulsarConnectionDetails[]
| Containers of type javadoc:{url-testcontainers-pulsar-javadoc}/org.testcontainers.containers.PulsarContainer[]
| Containers of type javadoc:{url-testcontainers-pulsar-javadoc}/org.testcontainers.pulsar.PulsarContainer[]

| javadoc:org.springframework.boot.r2dbc.autoconfigure.R2dbcConnectionDetails[]
| Containers of type
javadoc:org.testcontainers.clickhouse.ClickHouseContainer[],
javadoc:{url-testcontainers-mariadb-javadoc}/org.testcontainers.containers.MariaDBContainer[], javadoc:{url-testcontainers-mssqlserver-javadoc}/org.testcontainers.containers.MSSQLServerContainer[], javadoc:{url-testcontainers-mysql-javadoc}/org.testcontainers.containers.MySQLContainer[],
javadoc:org.testcontainers.oracle.OracleContainer[OracleContainer (free)], javadoc:{url-testcontainers-oracle-xe-javadoc}/org.testcontainers.containers.OracleContainer[OracleContainer (XE)] or javadoc:{url-testcontainers-postgresql-javadoc}/org.testcontainers.containers.PostgreSQLContainer[]
javadoc:{url-testcontainers-mariadb-javadoc}/org.testcontainers.mariadb.MariaDBContainer[], javadoc:{url-testcontainers-mssqlserver-javadoc}/org.testcontainers.mssqlserver.MSSQLServerContainer[], javadoc:{url-testcontainers-mysql-javadoc}/org.testcontainers.mysql.MySQLContainer[],
javadoc:org.testcontainers.oracle.OracleContainer[OracleContainer (free)], javadoc:{url-testcontainers-oracle-xe-javadoc}/org.testcontainers.containers.OracleContainer[OracleContainer (XE)] or javadoc:{url-testcontainers-postgresql-javadoc}/org.testcontainers.postgresql.PostgreSQLContainer[]

| javadoc:org.springframework.boot.amqp.autoconfigure.RabbitConnectionDetails[]
| Containers of type javadoc:{url-testcontainers-rabbitmq-javadoc}/org.testcontainers.containers.RabbitMQContainer[]
| Containers of type javadoc:{url-testcontainers-rabbitmq-javadoc}/org.testcontainers.rabbitmq.RabbitMQContainer[]

| javadoc:org.springframework.boot.data.redis.autoconfigure.RedisConnectionDetails[]
| Containers of type javadoc:com.redis.testcontainers.RedisContainer[] or javadoc:com.redis.testcontainers.RedisStackContainer[], or containers named "redis", "redis/redis-stack" or "redis/redis-stack-server"
Expand All @@ -186,7 +186,7 @@ javadoc:org.testcontainers.oracle.OracleContainer[OracleContainer (free)], javad
[TIP]
====
By default all applicable connection details beans will be created for a given javadoc:org.testcontainers.containers.Container[].
For example, a javadoc:{url-testcontainers-postgresql-javadoc}/org.testcontainers.containers.PostgreSQLContainer[] will create both javadoc:org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails[] and javadoc:org.springframework.boot.r2dbc.autoconfigure.R2dbcConnectionDetails[].
For example, a javadoc:{url-testcontainers-postgresql-javadoc}/org.testcontainers.postgresql.PostgreSQLContainer[] will create both javadoc:org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails[] and javadoc:org.springframework.boot.r2dbc.autoconfigure.R2dbcConnectionDetails[].

If you want to create only a subset of the applicable types, you can use the `type` attribute of javadoc:org.springframework.boot.testcontainers.service.connection.ServiceConnection[format=annotation].
====
Expand All @@ -197,7 +197,7 @@ This works as long as Spring Boot is able to get the instance of the javadoc:org

If you're using a javadoc:org.springframework.context.annotation.Bean[format=annotation] method, Spring Boot won't call the bean method to get the Docker image name, because this would cause eager initialization issues.
Instead, the return type of the bean method is used to find out which connection detail should be used.
This works as long as you're using typed containers such as javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.containers.Neo4jContainer[] or javadoc:{url-testcontainers-rabbitmq-javadoc}/org.testcontainers.containers.RabbitMQContainer[].
This works as long as you're using typed containers such as javadoc:{url-testcontainers-neo4j-javadoc}/org.testcontainers.neo4j.Neo4jContainer[] or javadoc:{url-testcontainers-rabbitmq-javadoc}/org.testcontainers.rabbitmq.RabbitMQContainer[].
This stops working if you're using javadoc:org.testcontainers.containers.GenericContainer[], for example with Redis as shown in the following example:

include-code::MyRedisConfiguration[]
Expand Down
Loading