mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Maxim Thomas
03.16.2023 623bc6b3c8405d1b4b6058bf3ebcbfad30e1c837
Add TestContainers to test Apache Cassandra backend (#307)

3 files modified
64 ■■■■ changed files
opendj-server-legacy/pom.xml 7 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/EncryptedTestCase.java 32 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/backends/cassandra/TestCase.java 25 ●●●●● patch | view | raw | blame | history
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>
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();
        }
    }
}
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();
        }
    }
}