From 623bc6b3c8405d1b4b6058bf3ebcbfad30e1c837 Mon Sep 17 00:00:00 2001
From: Maxim Thomas <maxim.thomas@gmail.com>
Date: Tue, 03 Oct 2023 14:16:02 +0000
Subject: [PATCH] Add TestContainers to test Apache Cassandra backend (#307)
---
opendj-server-legacy/pom.xml | 7 +++
opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java | 32 +++++++++++++---
opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java | 25 ++++++++++++
3 files changed, 57 insertions(+), 7 deletions(-)
diff --git a/opendj-server-legacy/pom.xml b/opendj-server-legacy/pom.xml
index 0caee10..440a9e5 100644
--- a/opendj-server-legacy/pom.xml
+++ b/opendj-server-legacy/pom.xml
@@ -257,6 +257,13 @@
</exclusion>
</exclusions>
</dependency>
+ <!-- TestContainers-->
+ <dependency>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>cassandra</artifactId>
+ <version>1.19.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build><finalName>${project.groupId}.${project.artifactId}</finalName>
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java
index 03bfd8b..6b6a1e6 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java
@@ -20,22 +20,35 @@
import org.forgerock.opendj.server.config.server.CASBackendCfg;
import org.opends.server.backends.pluggable.PluggableBackendImplTestCase;
+import org.testcontainers.DockerClientFactory;
+import org.testcontainers.containers.CassandraContainer;
import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
import com.datastax.oss.driver.api.core.AllNodesFailedException;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
+import java.net.InetSocketAddress;
+
//docker run --rm -it -p 9042:9042 --name cassandra cassandra
@Test
-public class EncryptedTestCase extends PluggableBackendImplTestCase<CASBackendCfg>
-{
+public class EncryptedTestCase extends PluggableBackendImplTestCase<CASBackendCfg> {
+ CassandraContainer cassandraContainer;
@Override
- protected Backend createBackend()
- {
+ protected Backend createBackend() {
+ if(DockerClientFactory.instance().isDockerAvailable()) {
+ cassandraContainer = new CassandraContainer<>("cassandra:latest").withExposedPorts(9042);
+ cassandraContainer.start();
+ InetSocketAddress contactPoint = cassandraContainer.getContactPoint();
+ final String contactPointString = String.format("%s:%s", contactPoint.getHostName(), contactPoint.getPort());
+ System.setProperty("datastax-java-driver.basic.contact-points.0", contactPointString);
+ System.setProperty("datastax-java-driver.basic.load-balancing-policy.local-datacenter", cassandraContainer.getLocalDatacenter());
+ }
System.setProperty("datastax-java-driver.basic.request.timeout", "30 seconds"); //for docker slow start
+
//test allow cassandra
try(CqlSession session=CqlSession.builder()
.withConfigLoader(DriverConfigLoader.fromDefaults(Storage.class.getClassLoader()))
@@ -48,8 +61,7 @@
}
@Override
- protected CASBackendCfg createBackendCfg()
- {
+ protected CASBackendCfg createBackendCfg() {
CASBackendCfg backendCfg = mockCfg(CASBackendCfg.class);
when(backendCfg.getBackendId()).thenReturn("EncCASTestCase"+System.currentTimeMillis());
when(backendCfg.getDBDirectory()).thenReturn("EncCASTestCase");
@@ -59,4 +71,12 @@
when(backendCfg.getCipherTransformation()).thenReturn("AES/CBC/PKCS5Padding");
return backendCfg;
}
+ @AfterClass
+ @Override
+ public void cleanUp() throws Exception {
+ super.cleanUp();
+ if(cassandraContainer != null) {
+ cassandraContainer.close();
+ }
+ }
}
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java
index 18b0656..d741972 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java
@@ -20,21 +20,35 @@
import org.forgerock.opendj.server.config.server.CASBackendCfg;
import org.opends.server.backends.pluggable.PluggableBackendImplTestCase;
+import org.testcontainers.DockerClientFactory;
+import org.testcontainers.containers.CassandraContainer;
import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
import com.datastax.oss.driver.api.core.AllNodesFailedException;
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
+import java.net.InetSocketAddress;
+
//docker run --rm -it -p 9042:9042 --name cassandra cassandra
@Test
public class TestCase extends PluggableBackendImplTestCase<CASBackendCfg> {
+ CassandraContainer cassandraContainer;
@Override
protected Backend createBackend() {
- System.setProperty("datastax-java-driver.basic.request.timeout", "30 seconds"); //for docker slow start
+ if(DockerClientFactory.instance().isDockerAvailable()) {
+ cassandraContainer = new CassandraContainer<>("cassandra:latest").withExposedPorts(9042);
+ cassandraContainer.start();
+ InetSocketAddress contactPoint = cassandraContainer.getContactPoint();
+ final String contactPointString = String.format("%s:%s", contactPoint.getHostName(), contactPoint.getPort());
+ System.setProperty("datastax-java-driver.basic.contact-points.0", contactPointString);
+ System.setProperty("datastax-java-driver.basic.load-balancing-policy.local-datacenter", cassandraContainer.getLocalDatacenter());
+ }
+
//test allow cassandra
try(CqlSession session=CqlSession.builder()
.withConfigLoader(DriverConfigLoader.fromDefaults(Storage.class.getClassLoader()))
@@ -53,4 +67,13 @@
when(backendCfg.getDBDirectory()).thenReturn("CASTestCase");
return backendCfg;
}
+
+ @AfterClass
+ @Override
+ public void cleanUp() throws Exception {
+ super.cleanUp();
+ if(cassandraContainer != null) {
+ cassandraContainer.close();
+ }
+ }
}
--
Gitblit v1.10.0