Testcontainers implementation for Apache Cassandra, providing lightweight, throwaway database instances for Java integration testing
npx @tessl/cli install tessl/maven-org-testcontainers--cassandra@1.21.0Testcontainers 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);
}