diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationIntegrationTests.java index 376503067e..203ad27d95 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationIntegrationTests.java @@ -20,18 +20,19 @@ import java.net.InetSocketAddress; import java.time.Duration; import com.datastax.oss.driver.api.core.CqlSession; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; +import com.datastax.oss.driver.api.core.config.DefaultDriverOption; +import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import org.junit.jupiter.api.Test; import org.testcontainers.containers.CassandraContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; +import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; import org.springframework.boot.autoconfigure.data.cassandra.city.City; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.data.cassandra.config.SchemaAction; import org.springframework.data.cassandra.config.SessionFactoryFactoryBean; @@ -50,52 +51,36 @@ class CassandraDataAutoConfigurationIntegrationTests { static final CassandraContainer cassandra = new CassandraContainer<>().withStartupAttempts(5) .withStartupTimeout(Duration.ofMinutes(10)); - private AnnotationConfigApplicationContext context; - - @BeforeEach - void setUp() { - this.context = new AnnotationConfigApplicationContext(); - System.setProperty("datastax-java-driver.advanced.connection.init-query-timeout", "1 second"); - TestPropertyValues - .of("spring.data.cassandra.contact-points:localhost:" + cassandra.getFirstMappedPort(), - "spring.data.cassandra.local-datacenter=datacenter1", - "spring.data.cassandra.read-timeout=24000", "spring.data.cassandra.connect-timeout=10000") - .applyTo(this.context.getEnvironment()); - } - - @AfterEach - void close() { - System.clearProperty("datastax-java-driver.advanced.connection.init-query-timeout"); - if (this.context != null) { - this.context.close(); - } - } + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class)) + .withPropertyValues("spring.data.cassandra.contact-points:localhost:" + cassandra.getFirstMappedPort(), + "spring.data.cassandra.local-datacenter=datacenter1", "spring.data.cassandra.read-timeout=20s", + "spring.data.cassandra.connect-timeout=10s") + .withInitializer((context) -> AutoConfigurationPackages.register((BeanDefinitionRegistry) context, + City.class.getPackage().getName())); @Test void hasDefaultSchemaActionSet() { - String cityPackage = City.class.getPackage().getName(); - AutoConfigurationPackages.register(this.context, cityPackage); - this.context.register(CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class); - this.context.refresh(); - assertThat(this.context.getBean(SessionFactoryFactoryBean.class)).hasFieldOrPropertyWithValue("schemaAction", - SchemaAction.NONE); + this.contextRunner.run((context) -> assertThat(context.getBean(SessionFactoryFactoryBean.class)) + .hasFieldOrPropertyWithValue("schemaAction", SchemaAction.NONE)); } @Test void hasRecreateSchemaActionSet() { createTestKeyspaceIfNotExists(); - String cityPackage = City.class.getPackage().getName(); - AutoConfigurationPackages.register(this.context, cityPackage); - TestPropertyValues.of("spring.data.cassandra.schemaAction=recreate_drop_unused", - "spring.data.cassandra.keyspaceName=boot_test").applyTo(this.context); - this.context.register(CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class); - this.context.refresh(); - assertThat(this.context.getBean(SessionFactoryFactoryBean.class)).hasFieldOrPropertyWithValue("schemaAction", - SchemaAction.RECREATE_DROP_UNUSED); + this.contextRunner + .withPropertyValues("spring.data.cassandra.schemaAction=recreate_drop_unused", + "spring.data.cassandra.keyspaceName=boot_test") + .run((context) -> assertThat(context.getBean(SessionFactoryFactoryBean.class)) + .hasFieldOrPropertyWithValue("schemaAction", SchemaAction.RECREATE_DROP_UNUSED)); } private void createTestKeyspaceIfNotExists() { try (CqlSession session = CqlSession.builder() + .withConfigLoader(DriverConfigLoader.programmaticBuilder() + .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(10)) + .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(20)).build()) .addContactPoint( new InetSocketAddress(cassandra.getContainerIpAddress(), cassandra.getFirstMappedPort())) .withLocalDatacenter("datacenter1").build()) {