Testcontainers implementation for Apache Cassandra, providing lightweight, throwaway database instances for Java integration testing
Testcontainers implementation for Apache Cassandra that provides lightweight, throwaway instances of Cassandra databases for Java integration testing. This library extends the Testcontainers framework with Cassandra-specific functionality, offering Docker-based container management with automatic configuration, CQL script initialization, and seamless integration with DataStax drivers.
pom.xml:<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>cassandra</artifactId>
<version>1.21.3</version>
<scope>test</scope>
</dependency>For Gradle:
testImplementation 'org.testcontainers:cassandra:1.21.3'import org.testcontainers.cassandra.CassandraContainer;For DataStax driver integration:
import com.datastax.oss.driver.api.core.CqlSession;
import java.net.InetSocketAddress;import org.testcontainers.cassandra.CassandraContainer;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.cql.ResultSet;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class CassandraTest {
@Test
public void testWithCassandra() {
try (CassandraContainer cassandra = new CassandraContainer("cassandra:3.11.2")) {
cassandra.start();
// Create CQL session using DataStax driver 4.x
CqlSession session = CqlSession.builder()
.addContactPoint(cassandra.getContactPoint())
.withLocalDatacenter(cassandra.getLocalDatacenter())
.build();
// Execute queries
ResultSet result = session.execute("SELECT release_version FROM system.local");
assertThat(result.wasApplied()).isTrue();
session.close();
}
}
}The Cassandra Testcontainers module is built around several key components:
GenericContainer providing Docker lifecycle management for Cassandra instancesCore functionality for creating, configuring, and managing Cassandra Docker containers with proper lifecycle management and resource cleanup.
public class CassandraContainer extends GenericContainer<CassandraContainer> {
public CassandraContainer(String dockerImageName);
public CassandraContainer(DockerImageName dockerImageName);
}Configuration override capabilities and CQL script initialization for custom Cassandra setups and test data preparation.
public CassandraContainer withConfigurationOverride(String configLocation);
public CassandraContainer withInitScript(String initScriptPath);Configuration and Initialization
Methods for obtaining connection information and establishing DataStax driver sessions for query execution.
public InetSocketAddress getContactPoint();
public String getLocalDatacenter();
public String getUsername();
public String getPassword();Advanced wait strategies and database operation delegation for ensuring container readiness and executing database operations.
public class CassandraQueryWaitStrategy extends AbstractWaitStrategy;
public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate<Void>;Wait Strategies and Database Delegation
The container automatically configures the following Cassandra environment variables for optimal testing performance:
CASSANDRA_SNITCH: "GossipingPropertyFileSnitch"JVM_OPTS: "-Dcassandra.skip_wait_for_gossip_to_settle=0 -Dcassandra.initial_token=0"HEAP_NEWSIZE: "128M"MAX_HEAP_SIZE: "1024M"CASSANDRA_ENDPOINT_SNITCH: "GossipingPropertyFileSnitch"CASSANDRA_DC: "datacenter1" (configurable)// Container state interface for accessing container information
interface ContainerState {
String getHost();
Integer getMappedPort(int originalPort);
Map<String, String> getEnvMap();
}
// Docker image name utility
class DockerImageName {
static DockerImageName parse(String imageNameString);
DockerImageName withTag(String tag);
void assertCompatibleWith(DockerImageName expectedImageName);
}Install with Tessl CLI
npx tessl i tessl/maven-org-testcontainers--cassandra