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/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

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();
+		}
+	}
 }

--
Gitblit v1.10.0