|
|
|
@ -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");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|