You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2022/04/16 09:57:38 UTC

[archiva] 01/02: use testcontainers for cassandra test

This is an automated email from the ASF dual-hosted git repository.

olamy pushed a commit to branch master-cassandra-testcontainers
in repository https://gitbox.apache.org/repos/asf/archiva.git

commit 162a743bf7c65a444218851b442abc55fbe22fac
Author: Olivier Lamy <ol...@apache.org>
AuthorDate: Fri Apr 15 11:15:51 2022 +1000

    use testcontainers for cassandra test
    
    Signed-off-by: Olivier Lamy <ol...@apache.org>
---
 .../metadata-store-cassandra/pom.xml               | 155 ++-------------------
 .../cassandra/DefaultCassandraArchivaManager.java  |   1 -
 .../cassandra/CassandraMetadataRepositoryTest.java |  24 ++++
 .../cassandra/RepositoriesNamespaceTest.java       |  28 +++-
 .../META-INF/spring-context.xml                    |   0
 .../src/test/resources/log4j2-test.xml             |   5 +-
 6 files changed, 61 insertions(+), 152 deletions(-)

diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/pom.xml b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/pom.xml
index 0bd365661..b0e9b20fa 100644
--- a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/pom.xml
+++ b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/pom.xml
@@ -165,7 +165,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-1.2-api</artifactId>
+      <artifactId>log4j-core</artifactId>
       <version>${log4j.version}</version>
       <scope>test</scope>
     </dependency>
@@ -176,147 +176,26 @@
       <scope>test</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.testcontainers</groupId>
+      <artifactId>cassandra</artifactId>
+      <version>1.17.1</version>
+      <scope>test</scope>
+    </dependency>
 
   </dependencies>
 
   <build>
-    <testResources>
-      <testResource>
-        <directory>src/test/filtered-resources</directory>
-        <filtering>true</filtering>
-      </testResource>
-    </testResources>
-
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>reserve-ports</id>
-            <phase>process-test-resources</phase>
-            <goals>
-              <goal>reserve-network-port</goal>
-            </goals>
-            <configuration>
-              <portNames>
-                <portName>cassandra.rpcPort</portName>
-                <portName>cassandra.storagePort</portName>
-                <portName>cassandra.stopPort</portName>
-                <portName>cassandra.jmxPort</portName>
-                <portName>cassandra.nativeTransportPort</portName>
-              </portNames>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>cassandra-maven-plugin</artifactId>
-        <version>3.7-SNAPSHOT</version>
-        <executions>
-          <execution>
-            <id>start-cassandra</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <nativeTransportPort>${cassandra.nativeTransportPort}</nativeTransportPort>
-              <rpcPort>${cassandra.rpcPort}</rpcPort>
-              <storagePort>${cassandra.storagePort}</storagePort>
-              <stopPort>${cassandra.stopPort}</stopPort>
-              <jmxPort>${cassandra.jmxPort}</jmxPort>
-              <addMainClasspath>false</addMainClasspath>
-              <addTestClasspath>false</addTestClasspath>
-              <startWaitSeconds>500</startWaitSeconds>
-              <startNativeTransport>true</startNativeTransport>
-              <logLevel>INFO</logLevel>
-              <loadAfterFirstStart>false</loadAfterFirstStart>
-              <systemPropertyVariables>
-                <cassandra.jmx.local.port>${cassandra.jmxPort}</cassandra.jmx.local.port>
-              </systemPropertyVariables>
-              <yaml><![CDATA[rpc_address: 127.0.0.1
-broadcast_rpc_address: 127.0.0.1
-listen_address: 127.0.0.1
-auto_snapshot: false
-snapshot_before_compaction: false
-num_tokens: 1
-]]></yaml>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-cassandra</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-        <dependencies>
-          <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <version>${slf4j.version}</version>
-          </dependency>
-          <dependency>
-            <groupId>net.java.dev.jna</groupId>
-            <artifactId>jna</artifactId>
-            <version>4.2.2</version>
-          </dependency>
-            <dependency>
-              <groupId>org.apache.cassandra</groupId>
-              <artifactId>cassandra-all</artifactId>
-              <version>${cassandraVersion}</version>
-            </dependency>
-        </dependencies>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>3.0.0-M5</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <includes>
-            <include>**/*Test.java</include>
-          </includes>
-          <systemPropertyVariables>
-            <cassandra.port>${cassandra.nativeTransportPort}</cassandra.port>
-            <cassandra.host>127.0.0.1</cassandra.host>
-            <archiva.repositorySessionFactory.id>cassandra</archiva.repositorySessionFactory.id>
-            <appserver.base>${project.build.directory}/appserver-base</appserver.base>
-            <java.net.preferIPv4Stack>true</java.net.preferIPv4Stack>
-          </systemPropertyVariables>
-          <trimStackTrace>false</trimStackTrace>
-          <skip>false</skip>
-          <classesDirectory>${project.build.outputDirectory}</classesDirectory>
-        </configuration>
-        <dependencies>
-          <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
-            <version>${junit.jupiter.version}</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-
-    </plugins>
     <pluginManagement>
       <plugins>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
-          <executions>
-          </executions>
           <configuration>
-            <skip>true</skip>
+            <systemPropertyVariables>
+              <archiva.repositorySessionFactory.id>cassandra</archiva.repositorySessionFactory.id>
+              <appserver.base>${project.build.directory}/appserver-base</appserver.base>
+            </systemPropertyVariables>
           </configuration>
         </plugin>
 
@@ -326,7 +205,6 @@ num_tokens: 1
           <configuration>
             <excludes>
               <exclude>src/cassandra/**</exclude>
-              <exclude>src/test/resources/cassandra-test.yaml</exclude>
             </excludes>
           </configuration>
         </plugin>
@@ -334,15 +212,4 @@ num_tokens: 1
     </pluginManagement>
   </build>
 
-  <profiles>
-    <profile>
-      <id>jdk9+</id>
-      <activation>
-        <jdk>[1.9,)</jdk>
-      </activation>
-      <properties >
-        <cassandra.addJdk11Options>true</cassandra.addJdk11Options>
-      </properties>
-    </profile>
-  </profiles>
 </project>
diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
index df53f600b..21df2ca15 100644
--- a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
+++ b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
@@ -182,7 +182,6 @@ public class DefaultCassandraArchivaManager
         hostNames.add( cassandraHost + ":" + cassandraPort );
         configLoader =
             DriverConfigLoader.programmaticBuilder( )
-
                 .withStringList( DefaultDriverOption.CONTACT_POINTS, hostNames )
                 .withInt( DefaultDriverOption.CONNECTION_POOL_LOCAL_SIZE, maxActive )
                 .withInt( DefaultDriverOption.CONNECTION_POOL_REMOTE_SIZE, maxActive )
diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
index c1e07a07a..64abf10a1 100644
--- a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
+++ b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
@@ -27,13 +27,19 @@ import org.apache.archiva.metadata.repository.MetadataService;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.slf4j.LoggerFactory;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.testcontainers.containers.CassandraContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.utility.DockerImageName;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -70,6 +76,9 @@ public class CassandraMetadataRepositoryTest
 
     RepositorySession session;
 
+    private static final CassandraContainer CASSANDRA =
+            new CassandraContainer(DockerImageName.parse("cassandra").withTag("3.11.2"));
+
     long cTime;
     int testNum = 0;
     final AtomicBoolean clearedTables = new AtomicBoolean( false );
@@ -87,6 +96,21 @@ public class CassandraMetadataRepositoryTest
         return cmr;
     }
 
+    @BeforeAll
+    public static void initCassandra()
+            throws Exception {
+        CASSANDRA.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("org.apache.archiva.metadata.repository.cassandra.logs")));
+        CASSANDRA.start();
+        System.setProperty("cassandra.host", CASSANDRA.getHost());
+        System.setProperty("cassandra.port", CASSANDRA.getMappedPort(9042).toString());
+    }
+
+    @AfterAll
+    public static void stopCassandra()
+            throws Exception {
+        CASSANDRA.close();
+    }
+
     @BeforeEach
     public void setUp( TestInfo testInfo )
         throws Exception
diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
index 7bcc68758..a5931e8cd 100644
--- a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
+++ b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
@@ -22,7 +22,9 @@ package org.apache.archiva.metadata.repository.cassandra;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
 import org.apache.archiva.metadata.repository.cassandra.model.Repository;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -30,6 +32,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.testcontainers.containers.CassandraContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.utility.DockerImageName;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -44,15 +49,32 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class RepositoriesNamespaceTest
 {
 
-    private Logger logger = LoggerFactory.getLogger( getClass() );
+    private static final Logger LOGGER = LoggerFactory.getLogger( RepositoriesNamespaceTest.class );
+
+    private static final CassandraContainer CASSANDRA =
+            new CassandraContainer(DockerImageName.parse("cassandra").withTag("3.11.2"));
 
     @Inject
     @Named( value = "archivaEntityManagerFactory#cassandra" )
     CassandraArchivaManager cassandraArchivaManager;
 
-
     CassandraMetadataRepository cmr;
 
+    @BeforeAll
+    public static void initCassandra()
+            throws Exception {
+        CASSANDRA.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("org.apache.archiva.metadata.repository.cassandra.logs")));
+        CASSANDRA.start();
+        System.setProperty("cassandra.host", CASSANDRA.getHost());
+        System.setProperty("cassandra.port", CASSANDRA.getMappedPort(9042).toString());
+    }
+
+    @AfterAll
+    public static void stopCassandra()
+        throws Exception {
+        CASSANDRA.close();
+    }
+
     @BeforeEach
     public void setup()
         throws Exception
@@ -131,7 +153,7 @@ public class RepositoriesNamespaceTest
         }
         catch ( Exception e )
         {
-            logger.error( e.getMessage(), e );
+            LOGGER.error( e.getMessage(), e );
             throw e;
         }
         finally
diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/filtered-resources/META-INF/spring-context.xml b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/META-INF/spring-context.xml
similarity index 100%
rename from archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/filtered-resources/META-INF/spring-context.xml
rename to archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/META-INF/spring-context.xml
diff --git a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/log4j2-test.xml b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/log4j2-test.xml
index 6e871d967..de342df96 100644
--- a/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/log4j2-test.xml
+++ b/archiva-modules/metadata/metadata-store-provider/metadata-store-cassandra/src/test/resources/log4j2-test.xml
@@ -21,11 +21,8 @@
 
 <configuration status="debug">
 
-
-
   <appenders>
     <Console name="console" target="SYSTEM_OUT">
-      <!--PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/-->
       <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}" />
     </Console>
 
@@ -34,7 +31,7 @@
 
 
     <logger name="org.apache.archiva.metadata.repository.cassandra" level="debug"/>
-
+    <logger name="org.apache.archiva.metadata.repository.cassandra.logs" level="debug"/>
     <root level="debug" includeLocation="true">
       <appender-ref ref="console"/>
     </root>