1
package org.testcontainers.containers;
3
import com.datastax.driver.core.Cluster;
4
import com.datastax.driver.core.ResultSet;
5
import com.datastax.driver.core.Row;
6
import com.datastax.driver.core.Session;
7
import lombok.extern.slf4j.Slf4j;
9
import org.testcontainers.containers.wait.CassandraQueryWaitStrategy;
10
import org.testcontainers.utility.DockerImageName;
12
import static org.assertj.core.api.Assertions.assertThat;
15
public class CassandraContainerTest {
17
private static final DockerImageName CASSANDRA_IMAGE = DockerImageName.parse("cassandra:3.11.2");
19
private static final String TEST_CLUSTER_NAME_IN_CONF = "Test Cluster Integration Test";
21
private static final String BASIC_QUERY = "SELECT release_version FROM system.local";
24
public void testSimple() {
25
try (CassandraContainer<?> cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) {
26
cassandraContainer.start();
27
ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY);
28
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
29
assertThat(resultSet.one().getString(0)).as("Result set has release_version").isNotNull();
34
public void testSpecificVersion() {
35
String cassandraVersion = "3.0.15";
37
CassandraContainer<?> cassandraContainer = new CassandraContainer<>(
38
CASSANDRA_IMAGE.withTag(cassandraVersion)
41
cassandraContainer.start();
42
ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY);
43
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
44
assertThat(resultSet.one().getString(0)).as("Cassandra has right version").isEqualTo(cassandraVersion);
49
public void testConfigurationOverride() {
51
CassandraContainer<?> cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)
52
.withConfigurationOverride("cassandra-test-configuration-example")
54
cassandraContainer.start();
55
ResultSet resultSet = performQuery(cassandraContainer, "SELECT cluster_name FROM system.local");
56
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
57
assertThat(resultSet.one().getString(0))
58
.as("Cassandra configuration is overridden")
59
.isEqualTo(TEST_CLUSTER_NAME_IN_CONF);
63
@Test(expected = ContainerLaunchException.class)
64
public void testEmptyConfigurationOverride() {
66
CassandraContainer<?> cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)
67
.withConfigurationOverride("cassandra-empty-configuration")
69
cassandraContainer.start();
74
public void testInitScript() {
76
CassandraContainer<?> cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)
77
.withInitScript("initial.cql")
79
cassandraContainer.start();
80
testInitScript(cassandraContainer);
85
public void testInitScriptWithLegacyCassandra() {
87
CassandraContainer<?> cassandraContainer = new CassandraContainer<>(
88
DockerImageName.parse("cassandra:2.2.11")
90
.withInitScript("initial.cql")
92
cassandraContainer.start();
93
testInitScript(cassandraContainer);
97
@SuppressWarnings("deprecation") // Using deprecated constructor for verification of backwards compatibility
99
public void testCassandraQueryWaitStrategy() {
101
CassandraContainer<?> cassandraContainer = new CassandraContainer<>()
102
.waitingFor(new CassandraQueryWaitStrategy())
104
cassandraContainer.start();
105
ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY);
106
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
110
@SuppressWarnings("deprecation") // Using deprecated constructor for verification of backwards compatibility
112
public void testCassandraGetCluster() {
113
try (CassandraContainer<?> cassandraContainer = new CassandraContainer<>()) {
114
cassandraContainer.start();
115
ResultSet resultSet = performQuery(cassandraContainer.getCluster(), BASIC_QUERY);
116
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
117
assertThat(resultSet.one().getString(0)).as("Result set has release_version").isNotNull();
121
private void testInitScript(CassandraContainer<?> cassandraContainer) {
122
ResultSet resultSet = performQuery(cassandraContainer, "SELECT * FROM keySpaceTest.catalog_category");
123
assertThat(resultSet.wasApplied()).as("Query was applied").isTrue();
124
Row row = resultSet.one();
125
assertThat(row.getLong(0)).as("Inserted row is in expected state").isEqualTo(1);
126
assertThat(row.getString(1)).as("Inserted row is in expected state").isEqualTo("test_category");
129
private ResultSet performQuery(CassandraContainer<?> cassandraContainer, String cql) {
130
Cluster explicitCluster = Cluster
132
.addContactPoint(cassandraContainer.getHost())
133
.withPort(cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT))
135
return performQuery(explicitCluster, cql);
138
private ResultSet performQuery(Cluster cluster, String cql) {
139
try (Cluster closeableCluster = cluster) {
140
Session session = closeableCluster.newSession();
141
return session.execute(cql);