diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/activemq/ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/activemq/ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests.java index 0842d7693974..916e2413e8e2 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/activemq/ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/activemq/ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.activemq; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -29,15 +27,10 @@ * * @author Stephane Nicoll */ -class ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("activemq-compose.yaml", TestImage.ACTIVE_MQ); - } +class ActiveMQDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - ActiveMQConnectionDetails connectionDetails = run(ActiveMQConnectionDetails.class); + @DockerComposeTest(composeFile = "activemq-compose.yaml", image = TestImage.ACTIVE_MQ) + void runCreatesConnectionDetails(ActiveMQConnectionDetails connectionDetails) { assertThat(connectionDetails.getBrokerUrl()).isNotNull().startsWith("tcp://"); assertThat(connectionDetails.getUser()).isEqualTo("root"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/cassandra/CassandraDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/cassandra/CassandraDockerComposeConnectionDetailsFactoryIntegrationTests.java index 011234fb2649..d51a5f39a9fa 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/cassandra/CassandraDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/cassandra/CassandraDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -18,11 +18,9 @@ import java.util.List; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.cassandra.CassandraConnectionDetails; import org.springframework.boot.autoconfigure.cassandra.CassandraConnectionDetails.Node; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +30,10 @@ * * @author Scott Frederick */ -class CassandraDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - CassandraDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("cassandra-compose.yaml", TestImage.CASSANDRA); - } +class CassandraDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - CassandraConnectionDetails connectionDetails = run(CassandraConnectionDetails.class); + @DockerComposeTest(composeFile = "cassandra-compose.yaml", image = TestImage.CASSANDRA) + void runCreatesConnectionDetails(CassandraConnectionDetails connectionDetails) { List contactPoints = connectionDetails.getContactPoints(); assertThat(contactPoints).hasSize(1); Node node = contactPoints.get(0); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/elasticsearch/ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/elasticsearch/ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests.java index e6d96b5d0e95..d49c8d2069b1 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/elasticsearch/ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/elasticsearch/ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,12 +16,10 @@ package org.springframework.boot.docker.compose.service.connection.elasticsearch; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchConnectionDetails; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchConnectionDetails.Node; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchConnectionDetails.Node.Protocol; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -33,15 +31,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("elasticsearch-compose.yaml", TestImage.ELASTICSEARCH_8); - } +class ElasticsearchDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - ElasticsearchConnectionDetails connectionDetails = run(ElasticsearchConnectionDetails.class); + @DockerComposeTest(composeFile = "elasticsearch-compose.yaml", image = TestImage.ELASTICSEARCH_8) + void runCreatesConnectionDetails(ElasticsearchConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("elastic"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getPathPrefix()).isNull(); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/flyway/JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/flyway/JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests.java index 4165ca96da52..c2059f3c6439 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/flyway/JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/flyway/JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.flyway; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.flyway.FlywayConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -29,15 +27,10 @@ * * @author Andy Wilkinson */ -class JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests() { - super("flyway-compose.yaml", TestImage.POSTGRESQL); - } +class JdbcAdaptingFlywayConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - FlywayConnectionDetails connectionDetails = run(FlywayConnectionDetails.class); + @DockerComposeTest(composeFile = "flyway-compose.yaml", image = TestImage.POSTGRESQL) + void runCreatesConnectionDetails(FlywayConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/liquibase/JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/liquibase/JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests.java index f7c82037c27b..d112e578ab2a 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/liquibase/JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/liquibase/JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.liquibase; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.liquibase.LiquibaseConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -29,15 +27,10 @@ * * @author Andy Wilkinson */ -class JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests() { - super("liquibase-compose.yaml", TestImage.POSTGRESQL); - } +class JdbcAdaptingLiquibaseConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - LiquibaseConnectionDetails connectionDetails = run(LiquibaseConnectionDetails.class); + @DockerComposeTest(composeFile = "liquibase-compose.yaml", image = TestImage.POSTGRESQL) + void runCreatesConnectionDetails(LiquibaseConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 8ba804a0496f..a5c926a9aeff 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.mariadb; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -31,15 +29,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mariadb-compose.yaml", TestImage.MARIADB); - } +class MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mariadb-compose.yaml", image = TestImage.MARIADB) + void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:mariadb://").endsWith("/mydatabase"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 172d31bb864a..dd5bacd134bd 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mariadb/MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -17,10 +17,9 @@ package org.springframework.boot.docker.compose.service.connection.mariadb; import io.r2dbc.spi.ConnectionFactoryOptions; -import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +31,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - MariaDbR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mariadb-compose.yaml", TestImage.MARIADB); - } - - @Test - void runCreatesConnectionDetails() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mariadb-compose.yaml", image = TestImage.MARIADB) + void runCreatesConnectionDetails(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("database=mydatabase", "driver=mariadb", "password=REDACTED", "user=myuser"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java index 45e7809df353..833df4430031 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -17,10 +17,9 @@ package org.springframework.boot.docker.compose.service.connection.mongo; import com.mongodb.ConnectionString; -import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.mongo.MongoConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -33,15 +32,10 @@ * @author Phillip Webb * @author Scott Frederick */ -class MongoDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class MongoDockerComposeConnectionDetailsFactoryIntegrationTests { - MongoDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mongo-compose.yaml", TestImage.MONGODB); - } - - @Test - void runCreatesConnectionDetails() { - MongoConnectionDetails connectionDetails = run(MongoConnectionDetails.class); + @DockerComposeTest(composeFile = "mongo-compose.yaml", image = TestImage.MONGODB) + void runCreatesConnectionDetails(MongoConnectionDetails connectionDetails) { ConnectionString connectionString = connectionDetails.getConnectionString(); assertThat(connectionString.getCredential().getUserName()).isEqualTo("root"); assertThat(connectionString.getCredential().getPassword()).isEqualTo("secret".toCharArray()); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 4ee038c74235..a42095f16f37 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.mysql; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -31,15 +29,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mysql-compose.yaml", TestImage.MYSQL); - } +class MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mysql-compose.yaml", image = TestImage.MYSQL) + void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:mysql://").endsWith("/mydatabase"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 59a2f0b72f76..b8489b52d89c 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mysql/MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -17,10 +17,9 @@ package org.springframework.boot.docker.compose.service.connection.mysql; import io.r2dbc.spi.ConnectionFactoryOptions; -import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +31,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - MySqlR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mysql-compose.yaml", TestImage.MYSQL); - } - - @Test - void runCreatesConnectionDetails() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mysql-compose.yaml", image = TestImage.MYSQL) + void runCreatesConnectionDetails(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("database=mydatabase", "driver=mysql", "password=REDACTED", "user=myuser"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/neo4j/Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/neo4j/Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests.java index 8ddf02d46cd8..bbeaf95d7ccc 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/neo4j/Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/neo4j/Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,13 +16,12 @@ package org.springframework.boot.docker.compose.service.connection.neo4j; -import org.junit.jupiter.api.Test; import org.neo4j.driver.AuthTokens; import org.neo4j.driver.Driver; import org.neo4j.driver.GraphDatabase; import org.springframework.boot.autoconfigure.neo4j.Neo4jConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -33,15 +32,10 @@ * * @author Andy Wilkinson */ -class Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests { - Neo4jDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("neo4j-compose.yaml", TestImage.NEO4J); - } - - @Test - void runCreatesConnectionDetailsThatCanAccessNeo4j() { - Neo4jConnectionDetails connectionDetails = run(Neo4jConnectionDetails.class); + @DockerComposeTest(composeFile = "neo4j-compose.yaml", image = TestImage.NEO4J) + void runCreatesConnectionDetailsThatCanAccessNeo4j(Neo4jConnectionDetails connectionDetails) { assertThat(connectionDetails.getAuthToken()).isEqualTo(AuthTokens.basic("neo4j", "secret")); try (Driver driver = GraphDatabase.driver(connectionDetails.getUri(), connectionDetails.getAuthToken())) { assertThatNoException().isThrownBy(driver::verifyConnectivity); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index b86565eb440d..b8bbc33e3a3b 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -20,11 +20,10 @@ import java.time.Duration; import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -41,17 +40,12 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The Oracle image has no ARM support") -class OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests - extends AbstractDockerComposeIntegrationTests { +class OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("oracle-compose.yaml", TestImage.ORACLE_FREE); - } - - @Test @SuppressWarnings("unchecked") - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() throws Exception { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_FREE) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails) + throws Exception { assertThat(connectionDetails.getUsername()).isEqualTo("app_user"); assertThat(connectionDetails.getPassword()).isEqualTo("app_user_secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/freepdb1"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 8ee8341ad174..2076fdaabf8d 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -21,11 +21,10 @@ import io.r2dbc.spi.ConnectionFactories; import io.r2dbc.spi.ConnectionFactoryOptions; import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -40,16 +39,10 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The Oracle image has no ARM support") -class OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests - extends AbstractDockerComposeIntegrationTests { +class OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - OracleFreeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("oracle-compose.yaml", TestImage.ORACLE_FREE); - } - - @Test - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_FREE) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("database=freepdb1", "driver=oracle", "password=REDACTED", "user=app_user"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 2632bb9c7844..7d5e19914e3e 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -20,11 +20,10 @@ import java.time.Duration; import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -41,16 +40,12 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The Oracle image has no ARM support") -class OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("oracle-compose.yaml", TestImage.ORACLE_XE); - } - - @Test @SuppressWarnings("unchecked") - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() throws Exception { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_XE) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails) + throws Exception { assertThat(connectionDetails.getUsername()).isEqualTo("app_user"); assertThat(connectionDetails.getPassword()).isEqualTo("app_user_secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/xepdb1"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 6b5fc6b516c9..eee17f6106b8 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -21,11 +21,10 @@ import io.r2dbc.spi.ConnectionFactories; import io.r2dbc.spi.ConnectionFactoryOptions; import org.awaitility.Awaitility; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -40,15 +39,10 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The Oracle image has no ARM support") -class OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - OracleXeR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("oracle-compose.yaml", TestImage.ORACLE_XE); - } - - @Test - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_XE) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("database=xepdb1", "driver=oracle", "password=REDACTED", "user=app_user"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests.java index 2773ee22e1b9..3ec07184e9e9 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.otlp; -import org.junit.jupiter.api.Test; - import org.springframework.boot.actuate.autoconfigure.metrics.export.otlp.OtlpMetricsConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -30,16 +28,10 @@ * * @author Eddú Meléndez */ -class OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests - extends AbstractDockerComposeIntegrationTests { - - OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("otlp-compose.yaml", TestImage.OPENTELEMETRY); - } +class OpenTelemetryMetricsDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - OtlpMetricsConnectionDetails connectionDetails = run(OtlpMetricsConnectionDetails.class); + @DockerComposeTest(composeFile = "otlp-compose.yaml", image = TestImage.OPENTELEMETRY) + void runCreatesConnectionDetails(OtlpMetricsConnectionDetails connectionDetails) { assertThat(connectionDetails.getUrl()).startsWith("http://").endsWith("/v1/metrics"); } diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java index 53bdb735d0d9..97fc794c628b 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/otlp/OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.otlp; -import org.junit.jupiter.api.Test; - import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -30,16 +28,10 @@ * * @author Eddú Meléndez */ -class OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests - extends AbstractDockerComposeIntegrationTests { - - OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("otlp-compose.yaml", TestImage.OPENTELEMETRY); - } +class OpenTelemetryTracingDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - OtlpTracingConnectionDetails connectionDetails = run(OtlpTracingConnectionDetails.class); + @DockerComposeTest(composeFile = "otlp-compose.yaml", image = TestImage.OPENTELEMETRY) + void runCreatesConnectionDetails(OtlpTracingConnectionDetails connectionDetails) { assertThat(connectionDetails.getUrl()).startsWith("http://").endsWith("/v1/traces"); } diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 8a96eb5df700..c022cad841b6 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.postgres; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -31,15 +29,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("postgres-compose.yaml", TestImage.POSTGRESQL); - } +class PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "postgres-compose.yaml", image = TestImage.POSTGRESQL) + void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 8baa22896d0d..ef1a9322bcca 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -17,10 +17,9 @@ package org.springframework.boot.docker.compose.service.connection.postgres; import io.r2dbc.spi.ConnectionFactoryOptions; -import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +31,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("postgres-compose.yaml", TestImage.POSTGRESQL); - } - - @Test - void runCreatesConnectionDetails() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "postgres-compose.yaml", image = TestImage.POSTGRESQL) + void runCreatesConnectionDetails(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("database=mydatabase", "driver=postgresql", "password=REDACTED", "user=myuser"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/pulsar/PulsarDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/pulsar/PulsarDockerComposeConnectionDetailsFactoryIntegrationTests.java index 01f383eeeb37..bbecc6c772ed 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/pulsar/PulsarDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/pulsar/PulsarDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2012-2024 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,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.pulsar; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.pulsar.PulsarConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -29,15 +27,10 @@ * * @author Chris Bono */ -class PulsarDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - PulsarDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("pulsar-compose.yaml", TestImage.PULSAR); - } +class PulsarDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - PulsarConnectionDetails connectionDetails = run(PulsarConnectionDetails.class); + @DockerComposeTest(composeFile = "pulsar-compose.yaml", image = TestImage.PULSAR) + void runCreatesConnectionDetails(PulsarConnectionDetails connectionDetails) { assertThat(connectionDetails).isNotNull(); assertThat(connectionDetails.getBrokerUrl()).matches("^pulsar://\\S+:\\d+"); assertThat(connectionDetails.getAdminUrl()).matches("^http://\\S+:\\d+"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/rabbit/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/rabbit/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java index 13ab04afeac3..b774cff4f815 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/rabbit/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/rabbit/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,11 +16,9 @@ package org.springframework.boot.docker.compose.service.connection.rabbit; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.amqp.RabbitConnectionDetails; import org.springframework.boot.autoconfigure.amqp.RabbitConnectionDetails.Address; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +30,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class RabbitDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - RabbitDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("rabbit-compose.yaml", TestImage.RABBITMQ); - } +class RabbitDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - RabbitConnectionDetails connectionDetails = run(RabbitConnectionDetails.class); + @DockerComposeTest(composeFile = "rabbit-compose.yaml", image = TestImage.RABBITMQ) + void runCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getVirtualHost()).isEqualTo("/"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/redis/RedisDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/redis/RedisDockerComposeConnectionDetailsFactoryIntegrationTests.java index e7b3c7ff12bc..1c1a35731233 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/redis/RedisDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/redis/RedisDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,11 +16,9 @@ package org.springframework.boot.docker.compose.service.connection.redis; -import org.junit.jupiter.api.Test; - import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails; import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails.Standalone; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -32,15 +30,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class RedisDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - RedisDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("redis-compose.yaml", TestImage.REDIS); - } +class RedisDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - RedisConnectionDetails connectionDetails = run(RedisConnectionDetails.class); + @DockerComposeTest(composeFile = "redis-compose.yaml", image = TestImage.REDIS) + void runCreatesConnectionDetails(RedisConnectionDetails connectionDetails) { Standalone standalone = connectionDetails.getStandalone(); assertThat(connectionDetails.getUsername()).isNull(); assertThat(connectionDetails.getPassword()).isNull(); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index f61661774155..74b1ea45f4f0 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -18,11 +18,10 @@ import java.sql.Driver; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -39,16 +38,12 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The SQL server image has no ARM support") -class SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { +class SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { - SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mssqlserver-compose.yaml", TestImage.SQL_SERVER); - } - - @Test @SuppressWarnings("unchecked") - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() throws ClassNotFoundException, LinkageError { - JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mssqlserver-compose.yaml", image = TestImage.SQL_SERVER) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails) + throws ClassNotFoundException, LinkageError { assertThat(connectionDetails.getUsername()).isEqualTo("SA"); assertThat(connectionDetails.getPassword()).isEqualTo("verYs3cret"); assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:sqlserver://"); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index fff7aa22683f..d1936fb5b871 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/sqlserver/SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -20,11 +20,10 @@ import io.r2dbc.spi.ConnectionFactories; import io.r2dbc.spi.ConnectionFactoryOptions; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.OS; import org.springframework.boot.autoconfigure.r2dbc.R2dbcConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.testsupport.container.TestImage; import org.springframework.boot.testsupport.junit.DisabledOnOs; @@ -39,16 +38,10 @@ */ @DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64", disabledReason = "The SQL server image has no ARM support") -class SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests - extends AbstractDockerComposeIntegrationTests { +class SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests { - SqlServerR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("mssqlserver-compose.yaml", TestImage.SQL_SERVER); - } - - @Test - void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() { - R2dbcConnectionDetails connectionDetails = run(R2dbcConnectionDetails.class); + @DockerComposeTest(composeFile = "mssqlserver-compose.yaml", image = TestImage.SQL_SERVER) + void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(R2dbcConnectionDetails connectionDetails) { ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions(); assertThat(connectionFactoryOptions.toString()).contains("driver=mssql", "password=REDACTED", "user=SA"); assertThat(connectionFactoryOptions.getRequiredValue(ConnectionFactoryOptions.PASSWORD)) diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/AbstractDockerComposeIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/AbstractDockerComposeIntegrationTests.java deleted file mode 100644 index f3c68124e9f4..000000000000 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/AbstractDockerComposeIntegrationTests.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2012-2024 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 org.springframework.boot.docker.compose.service.connection.test; - -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Path; -import java.util.LinkedHashMap; -import java.util.Map; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.io.TempDir; -import org.testcontainers.utility.DockerImageName; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.SpringApplicationShutdownHandlers; -import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails; -import org.springframework.boot.testsupport.container.TestImage; -import org.springframework.boot.testsupport.process.DisabledIfProcessUnavailable; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.util.FileCopyUtils; -import org.springframework.util.function.ThrowingSupplier; - -import static org.assertj.core.api.Assertions.fail; - -/** - * Abstract base class for integration tests. - * - * @author Moritz Halbritter - * @author Andy Wilkinson - * @author Scott Frederick - */ -@DisabledIfProcessUnavailable({ "docker", "version" }) -@DisabledIfProcessUnavailable({ "docker", "compose" }) -public abstract class AbstractDockerComposeIntegrationTests { - - @TempDir - private static Path tempDir; - - private final Resource composeResource; - - private final DockerImageName dockerImageName; - - @AfterAll - static void shutDown() { - SpringApplicationShutdownHandlers shutdownHandlers = SpringApplication.getShutdownHandlers(); - ((Runnable) shutdownHandlers).run(); - } - - protected AbstractDockerComposeIntegrationTests(String composeResource, TestImage testImage) { - this.composeResource = new ClassPathResource(composeResource, getClass()); - this.dockerImageName = DockerImageName.parse(testImage.toString()); - } - - protected final T run(Class type) { - SpringApplication application = new SpringApplication(Config.class); - Map properties = new LinkedHashMap<>(); - properties.put("spring.docker.compose.skip.in-tests", "false"); - properties.put("spring.docker.compose.file", - transformedComposeFile(ThrowingSupplier.of(this.composeResource::getFile).get(), this.dockerImageName)); - properties.put("spring.docker.compose.stop.command", "down"); - application.setDefaultProperties(properties); - return application.run().getBean(type); - } - - private File transformedComposeFile(File composeFile, DockerImageName imageName) { - File tempComposeFile = Path.of(tempDir.toString(), composeFile.getName()).toFile(); - try { - String composeFileContent = FileCopyUtils.copyToString(new FileReader(composeFile)); - composeFileContent = composeFileContent.replace("{imageName}", imageName.asCanonicalNameString()); - FileCopyUtils.copy(composeFileContent, new FileWriter(tempComposeFile)); - } - catch (IOException ex) { - fail("Error transforming Docker compose file '" + composeFile + "' to '" + tempComposeFile + "': " - + ex.getMessage()); - } - return tempComposeFile; - } - - @Configuration(proxyBeanMethods = false) - static class Config { - - } - -} diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTest.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTest.java new file mode 100644 index 000000000000..1b32ead7945a --- /dev/null +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTest.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2024 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 org.springframework.boot.docker.compose.service.connection.test; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails; +import org.springframework.boot.testsupport.container.TestImage; + +/** + * A {@link Test test} that exercises Spring Boot's Docker Compose support. + *

+ * Before the test is executed, a {@link SpringApplication} that is configured to use the + * specified Docker Compose file is started. Any bean that exists in the resulting + * application context can be injected as a parameter into the test method. Typically, + * this will be a {@link ConnectionDetails} implementation. + *

+ * Once the test has executed, the {@link SpringApplication} is tidied up such that the + * Docker Compose services are stopped and destroyed and the application context is + * closed. + * + * @author Andy Wilkinson + */ +@Test +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@ExtendWith(DockerComposeTestExtension.class) +public @interface DockerComposeTest { + + /** + * The name of the compose file to use. Loaded as a classpath resource relative to the + * test class. The image name in the compose file can be parameterized using + * {image} and it will be replaced using the specified {@link #image} + * reference. + * @return the compose file + */ + String composeFile(); + + /** + * The Docker image reference. + * @return the Docker image reference + * @see TestImage + */ + TestImage image(); + +} diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTestExtension.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTestExtension.java new file mode 100644 index 000000000000..c0ee2a7cf09b --- /dev/null +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/test/DockerComposeTestExtension.java @@ -0,0 +1,148 @@ +/* + * Copyright 2012-2024 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 org.springframework.boot.docker.compose.service.connection.test; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ExtensionContext.Namespace; +import org.junit.jupiter.api.extension.ExtensionContext.Store; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.SpringApplicationShutdownHandlers; +import org.springframework.boot.testsupport.container.TestImage; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import static org.assertj.core.api.Assertions.fail; + +/** + * {@link Extension} for {@link DockerComposeTest @DockerComposeTest}. + * + * @author Andy Wilkinson + */ +class DockerComposeTestExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback, ParameterResolver { + + private static final Namespace NAMESPACE = Namespace.create(DockerComposeTestExtension.class); + + private static final String STORE_KEY_COMPOSE_FILE = "compose-file"; + + private static final String STORE_KEY_APPLICATION_CONTEXT = "application-context"; + + @Override + public void beforeTestExecution(ExtensionContext context) throws Exception { + Path transformedComposeFile = prepareComposeFile(context); + Store store = context.getStore(NAMESPACE); + store.put(STORE_KEY_COMPOSE_FILE, transformedComposeFile); + try { + SpringApplication application = prepareApplication(transformedComposeFile); + store.put(STORE_KEY_APPLICATION_CONTEXT, application.run()); + } + catch (Exception ex) { + cleanUp(context); + throw ex; + } + } + + private Path prepareComposeFile(ExtensionContext context) { + DockerComposeTest dockerComposeTest = context.getRequiredTestMethod().getAnnotation(DockerComposeTest.class); + TestImage image = dockerComposeTest.image(); + Resource composeResource = new ClassPathResource(dockerComposeTest.composeFile(), + context.getRequiredTestClass()); + return transformedComposeFile(composeResource, image); + } + + private Path transformedComposeFile(Resource composeFileResource, TestImage image) { + try { + Path composeFile = composeFileResource.getFile().toPath(); + Path transformedComposeFile = Files.createTempFile("", "-" + composeFile.getFileName().toString()); + String transformedContent = Files.readString(composeFile).replace("{imageName}", image.toString()); + Files.writeString(transformedComposeFile, transformedContent); + return transformedComposeFile; + } + catch (IOException ex) { + fail("Error transforming Docker compose file '" + composeFileResource + "': " + ex.getMessage()); + } + return null; + } + + private SpringApplication prepareApplication(Path transformedComposeFile) { + SpringApplication application = new SpringApplication(Config.class); + Map properties = new LinkedHashMap<>(); + properties.put("spring.docker.compose.skip.in-tests", "false"); + properties.put("spring.docker.compose.file", transformedComposeFile); + properties.put("spring.docker.compose.stop.command", "down"); + application.setDefaultProperties(properties); + return application; + } + + @Override + public void afterTestExecution(ExtensionContext context) throws Exception { + cleanUp(context); + } + + private void cleanUp(ExtensionContext context) throws Exception { + Store store = context.getStore(NAMESPACE); + runShutdownHandlers(); + deleteComposeFile(store); + } + + private void runShutdownHandlers() { + SpringApplicationShutdownHandlers shutdownHandlers = SpringApplication.getShutdownHandlers(); + ((Runnable) shutdownHandlers).run(); + } + + private void deleteComposeFile(Store store) throws IOException { + Path composeFile = store.get(STORE_KEY_COMPOSE_FILE, Path.class); + if (composeFile != null) { + Files.delete(composeFile); + } + } + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) + throws ParameterResolutionException { + return true; + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) + throws ParameterResolutionException { + ConfigurableApplicationContext applicationContext = extensionContext.getStore(NAMESPACE) + .get(STORE_KEY_APPLICATION_CONTEXT, ConfigurableApplicationContext.class); + return (applicationContext != null) ? applicationContext.getBean(parameterContext.getParameter().getType()) + : null; + } + + @Configuration(proxyBeanMethods = false) + static class Config { + + } + +} diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/zipkin/ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/zipkin/ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests.java index af36be034940..1c8540cffd4b 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/zipkin/ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/zipkin/ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,10 +16,8 @@ package org.springframework.boot.docker.compose.service.connection.zipkin; -import org.junit.jupiter.api.Test; - import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConnectionDetails; -import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests; +import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.testsupport.container.TestImage; import static org.assertj.core.api.Assertions.assertThat; @@ -31,15 +29,10 @@ * @author Andy Wilkinson * @author Phillip Webb */ -class ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests { - - ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests() { - super("zipkin-compose.yaml", TestImage.ZIPKIN); - } +class ZipkinDockerComposeConnectionDetailsFactoryIntegrationTests { - @Test - void runCreatesConnectionDetails() { - ZipkinConnectionDetails connectionDetails = run(ZipkinConnectionDetails.class); + @DockerComposeTest(composeFile = "zipkin-compose.yaml", image = TestImage.ZIPKIN) + void runCreatesConnectionDetails(ZipkinConnectionDetails connectionDetails) { assertThat(connectionDetails.getSpanEndpoint()).startsWith("http://").endsWith("/api/v2/spans"); } diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index 238b5d5c6c55..5707daeb89de 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -77,10 +77,11 @@ - + + + -