mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Fix flaky integration test
Closes gh-21487
This commit is contained in:
parent
a74afc104c
commit
ca5afb6e90
@ -16,14 +16,21 @@
|
||||
|
||||
package org.springframework.boot.autoconfigure.cassandra;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.CqlSession;
|
||||
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
|
||||
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.rnorth.ducttape.TimeoutException;
|
||||
import org.rnorth.ducttape.unreliables.Unreliables;
|
||||
import org.testcontainers.containers.CassandraContainer;
|
||||
import org.testcontainers.containers.ContainerLaunchException;
|
||||
import org.testcontainers.containers.wait.strategy.AbstractWaitStrategy;
|
||||
import org.testcontainers.images.builder.Transferable;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
@ -45,7 +52,7 @@ class CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests {
|
||||
|
||||
@Container
|
||||
static final CassandraContainer<?> cassandra = new PasswordAuthenticatorCassandraContainer().withStartupAttempts(5)
|
||||
.withStartupTimeout(Duration.ofMinutes(10));
|
||||
.withStartupTimeout(Duration.ofMinutes(10)).waitingFor(new CassandraWaitStrategy());
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(CassandraAutoConfiguration.class)).withPropertyValues(
|
||||
@ -88,4 +95,29 @@ class CassandraAutoConfigurationWithPasswordAuthenticationIntegrationTests {
|
||||
|
||||
}
|
||||
|
||||
static final class CassandraWaitStrategy extends AbstractWaitStrategy {
|
||||
|
||||
@Override
|
||||
protected void waitUntilReady() {
|
||||
try {
|
||||
Unreliables.retryUntilSuccess((int) this.startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> {
|
||||
getRateLimiter().doWhenReady(() -> cqlSessionBuilder().build());
|
||||
return true;
|
||||
});
|
||||
}
|
||||
catch (TimeoutException ex) {
|
||||
throw new ContainerLaunchException(
|
||||
"Timed out waiting for Cassandra to be accessible for query execution");
|
||||
}
|
||||
}
|
||||
|
||||
private CqlSessionBuilder cqlSessionBuilder() {
|
||||
return CqlSession.builder()
|
||||
.addContactPoint(new InetSocketAddress(this.waitStrategyTarget.getHost(),
|
||||
this.waitStrategyTarget.getFirstMappedPort()))
|
||||
.withLocalDatacenter("datacenter1").withAuthCredentials("cassandra", "cassandra");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user