From 3851d25b79d54ec6477684a93f2b1462375f3236 Mon Sep 17 00:00:00 2001 From: Erik Merkle Date: Tue, 2 Jun 2020 15:15:05 -0500 Subject: [PATCH 1/9] Update Cassandra driver to 4.x --- modules/cassandra/build.gradle | 2 +- .../containers/CassandraContainer.java | 38 +++++++------------ .../delegate/CassandraDatabaseDelegate.java | 17 ++++----- .../containers/CassandraContainerTest.java | 19 +++++----- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/modules/cassandra/build.gradle b/modules/cassandra/build.gradle index 9704a05b69d..aa51fac2303 100644 --- a/modules/cassandra/build.gradle +++ b/modules/cassandra/build.gradle @@ -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.6.1" } diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java index 597b1c9b017..697821e6955 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java @@ -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.CqlSessionBuilder; import com.github.dockerjava.api.command.InspectContainerResponse; import org.apache.commons.io.IOUtils; import org.testcontainers.containers.delegate.CassandraDatabaseDelegate; @@ -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; @@ -32,13 +34,13 @@ public class CassandraContainer> extends G public static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); public static final Integer CQL_PORT = 9042; + public static final String DATACENTER = "datacenter1"; private static final String CONTAINER_CONFIG_LOCATION = "/etc/cassandra"; private static final String USERNAME = "cassandra"; private static final String PASSWORD = "cassandra"; private String configLocation; private String initScriptPath; - private boolean enableJmxReporting; /** * @deprecated use {@link #CassandraContainer(DockerImageName)} instead @@ -59,7 +61,6 @@ public CassandraContainer(DockerImageName dockerImageName) { addExposedPort(CQL_PORT); setStartupAttempts(3); - this.enableJmxReporting = false; } @Override @@ -135,14 +136,6 @@ public SELF withInitScript(String initScriptPath) { return self(); } - /** - * Initialize Cassandra client with JMX reporting enabled or disabled - */ - public SELF withJmxReporting(boolean enableJmxReporting) { - this.enableJmxReporting = enableJmxReporting; - return self(); - } - /** * Get username * @@ -168,28 +161,23 @@ public String getPassword() { } /** - * Get configured Cluster + * Get configured Session * * Can be used to obtain connections to Cassandra in the container + * + * @return A Configured {@link CqlSession} */ - public Cluster getCluster() { - return getCluster(this, enableJmxReporting); + public CqlSession getSession() { + return getSession(this); } - 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(); - } + public static CqlSession getSession(ContainerState containerState) { + final CqlSessionBuilder builder = CqlSession.builder() + .addContactPoint(new InetSocketAddress(containerState.getHost(), containerState.getMappedPort(CQL_PORT))) + .withLocalDatacenter(DATACENTER); return builder.build(); } - public static Cluster getCluster(ContainerState containerState) { - return getCluster(containerState, false); - } - private DatabaseDelegate getDatabaseDelegate() { return new CassandraDatabaseDelegate(this); } diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java index e55dd31b0ff..d976436e725 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java @@ -1,8 +1,8 @@ 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.CqlSession; +import com.datastax.oss.driver.api.core.DriverException; +import com.datastax.oss.driver.api.core.cql.ResultSet; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.testcontainers.containers.CassandraContainer; @@ -18,15 +18,14 @@ */ @Slf4j @RequiredArgsConstructor -public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate { +public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate { private final ContainerState container; @Override - protected Session createNewConnection() { + protected CqlSession 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); @@ -48,9 +47,9 @@ public void execute(String statement, String scriptPath, int lineNumber, boolean } @Override - protected void closeConnectionQuietly(Session session) { + protected void closeConnectionQuietly(CqlSession session) { try { - session.getCluster().close(); + session.close(); } catch (Exception e) { log.error("Could not close cassandra connection", e); } diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index 76c8c8438d7..fe6a491bf2c 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -1,9 +1,9 @@ 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.cql.ResultSet; +import com.datastax.oss.driver.api.core.cql.Row; +import java.net.InetSocketAddress; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.testcontainers.containers.wait.CassandraQueryWaitStrategy; @@ -107,7 +107,7 @@ public void testCassandraQueryWaitStrategy() { public void testCassandraGetCluster() { try (CassandraContainer cassandraContainer = new CassandraContainer<>()) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer.getCluster(), "SELECT release_version FROM system.local"); + ResultSet resultSet = performQuery(cassandraContainer.getSession(), "SELECT release_version FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } @@ -126,13 +126,12 @@ private ResultSet performQuery(CassandraContainer cassandraContainer, String .addContactPoint(cassandraContainer.getHost()) .withPort(cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT)) .build(); - return performQuery(explicitCluster, cql); + return performQuery(explicitSession, cql); } - private ResultSet performQuery(Cluster cluster, String cql) { - try (Cluster closeableCluster = cluster) { - Session session = closeableCluster.newSession(); - return session.execute(cql); + private ResultSet performQuery(CqlSession session, String cql) { + try (CqlSession closeableSession = session) { + return closeableSession.execute(cql); } } } From 503133cf053ed0d8e1ce359e2eace35bc8d08c0e Mon Sep 17 00:00:00 2001 From: Erik Merkle Date: Fri, 31 Jul 2020 15:42:09 -0500 Subject: [PATCH 2/9] Deprecate Driver 3.x methods and remove some driver coupling --- docs/modules/databases/cassandra.md | 39 +++++++++- modules/cassandra/build.gradle | 9 ++- .../containers/CassandraContainer.java | 74 ++++++++++++++++--- .../delegate/CassandraDatabaseDelegate.java | 16 ++-- .../containers/CassandraContainerTest.java | 54 +++++++++++--- 5 files changed, 161 insertions(+), 31 deletions(-) diff --git a/docs/modules/databases/cassandra.md b/docs/modules/databases/cassandra.md index d15304afa81..2e517374f51 100644 --- a/docs/modules/databases/cassandra.md +++ b/docs/modules/databases/cassandra.md @@ -4,7 +4,7 @@ This example connects to the Cassandra Cluster, creates a keyspaces and asserts that is has been created. -```java tab="JUnit 4 example" +```java tab="Cassandra Driver 4.x" public class SomeTest { @Rule @@ -13,7 +13,39 @@ public class SomeTest { @Test public void test(){ - Cluster cluster = cassandra.getCluster(); + try(CqlSession session = CqlSession.builder() + .addContactPoint(cassandra.getContactPoint()) + .withLocalDatacenter(cassandra.getLocalDatacenter()) + .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); + } + } + +} +``` + +```java tab="Cassandra Driver 3.x" +public class SomeTest { + + @Rule + public CassandraContainer cassandra = new CassandraContainer(); + + + @Test + public void test(){ + Cluster cluster = Cluster.builder() + .addContactPoint(cassandra.getHost()) + .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) + .build(); try(Session session = cluster.connect()) { @@ -33,6 +65,9 @@ public class SomeTest { } ``` +!!! warning + All methods returning instances of the Cassandra Driver's Cluster object in CassandraContainer have been deprecated. Providing these methods unnecessarily couples the Container to the Driver and creates potential breaking changes if the driver is updated. + ## Adding this module to your project dependencies Add the following dependency to your `pom.xml`/`build.gradle` file: diff --git a/modules/cassandra/build.gradle b/modules/cassandra/build.gradle index aa51fac2303..e41276dc44d 100644 --- a/modules/cassandra/build.gradle +++ b/modules/cassandra/build.gradle @@ -1,6 +1,13 @@ description = "TestContainers :: Cassandra" +configurations.all { + resolutionStrategy { + force 'io.dropwizard.metrics:metrics-core:3.2.4' + } +} + dependencies { compile project(":database-commons") - compile "com.datastax.oss:java-driver-core:4.6.1" + compile "com.datastax.cassandra:cassandra-driver-core:3.10.0" + testCompile 'com.datastax.oss:java-driver-core:4.8.0' } diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java index 697821e6955..b6e4917c323 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java @@ -1,7 +1,6 @@ package org.testcontainers.containers; -import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.CqlSessionBuilder; +import com.datastax.driver.core.Cluster; import com.github.dockerjava.api.command.InspectContainerResponse; import org.apache.commons.io.IOUtils; import org.testcontainers.containers.delegate.CassandraDatabaseDelegate; @@ -34,13 +33,15 @@ public class CassandraContainer> extends G public static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); public static final Integer CQL_PORT = 9042; - public static final String DATACENTER = "datacenter1"; + public static final String DEFAULT_LOCAL_DATACENTER = "datacenter1"; private static final String CONTAINER_CONFIG_LOCATION = "/etc/cassandra"; private static final String USERNAME = "cassandra"; private static final String PASSWORD = "cassandra"; private String configLocation; private String initScriptPath; + private boolean enableJmxReporting; + private String localDatacenter; /** * @deprecated use {@link #CassandraContainer(DockerImageName)} instead @@ -61,6 +62,8 @@ public CassandraContainer(DockerImageName dockerImageName) { addExposedPort(CQL_PORT); setStartupAttempts(3); + this.enableJmxReporting = false; + this.localDatacenter = DEFAULT_LOCAL_DATACENTER; } @Override @@ -136,6 +139,22 @@ public SELF withInitScript(String initScriptPath) { return self(); } + /** + * Initialize Cassandra client with JMX reporting enabled or disabled + */ + public SELF withJmxReporting(boolean enableJmxReporting) { + this.enableJmxReporting = enableJmxReporting; + return self(); + } + + /** + * Override the default Cassandra local Datacenter name + */ + public SELF withLocalDatacenter(String localDatacenter) { + this.localDatacenter = localDatacenter; + return self(); + } + /** * Get username * @@ -165,19 +184,54 @@ public String getPassword() { * * Can be used to obtain connections to Cassandra in the container * - * @return A Configured {@link CqlSession} + * @deprecated For Cassandra driver 3.x, use {@link #getHost()} and {@link #getMappedPort(int)} with + * the driver's {@link Cluster#builder() Cluster.Builder} {@code addContactPoint(String)} and + * {@code withPort(int)} methods to create a Cluster object. For Cassandra driver 4.x, use + * {@link #getContactPoint()} and {@link #getLocalDatacenter()} with the driver's {@code CqlSession.builder()} + * {@code addContactPoint(InetSocketAddress)} and {@code withLocalDatacenter(String)} methods to create + * a Session Object. See https://docs.datastax.com/en/developer/java-driver/ for more on the driver. */ - public CqlSession getSession() { - return getSession(this); + @Deprecated + public Cluster getCluster() { + return getCluster(this, enableJmxReporting); } - public static CqlSession getSession(ContainerState containerState) { - final CqlSessionBuilder builder = CqlSession.builder() - .addContactPoint(new InetSocketAddress(containerState.getHost(), containerState.getMappedPort(CQL_PORT))) - .withLocalDatacenter(DATACENTER); + @Deprecated + 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(); } + @Deprecated + public static Cluster getCluster(ContainerState containerState) { + return getCluster(containerState, false); + } + + /** + * Retrieve an {@link InetSocketAddress} for connecting to the Cassandra container via the driver. + * + * @return A InetSocketAddrss representation of this Cassandra container's host and port. + */ + public InetSocketAddress getContactPoint() { + return new InetSocketAddress(getHost(), getMappedPort(CQL_PORT)); + } + + /** + * Retrieve the Local Datacenter for connecting to the Cassandra container via the driver. + * + * @return The configured local Datacenter name. + * @see #withLocalDatacenter(java.lang.String) + */ + public String getLocalDatacenter() { + return localDatacenter; + } + + @Deprecated private DatabaseDelegate getDatabaseDelegate() { return new CassandraDatabaseDelegate(this); } diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java index d976436e725..17544c5590a 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java @@ -1,8 +1,8 @@ package org.testcontainers.containers.delegate; -import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.DriverException; -import com.datastax.oss.driver.api.core.cql.ResultSet; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.exceptions.DriverException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.testcontainers.containers.CassandraContainer; @@ -18,14 +18,14 @@ */ @Slf4j @RequiredArgsConstructor -public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate { +public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate { private final ContainerState container; @Override - protected CqlSession createNewConnection() { + protected Session createNewConnection() { try { - return CassandraContainer.getSession(container); + return CassandraContainer.getCluster(container).newSession(); } catch (DriverException e) { log.error("Could not obtain cassandra connection"); throw new ConnectionCreationException("Could not obtain cassandra connection", e); @@ -47,9 +47,9 @@ public void execute(String statement, String scriptPath, int lineNumber, boolean } @Override - protected void closeConnectionQuietly(CqlSession session) { + protected void closeConnectionQuietly(Session session) { try { - session.close(); + session.getCluster().close(); } catch (Exception e) { log.error("Could not close cassandra connection", e); } diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index fe6a491bf2c..3c6e45f126c 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -1,9 +1,10 @@ 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.cql.ResultSet; -import com.datastax.oss.driver.api.core.cql.Row; -import java.net.InetSocketAddress; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.testcontainers.containers.wait.CassandraQueryWaitStrategy; @@ -23,11 +24,13 @@ public class CassandraContainerTest { private static final String TEST_CLUSTER_NAME_IN_CONF = "Test Cluster Integration Test"; + private static final String BAISC_QUERY = "SELECT release_version FROM system.local"; + @Test public void testSimple() { try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); + ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } @@ -38,7 +41,7 @@ public void testSpecificVersion() { String cassandraVersion = "3.0.15"; try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE.withTag(cassandraVersion))) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); + ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertEquals("Cassandra has wrong version", cassandraVersion, resultSet.one().getString(0)); } @@ -97,7 +100,7 @@ public void testCassandraQueryWaitStrategy() { .waitingFor(new CassandraQueryWaitStrategy()) ) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); + ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); } } @@ -107,7 +110,31 @@ public void testCassandraQueryWaitStrategy() { public void testCassandraGetCluster() { try (CassandraContainer cassandraContainer = new CassandraContainer<>()) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer.getSession(), "SELECT release_version FROM system.local"); + ResultSet resultSet = performQuery(cassandraContainer.getCluster(), BAISC_QUERY); + assertTrue("Query was not applied", resultSet.wasApplied()); + assertNotNull("Result set has no release_version", resultSet.one().getString(0)); + } + } + + @Test(expected = IllegalStateException.class) + public void testMissingLocalDatacenter() { + try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { + cassandraContainer.start(); + // Trying to build a CqlSession will fail if a Contact Point is specified, + // but Local Datacenter is omitted. + CqlSession.builder().addContactPoint(cassandraContainer.getContactPoint()).build(); + } + } + + @Test + public void testCassandraGetContactPoint() { + try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { + cassandraContainer.start(); + CqlSession session = CqlSession.builder() + .addContactPoint(cassandraContainer.getContactPoint()) + .withLocalDatacenter(cassandraContainer.getLocalDatacenter()) + .build(); + com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BAISC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } @@ -126,12 +153,19 @@ private ResultSet performQuery(CassandraContainer cassandraContainer, String .addContactPoint(cassandraContainer.getHost()) .withPort(cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT)) .build(); - return performQuery(explicitSession, cql); + return performQuery(explicitCluster, cql); + } + + private ResultSet performQuery(Cluster cluster, String cql) { + try (Cluster closeableCluster = cluster) { + Session session = closeableCluster.newSession(); + return session.execute(cql); + } } - private ResultSet performQuery(CqlSession session, String cql) { + private com.datastax.oss.driver.api.core.cql.ResultSet performQuery(CqlSession session, String cql) { try (CqlSession closeableSession = session) { - return closeableSession.execute(cql); + return closeableSession.execute(cql); } } } From fe6b846db15fcdbc3896ce45800ee54cb874d035 Mon Sep 17 00:00:00 2001 From: Erik Merkle Date: Wed, 5 Aug 2020 15:11:07 -0500 Subject: [PATCH 3/9] improve verification of test for missing Datacenter --- .../containers/CassandraContainerTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index 3c6e45f126c..d2a1d405a77 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -10,9 +10,12 @@ import org.testcontainers.containers.wait.CassandraQueryWaitStrategy; import org.testcontainers.utility.DockerImageName; +import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * @author Eugeny Karpov @@ -116,13 +119,17 @@ public void testCassandraGetCluster() { } } - @Test(expected = IllegalStateException.class) + @Test public void testMissingLocalDatacenter() { try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { cassandraContainer.start(); // Trying to build a CqlSession will fail if a Contact Point is specified, // but Local Datacenter is omitted. CqlSession.builder().addContactPoint(cassandraContainer.getContactPoint()).build(); + fail("Session build should fail if no local Datacenter provided"); + } catch (IllegalStateException ise) { + String msg = "Since you provided explicit contact points, the local DC must be explicitly set"; + assertThat(ise.getMessage(), containsString(msg)); } } From 728dcdd5a3aa8d8fa134587832c1db66d2475702 Mon Sep 17 00:00:00 2001 From: Erik Merkle Date: Mon, 8 Feb 2021 08:45:38 -0600 Subject: [PATCH 4/9] address review comments --- .../containers/CassandraContainer.java | 17 +++--------- .../delegate/CassandraDatabaseDelegate.java | 3 ++- .../containers/CassandraContainerTest.java | 26 +++++-------------- 3 files changed, 11 insertions(+), 35 deletions(-) diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java index b6e4917c323..100f1d0a23c 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java @@ -33,7 +33,7 @@ public class CassandraContainer> extends G public static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); public static final Integer CQL_PORT = 9042; - public static final String DEFAULT_LOCAL_DATACENTER = "datacenter1"; + private static final String DEFAULT_LOCAL_DATACENTER = "datacenter1"; private static final String CONTAINER_CONFIG_LOCATION = "/etc/cassandra"; private static final String USERNAME = "cassandra"; private static final String PASSWORD = "cassandra"; @@ -41,7 +41,6 @@ public class CassandraContainer> extends G private String configLocation; private String initScriptPath; private boolean enableJmxReporting; - private String localDatacenter; /** * @deprecated use {@link #CassandraContainer(DockerImageName)} instead @@ -63,7 +62,6 @@ public CassandraContainer(DockerImageName dockerImageName) { addExposedPort(CQL_PORT); setStartupAttempts(3); this.enableJmxReporting = false; - this.localDatacenter = DEFAULT_LOCAL_DATACENTER; } @Override @@ -147,14 +145,6 @@ public SELF withJmxReporting(boolean enableJmxReporting) { return self(); } - /** - * Override the default Cassandra local Datacenter name - */ - public SELF withLocalDatacenter(String localDatacenter) { - this.localDatacenter = localDatacenter; - return self(); - } - /** * Get username * @@ -180,7 +170,7 @@ public String getPassword() { } /** - * Get configured Session + * Get configured Cluster * * Can be used to obtain connections to Cassandra in the container * @@ -225,10 +215,9 @@ public InetSocketAddress getContactPoint() { * Retrieve the Local Datacenter for connecting to the Cassandra container via the driver. * * @return The configured local Datacenter name. - * @see #withLocalDatacenter(java.lang.String) */ public String getLocalDatacenter() { - return localDatacenter; + return DEFAULT_LOCAL_DATACENTER; } @Deprecated diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java index 17544c5590a..e55dd31b0ff 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/delegate/CassandraDatabaseDelegate.java @@ -25,7 +25,8 @@ public class CassandraDatabaseDelegate extends AbstractDatabaseDelegate @Override protected Session createNewConnection() { try { - return CassandraContainer.getCluster(container).newSession(); + return CassandraContainer.getCluster(container) + .newSession(); } catch (DriverException e) { log.error("Could not obtain cassandra connection"); throw new ConnectionCreationException("Could not obtain cassandra connection", e); diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index d2a1d405a77..d4f49c5cde7 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -27,13 +27,13 @@ public class CassandraContainerTest { private static final String TEST_CLUSTER_NAME_IN_CONF = "Test Cluster Integration Test"; - private static final String BAISC_QUERY = "SELECT release_version FROM system.local"; + private static final String BASIC_QUERY = "SELECT release_version FROM system.local"; @Test public void testSimple() { try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); + ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } @@ -44,7 +44,7 @@ public void testSpecificVersion() { String cassandraVersion = "3.0.15"; try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE.withTag(cassandraVersion))) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); + ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertEquals("Cassandra has wrong version", cassandraVersion, resultSet.one().getString(0)); } @@ -103,7 +103,7 @@ public void testCassandraQueryWaitStrategy() { .waitingFor(new CassandraQueryWaitStrategy()) ) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer, BAISC_QUERY); + ResultSet resultSet = performQuery(cassandraContainer, BASIC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); } } @@ -113,26 +113,12 @@ public void testCassandraQueryWaitStrategy() { public void testCassandraGetCluster() { try (CassandraContainer cassandraContainer = new CassandraContainer<>()) { cassandraContainer.start(); - ResultSet resultSet = performQuery(cassandraContainer.getCluster(), BAISC_QUERY); + ResultSet resultSet = performQuery(cassandraContainer.getCluster(), BASIC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } } - @Test - public void testMissingLocalDatacenter() { - try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { - cassandraContainer.start(); - // Trying to build a CqlSession will fail if a Contact Point is specified, - // but Local Datacenter is omitted. - CqlSession.builder().addContactPoint(cassandraContainer.getContactPoint()).build(); - fail("Session build should fail if no local Datacenter provided"); - } catch (IllegalStateException ise) { - String msg = "Since you provided explicit contact points, the local DC must be explicitly set"; - assertThat(ise.getMessage(), containsString(msg)); - } - } - @Test public void testCassandraGetContactPoint() { try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { @@ -141,7 +127,7 @@ public void testCassandraGetContactPoint() { .addContactPoint(cassandraContainer.getContactPoint()) .withLocalDatacenter(cassandraContainer.getLocalDatacenter()) .build(); - com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BAISC_QUERY); + com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BASIC_QUERY); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } From b3a3ac42851c777a881448e329dbd0c8ae858186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 13 Jul 2022 18:13:35 -0500 Subject: [PATCH 5/9] Read/Write CASSANDRA_DC env --- .../org/testcontainers/containers/CassandraContainer.java | 4 +++- .../testcontainers/containers/CassandraContainerTest.java | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java index 4b613d2d8e5..a12ac03f18d 100644 --- a/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java +++ b/modules/cassandra/src/main/java/org/testcontainers/containers/CassandraContainer.java @@ -73,6 +73,8 @@ public CassandraContainer(DockerImageName dockerImageName) { withEnv("JVM_OPTS", "-Dcassandra.skip_wait_for_gossip_to_settle=0 -Dcassandra.initial_token=0"); withEnv("HEAP_NEWSIZE", "128M"); withEnv("MAX_HEAP_SIZE", "1024M"); + withEnv("CASSANDRA_ENDPOINT_SNITCH", "GossipingPropertyFileSnitch"); + withEnv("CASSANDRA_DC", DEFAULT_LOCAL_DATACENTER); } @Override @@ -235,7 +237,7 @@ public InetSocketAddress getContactPoint() { * @return The configured local Datacenter name. */ public String getLocalDatacenter() { - return DEFAULT_LOCAL_DATACENTER; + return getEnvMap().getOrDefault("CASSANDRA_DC", DEFAULT_LOCAL_DATACENTER); } @Deprecated diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index a89e1f235ac..2ab291e76ee 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -128,7 +128,10 @@ public void testCassandraGetCluster() { @Test public void testCassandraGetContactPoint() { - try (CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE)) { + try ( + CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE) + .withEnv("CASSANDRA_DC", "testdc") + ) { cassandraContainer.start(); CqlSession session = CqlSession .builder() @@ -136,6 +139,7 @@ public void testCassandraGetContactPoint() { .withLocalDatacenter(cassandraContainer.getLocalDatacenter()) .build(); com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BASIC_QUERY); + assertEquals("CASSANDRA_DC ", "testdc", cassandraContainer.getEnvMap().get("CASSANDRA_DC")); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } From 64bd5f7a5415355083c2e64e08d65fe69c4a33ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 13 Jul 2022 18:14:29 -0500 Subject: [PATCH 6/9] Fix message --- .../org/testcontainers/containers/CassandraContainerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index 2ab291e76ee..5f2c6f964a1 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -139,7 +139,7 @@ public void testCassandraGetContactPoint() { .withLocalDatacenter(cassandraContainer.getLocalDatacenter()) .build(); com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BASIC_QUERY); - assertEquals("CASSANDRA_DC ", "testdc", cassandraContainer.getEnvMap().get("CASSANDRA_DC")); + assertEquals("CASSANDRA_DC is not testdc", "testdc", cassandraContainer.getEnvMap().get("CASSANDRA_DC")); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } From e7d5f9a69c6a8a0eb70497cccbda74a85110c9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Fri, 15 Jul 2022 13:23:39 -0500 Subject: [PATCH 7/9] Use code snippets from examples --- docs/modules/databases/cassandra.md | 60 ++----------------- examples/cassandra-container/build.gradle | 20 +++++++ .../containers/CassandraDriver3Test.java | 40 +++++++++++++ .../containers/CassandraDriver4Test.java | 36 +++++++++++ examples/settings.gradle | 1 + 5 files changed, 101 insertions(+), 56 deletions(-) create mode 100644 examples/cassandra-container/build.gradle create mode 100644 examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java create mode 100644 examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java diff --git a/docs/modules/databases/cassandra.md b/docs/modules/databases/cassandra.md index 68e2cdef5bd..a2f462dd4ad 100644 --- a/docs/modules/databases/cassandra.md +++ b/docs/modules/databases/cassandra.md @@ -4,62 +4,10 @@ This example connects to the Cassandra Cluster, creates a keyspaces and asserts that is has been created. -```java tab="Cassandra Driver 4.x" -public class SomeTest { - - @Rule - public CassandraContainer cassandra = new CassandraContainer(); - - @Test - public void test(){ - try(CqlSession session = CqlSession.builder() - .addContactPoint(cassandra.getContactPoint()) - .withLocalDatacenter(cassandra.getLocalDatacenter()) - .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); - } - } -} -``` - -```java tab="Cassandra Driver 3.x" -public class SomeTest { - - @Rule - public CassandraContainer cassandra = new CassandraContainer(); - - @Test - public void test(){ - Cluster cluster = Cluster.builder() - .addContactPoint(cassandra.getHost()) - .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) - .build(); - - try(Session session = cluster.connect()) { - - session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = \n" + - "{'class':'SimpleStrategy','replication_factor':'1'};"); - - List keyspaces = session.getCluster().getMetadata().getKeyspaces(); - List filteredKeyspaces = keyspaces - .stream() - .filter(km -> km.getName().equals("test")) - .collect(Collectors.toList()); - - assertEquals(1, filteredKeyspaces.size()); - } - } -} -``` + +[Cassandra Driver 4.x](../../../examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java) inside_block:cassandra4 +[Cassandra Driver 3.x](../../../examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java) inside_block:cassandra3 + !!! warning All methods returning instances of the Cassandra Driver's Cluster object in CassandraContainer have been deprecated. Providing these methods unnecessarily couples the Container to the Driver and creates potential breaking changes if the driver is updated. diff --git a/examples/cassandra-container/build.gradle b/examples/cassandra-container/build.gradle new file mode 100644 index 00000000000..15a0ed8b568 --- /dev/null +++ b/examples/cassandra-container/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +configurations.all { + resolutionStrategy { + force 'io.dropwizard.metrics:metrics-core:3.2.4' + } +} + +dependencies { + testImplementation 'org.testcontainers:cassandra' + testImplementation 'junit:junit:4.13.2' +// testRuntimeOnly 'com.datastax.cassandra:cassandra-driver-core:3.10.0' + testImplementation 'com.datastax.oss:java-driver-core:4.8.0' +} diff --git a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java new file mode 100644 index 00000000000..916795e13ff --- /dev/null +++ b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java @@ -0,0 +1,40 @@ +package org.testcontainers.containers; +// cassandra3 { +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.KeyspaceMetadata; +import com.datastax.driver.core.Session; +import org.junit.Rule; +import org.junit.Test; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertEquals; + +public class CassandraDriver3Test { + + @Rule + public CassandraContainer cassandra = new CassandraContainer("cassandra:3.11.2"); + + @Test + public void test() { + try (Cluster cluster = Cluster.builder() + .addContactPoint(cassandra.getHost()) + .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) + .build(); + Session session = cluster.connect()) { + + session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = \n" + + "{'class':'SimpleStrategy','replication_factor':'1'};"); + + List keyspaces = session.getCluster().getMetadata().getKeyspaces(); + List filteredKeyspaces = keyspaces + .stream() + .filter(km -> km.getName().equals("test")) + .collect(Collectors.toList()); + + assertEquals(1, filteredKeyspaces.size()); + } + } +} +// } diff --git a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java new file mode 100644 index 00000000000..8d504c54a00 --- /dev/null +++ b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java @@ -0,0 +1,36 @@ +package org.testcontainers.containers; +// cassandra4 { +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +public class CassandraDriver4Test { + + @Rule + public CassandraContainer cassandra = new CassandraContainer("cassandra:3.11.2"); + + @Test + public void test() { + try (CqlSession session = CqlSession.builder() + .addContactPoint(cassandra.getContactPoint()) + .withLocalDatacenter(cassandra.getLocalDatacenter()) + .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); + } + } + +} +//} diff --git a/examples/settings.gradle b/examples/settings.gradle index 5a4ae8c0d2e..6726f031fe8 100644 --- a/examples/settings.gradle +++ b/examples/settings.gradle @@ -33,6 +33,7 @@ include 'spring-boot' include 'cucumber' include 'spring-boot-kotlin-redis' include 'spock' +include 'cassandra-container' ext.isCI = System.getenv("CI") != null From f8fb1054ff6c565666c4803192cb1d1b429a7c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez=20Gonzales?= Date: Thu, 28 Jul 2022 10:16:35 -0500 Subject: [PATCH 8/9] Update docs/modules/databases/cassandra.md Co-authored-by: Kevin Wittek --- docs/modules/databases/cassandra.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/databases/cassandra.md b/docs/modules/databases/cassandra.md index a2f462dd4ad..0ddd1f28ff3 100644 --- a/docs/modules/databases/cassandra.md +++ b/docs/modules/databases/cassandra.md @@ -10,7 +10,7 @@ This example connects to the Cassandra Cluster, creates a keyspaces and asserts !!! warning - All methods returning instances of the Cassandra Driver's Cluster object in CassandraContainer have been deprecated. Providing these methods unnecessarily couples the Container to the Driver and creates potential breaking changes if the driver is updated. + All methods returning instances of the Cassandra Driver's Cluster object in `CassandraContainer` have been deprecated. Providing these methods unnecessarily couples the Container to the Driver and creates potential breaking changes if the driver is updated. ## Adding this module to your project dependencies From e354cb4ddcd01ac46958509941c6f5a60254dbb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 28 Jul 2022 13:07:58 -0500 Subject: [PATCH 9/9] example removed and add split tests for drivers --- docs/modules/databases/cassandra.md | 3 +- examples/cassandra-container/build.gradle | 20 ---------- .../containers/CassandraDriver3Test.java | 40 ------------------- .../containers/CassandraDriver4Test.java | 36 ----------------- examples/settings.gradle | 1 - .../containers/CassandraContainerTest.java | 26 ------------ .../containers/CassandraDriver3Test.java | 37 +++++++++++++++++ .../containers/CassandraDriver4Test.java | 35 ++++++++++++++++ 8 files changed, 73 insertions(+), 125 deletions(-) delete mode 100644 examples/cassandra-container/build.gradle delete mode 100644 examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java delete mode 100644 examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java create mode 100644 modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java create mode 100644 modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java diff --git a/docs/modules/databases/cassandra.md b/docs/modules/databases/cassandra.md index 0ddd1f28ff3..73f93bf203a 100644 --- a/docs/modules/databases/cassandra.md +++ b/docs/modules/databases/cassandra.md @@ -5,8 +5,7 @@ This example connects to the Cassandra Cluster, creates a keyspaces and asserts that is has been created. -[Cassandra Driver 4.x](../../../examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java) inside_block:cassandra4 -[Cassandra Driver 3.x](../../../examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java) inside_block:cassandra3 +[Building CqlSession](../../../modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java) inside_block:cassandra !!! warning diff --git a/examples/cassandra-container/build.gradle b/examples/cassandra-container/build.gradle deleted file mode 100644 index 15a0ed8b568..00000000000 --- a/examples/cassandra-container/build.gradle +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - id 'java' -} - -repositories { - mavenCentral() -} - -configurations.all { - resolutionStrategy { - force 'io.dropwizard.metrics:metrics-core:3.2.4' - } -} - -dependencies { - testImplementation 'org.testcontainers:cassandra' - testImplementation 'junit:junit:4.13.2' -// testRuntimeOnly 'com.datastax.cassandra:cassandra-driver-core:3.10.0' - testImplementation 'com.datastax.oss:java-driver-core:4.8.0' -} diff --git a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java deleted file mode 100644 index 916795e13ff..00000000000 --- a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.testcontainers.containers; -// cassandra3 { -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.KeyspaceMetadata; -import com.datastax.driver.core.Session; -import org.junit.Rule; -import org.junit.Test; - -import java.util.List; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; - -public class CassandraDriver3Test { - - @Rule - public CassandraContainer cassandra = new CassandraContainer("cassandra:3.11.2"); - - @Test - public void test() { - try (Cluster cluster = Cluster.builder() - .addContactPoint(cassandra.getHost()) - .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) - .build(); - Session session = cluster.connect()) { - - session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH replication = \n" + - "{'class':'SimpleStrategy','replication_factor':'1'};"); - - List keyspaces = session.getCluster().getMetadata().getKeyspaces(); - List filteredKeyspaces = keyspaces - .stream() - .filter(km -> km.getName().equals("test")) - .collect(Collectors.toList()); - - assertEquals(1, filteredKeyspaces.size()); - } - } -} -// } diff --git a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java b/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java deleted file mode 100644 index 8d504c54a00..00000000000 --- a/examples/cassandra-container/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.testcontainers.containers; -// cassandra4 { -import com.datastax.oss.driver.api.core.CqlIdentifier; -import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata; -import org.junit.Rule; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -public class CassandraDriver4Test { - - @Rule - public CassandraContainer cassandra = new CassandraContainer("cassandra:3.11.2"); - - @Test - public void test() { - try (CqlSession session = CqlSession.builder() - .addContactPoint(cassandra.getContactPoint()) - .withLocalDatacenter(cassandra.getLocalDatacenter()) - .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); - } - } - -} -//} diff --git a/examples/settings.gradle b/examples/settings.gradle index 6726f031fe8..5a4ae8c0d2e 100644 --- a/examples/settings.gradle +++ b/examples/settings.gradle @@ -33,7 +33,6 @@ include 'spring-boot' include 'cucumber' include 'spring-boot-kotlin-redis' include 'spock' -include 'cassandra-container' ext.isCI = System.getenv("CI") != null diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java index 5f2c6f964a1..d1ad581bcc0 100644 --- a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraContainerTest.java @@ -4,7 +4,6 @@ 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 lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.testcontainers.containers.wait.CassandraQueryWaitStrategy; @@ -126,25 +125,6 @@ public void testCassandraGetCluster() { } } - @Test - public void testCassandraGetContactPoint() { - try ( - CassandraContainer cassandraContainer = new CassandraContainer<>(CASSANDRA_IMAGE) - .withEnv("CASSANDRA_DC", "testdc") - ) { - cassandraContainer.start(); - CqlSession session = CqlSession - .builder() - .addContactPoint(cassandraContainer.getContactPoint()) - .withLocalDatacenter(cassandraContainer.getLocalDatacenter()) - .build(); - com.datastax.oss.driver.api.core.cql.ResultSet resultSet = performQuery(session, BASIC_QUERY); - assertEquals("CASSANDRA_DC is not testdc", "testdc", cassandraContainer.getEnvMap().get("CASSANDRA_DC")); - 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()); @@ -168,10 +148,4 @@ private ResultSet performQuery(Cluster cluster, String cql) { return session.execute(cql); } } - - private com.datastax.oss.driver.api.core.cql.ResultSet performQuery(CqlSession session, String cql) { - try (CqlSession closeableSession = session) { - return closeableSession.execute(cql); - } - } } diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java new file mode 100644 index 00000000000..78f3fd2a664 --- /dev/null +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver3Test.java @@ -0,0 +1,37 @@ +package org.testcontainers.containers; + +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +public class CassandraDriver3Test { + + @Rule + public CassandraContainer cassandra = new CassandraContainer<>("cassandra:3.11.2"); + + @Test + public void testCassandraGetContactPoint() { + try ( + // cassandra { + CqlSession session = CqlSession + .builder() + .addContactPoint(this.cassandra.getContactPoint()) + .withLocalDatacenter(this.cassandra.getLocalDatacenter()) + .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); + } + } +} diff --git a/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java new file mode 100644 index 00000000000..3a05bc723bc --- /dev/null +++ b/modules/cassandra/src/test/java/org/testcontainers/containers/CassandraDriver4Test.java @@ -0,0 +1,35 @@ +package org.testcontainers.containers; + +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertNotNull; + +public class CassandraDriver4Test { + + @Rule + public CassandraContainer cassandra = new CassandraContainer<>("cassandra:3.11.2"); + + @Test + public void testCassandraGetContactPoint() { + try ( + CqlSession session = CqlSession + .builder() + .addContactPoint(this.cassandra.getContactPoint()) + .withLocalDatacenter(this.cassandra.getLocalDatacenter()) + .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); + } + } +}