Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 11 additions & 13 deletions docs/modules/databases/cassandra.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,27 @@ This example connects to the Cassandra Cluster, creates a keyspaces and asserts
```java tab="JUnit 4 example"
public class SomeTest {

@Rule
public CassandraContainer cassandra = new CassandraContainer();


@Test
public void test(){
Cluster cluster = cassandra.getCluster();
try (CassandraContainer<?> cassandra = new CassandraContainer<>(CASSANDRA_IMAGE)) {
cassandra.start();

try(Session session = cluster.connect()) {
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress(cassandra.getHost(), cassandra.getMappedPort(cassandra.CQL_PORT)))
.withLocalDatacenter("datacenter1")
.build();

session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = \n" +
"{'class':'SimpleStrategy','replication_factor':'1'};");

List<KeyspaceMetadata> keyspaces = session.getCluster().getMetadata().getKeyspaces();
List<KeyspaceMetadata> filteredKeyspaces = keyspaces
.stream()
.filter(km -> km.getName().equals("test"))
.collect(Collectors.toList());
KeyspaceMetadata keyspace = session
.getMetadata()
.getKeyspaces()
.get(CqlIdentifier.fromCql("test"));

assertEquals(1, filteredKeyspaces.size());
assertNotNull("Failed to create test keyspace", keyspace);
}
}

}
```

Expand Down
2 changes: 1 addition & 1 deletion modules/cassandra/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ description = "TestContainers :: Cassandra"

dependencies {
compile project(":database-commons")
compile "com.datastax.cassandra:cassandra-driver-core:3.7.1"
compile "com.datastax.oss:java-driver-core:4.9.0"
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.testcontainers.containers;

import com.datastax.driver.core.Cluster;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.session.Session;
import com.github.dockerjava.api.command.InspectContainerResponse;
import org.apache.commons.io.IOUtils;
import org.testcontainers.containers.delegate.CassandraDatabaseDelegate;
Expand All @@ -12,6 +13,7 @@

import javax.script.ScriptException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
Expand Down Expand Up @@ -165,29 +167,22 @@ public String getPassword() {
return PASSWORD;
}

/**
* Get configured Cluster
*
* Can be used to obtain connections to Cassandra in the container
*/
public Cluster getCluster() {
return getCluster(this, enableJmxReporting);
public CqlSession getSession() {
return getSession(this, enableJmxReporting);
}

public static Cluster getCluster(ContainerState containerState, boolean enableJmxReporting) {
final Cluster.Builder builder = Cluster.builder()
.addContactPoint(containerState.getHost())
.withPort(containerState.getMappedPort(CQL_PORT));
if (!enableJmxReporting) {
builder.withoutJMXReporting();
}
return builder.build();
public static CqlSession getSession(ContainerState containerState, boolean enableJmxReporting) {
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress(containerState.getHost(), containerState.getMappedPort(CQL_PORT)))
.withLocalDatacenter("datacenter1").build();
return session;
}

public static Cluster getCluster(ContainerState containerState) {
return getCluster(containerState, false);
public static CqlSession getSession(ContainerState containerState) {
return getSession(containerState, false);
}


private DatabaseDelegate getDatabaseDelegate() {
return new CassandraDatabaseDelegate(this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package org.testcontainers.containers.delegate;

import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.exceptions.DriverException;
import com.datastax.oss.driver.api.core.cql.ResultSet;
import com.datastax.oss.driver.api.core.session.Session;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.DriverException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.testcontainers.containers.CassandraContainer;
Expand All @@ -25,8 +26,7 @@ public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate<Session>
@Override
protected Session createNewConnection() {
try {
return CassandraContainer.getCluster(container)
.newSession();
return CassandraContainer.getSession(container);
} catch (DriverException e) {
log.error("Could not obtain cassandra connection");
throw new ConnectionCreationException("Could not obtain cassandra connection", e);
Expand All @@ -36,7 +36,7 @@ protected Session createNewConnection() {
@Override
public void execute(String statement, String scriptPath, int lineNumber, boolean continueOnError, boolean ignoreFailedDrops) {
try {
ResultSet result = getConnection().execute(statement);
ResultSet result = CassandraContainer.getSession(container).execute(statement);
if (result.wasApplied()) {
log.debug("Statement {} was applied", statement);
} else {
Expand All @@ -50,7 +50,7 @@ public void execute(String statement, String scriptPath, int lineNumber, boolean
@Override
protected void closeConnectionQuietly(Session session) {
try {
session.getCluster().close();
session.close();
} catch (Exception e) {
log.error("Could not close cassandra connection", e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package org.testcontainers.containers;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.CqlIdentifier;
import com.datastax.oss.driver.api.core.cql.ResultSet;
import com.datastax.oss.driver.api.core.cql.Row;
import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata;
import com.datastax.oss.driver.api.core.session.Session;
import java.net.InetSocketAddress;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.testcontainers.containers.wait.CassandraQueryWaitStrategy;
import org.testcontainers.utility.DockerImageName;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
Expand Down Expand Up @@ -89,6 +91,24 @@ public void testInitScriptWithLegacyCassandra() {
}
}

@Test
public void testKeyspace(){
try (CassandraContainer<?> cassandra = new CassandraContainer<>(CASSANDRA_IMAGE)) {
cassandra.start();
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress(cassandra.getHost(), cassandra.getMappedPort(cassandra.CQL_PORT)))
.withLocalDatacenter("datacenter1")
.build();
session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = \n" +
"{'class':'SimpleStrategy','replication_factor':'1'};");
KeyspaceMetadata keyspace = session
.getMetadata()
.getKeyspaces()
.get(CqlIdentifier.fromCql("test"));
assertNotNull("Failed to create test keyspace", keyspace);
}
}

@SuppressWarnings("deprecation") // Using deprecated constructor for verification of backwards compatibility
@Test
public void testCassandraQueryWaitStrategy() {
Expand All @@ -102,17 +122,6 @@ public void testCassandraQueryWaitStrategy() {
}
}

@SuppressWarnings("deprecation") // Using deprecated constructor for verification of backwards compatibility
@Test
public void testCassandraGetCluster() {
try (CassandraContainer<?> cassandraContainer = new CassandraContainer<>()) {
cassandraContainer.start();
ResultSet resultSet = performQuery(cassandraContainer.getCluster(), "SELECT release_version FROM system.local");
assertTrue("Query was not applied", resultSet.wasApplied());
assertNotNull("Result set has no release_version", resultSet.one().getString(0));
}
}

private void testInitScript(CassandraContainer<?> cassandraContainer) {
ResultSet resultSet = performQuery(cassandraContainer, "SELECT * FROM keySpaceTest.catalog_category");
assertTrue("Query was not applied", resultSet.wasApplied());
Expand All @@ -122,17 +131,10 @@ private void testInitScript(CassandraContainer<?> cassandraContainer) {
}

private ResultSet performQuery(CassandraContainer<?> cassandraContainer, String cql) {
Cluster explicitCluster = Cluster.builder()
.addContactPoint(cassandraContainer.getHost())
.withPort(cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT))
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress(cassandraContainer.getHost(), cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT)))
.withLocalDatacenter("datacenter1")
.build();
return performQuery(explicitCluster, cql);
}

private ResultSet performQuery(Cluster cluster, String cql) {
try (Cluster closeableCluster = cluster) {
Session session = closeableCluster.newSession();
return session.execute(cql);
}
return session.execute(cql);
}
}
6 changes: 2 additions & 4 deletions modules/cassandra/src/test/resources/initial.cql
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
CREATE KEYSPACE keySpaceTest WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};

USE keySpaceTest;
CREATE TABLE keySpaceTest.catalog_category (id bigint primary key, name text);

CREATE TABLE catalog_category (id bigint primary key, name text);

INSERT INTO catalog_category (id, name) VALUES (1, 'test_category');
INSERT INTO keySpaceTest.catalog_category (id, name) VALUES (1, 'test_category');