You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2022/03/30 15:48:11 UTC

[activemq-artemis] branch main updated: ARTEMIS-3749 e2e-tests improvements

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

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new dbd60d0  ARTEMIS-3749 e2e-tests improvements
dbd60d0 is described below

commit dbd60d0afb9844406b0727116d86dcd9df0caf39
Author: Tiago Bueno <49...@users.noreply.github.com>
AuthorDate: Thu Mar 24 12:24:45 2022 -0300

    ARTEMIS-3749 e2e-tests improvements
    
    Scripts:
    - Fix the preapre-docker.sh to exit with 0 instead of 1 on success
    
    On pom files:
    - Change e2e-tests variable names to e2e-tests.xxxxxx for clarity on
      e2e-tests variables
    - Add e2e-tests.skipImageBuild variable to control if the docker image
      will be build (defaults to not build)
    - Add e2e-tests.dockerfile variable to specify the dockerfile to be
      used (defaults to Dockerfile-centos)
    - Bump testcontainers version to 1.16.3
    - Add artemis distribution dependency since the docker image build
      depends on it
    
    On ContainerService class:
    - Fix exposePorts and exporseFolder to use SELinux shared mode
      otherwise the mount fails on machines with SELinux enabled
    - Move the logic to use specific user on container from generic start
      method to broker specific method to avoid affect other images
    - Update the broker image name to a more generic name (activemq-artemis
      instead of artemis-centos)
    - Update the broker image tag to match with the project version in pom
      file
---
 artemis-docker/prepare-docker.sh                   |  4 +-
 pom.xml                                            | 25 ++++++-
 tests/e2e-tests/pom.xml                            | 82 ++++++++++++++++++++--
 .../artemis/tests/e2e/common/ContainerService.java | 24 ++++---
 tests/pom.xml                                      |  3 +-
 tests/smoke-tests/pom.xml                          |  2 -
 6 files changed, 116 insertions(+), 24 deletions(-)

diff --git a/artemis-docker/prepare-docker.sh b/artemis-docker/prepare-docker.sh
index 017c1f5..53af6fd 100755
--- a/artemis-docker/prepare-docker.sh
+++ b/artemis-docker/prepare-docker.sh
@@ -73,7 +73,7 @@ tag names for the purpose of this guide
 For more info read the readme.md
 
 HERE
-  exit 1
+  exit 0
 }
 
 while [ "$#" -ge 1 ]
@@ -181,4 +181,4 @@ cp ./docker-run.sh "$ARTEMIS_DIST/docker"
 echo "Docker file support files at : $ARTEMIS_DIST/docker"
 tree "$ARTEMIS_DIST/docker"
 
-next_step
\ No newline at end of file
+next_step
diff --git a/pom.xml b/pom.xml
index b3030da..2ae1b30 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,6 +162,9 @@
       <version.jaxb.runtime>2.3.3</version.jaxb.runtime>
       <paho.client.mqtt.version>1.2.5</paho.client.mqtt.version>
       <postgresql.version>42.3.3</postgresql.version>
+      <testcontainers.version>1.16.3</testcontainers.version>
+      <exec-maven-plugin.version>3.0.0</exec-maven-plugin.version>
+
       <!-- for JakrtaEE -->
       <version.batavia>1.0.10.Final</version.batavia>
 
@@ -194,7 +197,9 @@
       <skipPerformanceTests>true</skipPerformanceTests>
       <skipRestTests>true</skipRestTests>
       <skipActiveMQ5Tests>true</skipActiveMQ5Tests>
-      <skipE2ETests>true</skipE2ETests>
+
+      <e2e-tests.skipTests>true</e2e-tests.skipTests>
+      <e2e-tests.skipImageBuild>true</e2e-tests.skipImageBuild>
 
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -1031,6 +1036,19 @@
             <scope>test</scope>
             <!-- License: EPL 2.0 -->
          </dependency>
+
+         <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+            <version>${testcontainers.version}</version>
+            <scope>test</scope>
+         </dependency>
+         <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>selenium</artifactId>
+            <version>${testcontainers.version}</version>
+            <scope>test</scope>
+         </dependency>
       </dependencies>
 
    </dependencyManagement>
@@ -1742,6 +1760,11 @@
                   </excludes>
                </configuration>
             </plugin>
+            <plugin>
+               <groupId>org.codehaus.mojo</groupId>
+               <artifactId>exec-maven-plugin</artifactId>
+               <version>${exec-maven-plugin.version}</version>
+            </plugin>
          </plugins>
       </pluginManagement>
 
diff --git a/tests/e2e-tests/pom.xml b/tests/e2e-tests/pom.xml
index aafff27..09f606a 100644
--- a/tests/e2e-tests/pom.xml
+++ b/tests/e2e-tests/pom.xml
@@ -28,16 +28,40 @@
    <name>End-to-End Tests</name>
 
    <properties>
-      <activemq.basedir>${project.basedir}/../../</activemq.basedir>
-      <e2ets-surefire-extra-args />
+      <activemq.basedir>${project.basedir}/../..</activemq.basedir>
+      <e2e-tests.surefire-extra-args/>
+      <e2e-tests.dockerfile>Dockerfile-centos</e2e-tests.dockerfile>
+      <e2e-tests.skipImageBuild>true</e2e-tests.skipImageBuild>
+      <e2e-tests.skipTests>true</e2e-tests.skipTests>
+      <distributionDir>${activemq.basedir}/artemis-distribution/target/apache-artemis-${project.version}-bin/apache-artemis-${project.version}</distributionDir>
+      <container-service-argline>-DContainerService.artemis-image.version=${project.version} -DContainerService.artemis-image.userid="1000"</container-service-argline>
    </properties>
 
    <dependencies>
       <dependency>
+         <!-- this dependency is here to make sure this module is only executed
+              after the distribution is created.
+              Otherwise it will get here before the build eventually.
+              e.g if you use mvn install -T 20 -->
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>apache-artemis</artifactId>
+         <version>${project.version}</version>
+         <scope>compile</scope>
+         <type>pom</type>
+         <exclusions>
+            <exclusion>
+               <groupId>org.apache.activemq</groupId>
+               <artifactId>artemis-jms-client-all</artifactId>
+            </exclusion>
+            <exclusion>
+               <groupId>org.apache.activemq</groupId>
+               <artifactId>artemis-jakarta-client-all</artifactId>
+            </exclusion>
+         </exclusions>
+      </dependency>
+      <dependency>
          <groupId>org.testcontainers</groupId>
          <artifactId>testcontainers</artifactId>
-         <version>1.16.2</version>
-         <scope>test</scope>
       </dependency>
       <dependency>
          <groupId>org.apache.activemq</groupId>
@@ -76,6 +100,50 @@
    <build>
       <plugins>
          <plugin>
+            <!-- TODO: Review Codehaus usage...ARTEMIS-3750 -->
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <executions>
+               <execution>
+                  <id>prepare-container-image</id>
+                  <phase>generate-test-resources</phase>
+                  <goals>
+                     <goal>exec</goal>
+                  </goals>
+                  <configuration>
+                     <skip>${e2e-tests.skipImageBuild}</skip>
+                     <executable>./prepare-docker.sh</executable>
+                     <workingDirectory>${activemq.basedir}/artemis-docker</workingDirectory>
+                     <arguments>
+                        <argument>--from-local-dist</argument>
+                        <argument>--local-dist-path</argument>
+                        <argument>${distributionDir}</argument>
+                     </arguments>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>build-container-image</id>
+                  <phase>generate-test-resources</phase>
+                  <goals>
+                     <goal>exec</goal>
+                  </goals>
+                  <configuration>
+                     <skip>${e2e-tests.skipImageBuild}</skip>
+                     <executable>docker</executable>
+                     <workingDirectory>${distributionDir}</workingDirectory>
+                     <arguments>
+                        <argument>build</argument>
+                        <argument>--file</argument>
+                        <argument>${distributionDir}/docker/${e2e-tests.dockerfile}</argument>
+                        <argument>--tag</argument>
+                        <argument>activemq-artemis:${project.version}</argument>
+                        <argument>${distributionDir}</argument>
+                     </arguments>
+                  </configuration>
+               </execution>
+            </executions>
+         </plugin>
+         <plugin>
             <groupId>org.apache.activemq</groupId>
             <artifactId>artemis-maven-plugin</artifactId>
             <executions>
@@ -289,10 +357,10 @@
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <configuration>
-               <skipTests>${skipE2ETests}</skipTests>
-               <argLine>${e2ets-surefire-extra-args} ${activemq-surefire-argline} -Dorg.apache.activemq.artemis.tests.e2e.common.ContainerService.service.userid="1000"</argLine>
+               <skipTests>${e2e-tests.skipTests}</skipTests>
+               <argLine>${e2e-tests.surefire-extra-args} ${activemq-surefire-argline} ${container-service-argline}</argLine>
             </configuration>
          </plugin>
       </plugins>
    </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/tests/e2e-tests/src/test/java/org/apache/activemq/artemis/tests/e2e/common/ContainerService.java b/tests/e2e-tests/src/test/java/org/apache/activemq/artemis/tests/e2e/common/ContainerService.java
index 81918d8..e44e503 100644
--- a/tests/e2e-tests/src/test/java/org/apache/activemq/artemis/tests/e2e/common/ContainerService.java
+++ b/tests/e2e-tests/src/test/java/org/apache/activemq/artemis/tests/e2e/common/ContainerService.java
@@ -18,7 +18,6 @@
 package org.apache.activemq.artemis.tests.e2e.common;
 
 import javax.jms.ConnectionFactory;
-
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -27,8 +26,10 @@ import java.util.function.Consumer;
 
 import org.apache.activemq.artemis.tests.util.CFUtil;
 import org.junit.Assert;
+import org.testcontainers.containers.BindMode;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.Network;
+import org.testcontainers.containers.SelinuxContext;
 import org.testcontainers.containers.output.OutputFrame;
 import org.testcontainers.containers.startupcheck.IsRunningStartupCheckStrategy;
 import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
@@ -183,7 +184,13 @@ public abstract class ContainerService {
 
       @Override
       public Object newBrokerImage() {
-         return new GenericContainer<>(DockerImageName.parse("artemis-centos"));
+         String imageVersion = System.getProperty("ContainerService.artemis-image.version", "latest");
+         GenericContainer<?> container = new GenericContainer<>(DockerImageName.parse("activemq-artemis:" + imageVersion));
+         String userId = System.getProperty("ContainerService.artemis-image.userid", "");
+         if (!userId.isEmpty()) {
+            container.withCreateContainerCmdModifier(cmd -> cmd.withUser(userId));
+         }
+         return container;
       }
 
       @Override
@@ -206,7 +213,7 @@ public abstract class ContainerService {
          File file = new File(hostPath);
          Assert.assertTrue(file.exists());
          Assert.assertFalse(file.isDirectory());
-         ((GenericContainer)container).withFileSystemBind(hostPath, containerPath);
+         ((GenericContainer)container).addFileSystemBind(hostPath, containerPath, BindMode.READ_WRITE, SelinuxContext.SHARED);
       }
 
       @Override
@@ -214,7 +221,7 @@ public abstract class ContainerService {
          File file = new File(hostPath);
          Assert.assertTrue(file.exists());
          Assert.assertTrue(file.isDirectory());
-         ((GenericContainer)container).withFileSystemBind(hostPath, containerPath);
+         ((GenericContainer)container).addFileSystemBind(hostPath, containerPath, BindMode.READ_WRITE, SelinuxContext.SHARED);
       }
 
       @Override
@@ -233,13 +240,8 @@ public abstract class ContainerService {
       @Override
       public void start(Object containerObj) {
          GenericContainer<?> container = (GenericContainer) containerObj;
-         String userId = System.getProperty(ContainerService.class.getName() + ".service.userid", "");
-         if (!userId.isEmpty()) {
-            container.withCreateContainerCmdModifier(cmd -> cmd.withUser(userId));
-         }
-
-         ((GenericContainer)container).setStartupCheckStrategy(new IsRunningStartupCheckStrategy());
-         ((GenericContainer)container).start();
+         container.setStartupCheckStrategy(new IsRunningStartupCheckStrategy());
+         container.start();
       }
 
       @Override
diff --git a/tests/pom.xml b/tests/pom.xml
index 9fc67de..0f93f88 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -139,7 +139,8 @@
       <profile>
          <id>e2e-tests</id>
          <properties>
-            <skipE2ETests>false</skipE2ETests>
+            <e2e-tests.skipTests>false</e2e-tests.skipTests>
+            <e2e-tests.skipImageBuild>false</e2e-tests.skipImageBuild>
          </properties>
       </profile>
    </profiles>
diff --git a/tests/smoke-tests/pom.xml b/tests/smoke-tests/pom.xml
index d55ed53..ddd325d 100644
--- a/tests/smoke-tests/pom.xml
+++ b/tests/smoke-tests/pom.xml
@@ -151,8 +151,6 @@
       <dependency>
          <groupId>org.testcontainers</groupId>
          <artifactId>selenium</artifactId>
-         <version>1.16.2</version>
-         <scope>test</scope>
       </dependency>
       <!-- this dependency is needed for CFUtil and other tools from integration-tests -->
       <dependency>