You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/04/02 14:10:33 UTC

[camel-quarkus] branch master updated: Use testcontainer to test camel infinispan extension to reduce test dependencies on infinispan

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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 3d8ac9a  Use testcontainer to test camel infinispan extension to reduce test dependencies on infinispan
3d8ac9a is described below

commit 3d8ac9ac7f4d1e43b01e4a6a50979c052443a143
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Thu Apr 2 14:39:20 2020 +0200

    Use testcontainer to test camel infinispan extension to reduce test dependencies on infinispan
---
 integration-tests/infinispan/pom.xml               | 76 ++--------------------
 .../component/infinispan/InfinispanResources.java  | 11 ++++
 .../component/infinispan/InfinispanRoutes.java     |  4 +-
 .../src/main/resources/application.properties      |  6 --
 .../infinispan/InfinispanServerTestResource.java   | 63 ++++++++++++------
 .../quarkus/testcontainers/ContainerSupport.java}  | 32 ++-------
 6 files changed, 68 insertions(+), 124 deletions(-)

diff --git a/integration-tests/infinispan/pom.xml b/integration-tests/infinispan/pom.xml
index fe80a0a..4d7a311 100644
--- a/integration-tests/infinispan/pom.xml
+++ b/integration-tests/infinispan/pom.xml
@@ -70,6 +70,12 @@
         </dependency>
 
         <!-- test dependencies -->
+
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-testcontainers-support</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-junit5</artifactId>
@@ -80,76 +86,6 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-core</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.jboss.spec.javax.transaction</groupId>
-                    <artifactId>jboss-transaction-api_1.2_spec</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-component-annotations</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-server-hotrod</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-server-hotrod</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-remote-query-server</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.hibernate</groupId>
-                    <artifactId>hibernate-search-serialization-avro</artifactId>
-                </exclusion>
-            </exclusions>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.infinispan</groupId>
-            <artifactId>infinispan-commons-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <!--
-            We override these to satisfy Infinispan server, see:
-
-              https://github.com/quarkusio/quarkus/blob/1.0.0.CR2/integration-tests/infinispan-client/pom.xml#L84-L99
-
-            TODO: remove
-        -->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.10.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>2.10.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>2.10.0</version>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java b/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java
index 63f065f..a3b49dc 100644
--- a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java
+++ b/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.component.infinispan;
 
+import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import javax.ws.rs.GET;
@@ -25,13 +26,23 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.camel.ProducerTemplate;
+import org.infinispan.client.hotrod.RemoteCacheManager;
 
 @Path("/test")
 @ApplicationScoped
 public class InfinispanResources {
+    public static final String CACHE_NAME = "camel";
+
+    @Inject
+    RemoteCacheManager cacheManager;
     @Inject
     ProducerTemplate template;
 
+    @PostConstruct
+    public void setUp() {
+        cacheManager.administration().getOrCreateCache(CACHE_NAME, (String) null);
+    }
+
     @Path("/get")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
diff --git a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanRoutes.java b/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanRoutes.java
index c83469a..6a4e21e 100644
--- a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanRoutes.java
+++ b/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanRoutes.java
@@ -35,13 +35,13 @@ public class InfinispanRoutes extends RouteBuilder {
                 .setHeader(InfinispanConstants.OPERATION).constant(InfinispanOperation.PUT)
                 .setHeader(InfinispanConstants.KEY).constant("the-key".getBytes(StandardCharsets.UTF_8))
                 .setHeader(InfinispanConstants.VALUE).body()
-                .to("infinispan:default")
+                .toF("infinispan:%s", InfinispanResources.CACHE_NAME)
                 .to("log:put?showAll=true");
 
         from("direct:get")
                 .setHeader(InfinispanConstants.OPERATION).constant(InfinispanOperation.GET)
                 .setHeader(InfinispanConstants.KEY).constant("the-key".getBytes(StandardCharsets.UTF_8))
-                .to("infinispan:default")
+                .toF("infinispan:%s", InfinispanResources.CACHE_NAME)
                 .to("log:get?showAll=true");
     }
 }
diff --git a/integration-tests/infinispan/src/main/resources/application.properties b/integration-tests/infinispan/src/main/resources/application.properties
index 48dfea8..494bcea 100644
--- a/integration-tests/infinispan/src/main/resources/application.properties
+++ b/integration-tests/infinispan/src/main/resources/application.properties
@@ -20,12 +20,6 @@
 quarkus.log.file.enable = false
 
 #
-# Quarkus
-#
-quarkus.infinispan-client.server-list = localhost:11232
-quarkus.infinispan-client.near-cache-max-entries = 3
-
-#
 # Camel
 #
 camel.context.name = quarkus-camel-example
diff --git a/integration-tests/infinispan/src/test/java/org/apache/camel/quarkus/component/infinispan/InfinispanServerTestResource.java b/integration-tests/infinispan/src/test/java/org/apache/camel/quarkus/component/infinispan/InfinispanServerTestResource.java
index e9dec75..1e2cc9b 100644
--- a/integration-tests/infinispan/src/test/java/org/apache/camel/quarkus/component/infinispan/InfinispanServerTestResource.java
+++ b/integration-tests/infinispan/src/test/java/org/apache/camel/quarkus/component/infinispan/InfinispanServerTestResource.java
@@ -16,38 +16,61 @@
  */
 package org.apache.camel.quarkus.component.infinispan;
 
-import java.util.Collections;
 import java.util.Map;
 
-import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
-import org.infinispan.commons.test.TestResourceTracker;
-import org.infinispan.configuration.cache.ConfigurationBuilder;
-import org.infinispan.configuration.global.GlobalConfigurationBuilder;
-import org.infinispan.manager.EmbeddedCacheManager;
-import org.infinispan.server.hotrod.HotRodServer;
-import org.infinispan.server.hotrod.test.HotRodTestingUtil;
-import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.apache.camel.quarkus.testcontainers.ContainerResourceLifecycleManager;
+import org.apache.camel.util.CollectionHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.utility.TestcontainersConfiguration;
 
-public class InfinispanServerTestResource implements QuarkusTestResourceLifecycleManager {
-    private HotRodServer hotRodServer;
+import static org.apache.camel.quarkus.testcontainers.ContainerSupport.getHostAndPort;
+
+public class InfinispanServerTestResource implements ContainerResourceLifecycleManager {
+    private static final Logger LOGGER = LoggerFactory.getLogger(InfinispanServerTestResource.class);
+    private static final String CONTAINER_IMAGE = "docker.io/infinispan/server:10.1.5.Final";
+    private static final int HOTROD_PORT = 11222;
+    private static final String USER = "camel";
+    private static final String PASS = "camel";
+
+    private GenericContainer<?> container;
 
     @Override
     public Map<String, String> start() {
-        TestResourceTracker.setThreadTestName("InfinispanServer");
-        EmbeddedCacheManager ecm = TestCacheManagerFactory.createCacheManager(
-                new GlobalConfigurationBuilder().nonClusteredDefault().defaultCacheName("default"),
-                new ConfigurationBuilder());
+        LOGGER.info(TestcontainersConfiguration.getInstance().toString());
 
-        // Client connects to a non default port
-        hotRodServer = HotRodTestingUtil.startHotRodServer(ecm, 11232);
+        try {
+            container = new GenericContainer<>(CONTAINER_IMAGE)
+                    .withExposedPorts(HOTROD_PORT)
+                    .withEnv("USER", USER)
+                    .withEnv("PASS", PASS)
+                    .waitingFor(Wait.forListeningPort());
 
-        return Collections.emptyMap();
+            container.start();
+
+            return CollectionHelper.mapOf(
+                    "quarkus.infinispan-client.server-list", getHostAndPort(container, HOTROD_PORT),
+                    "quarkus.infinispan-client.near-cache-max-entries", "3",
+                    "quarkus.infinispan-client.auth-username", USER,
+                    "quarkus.infinispan-client.auth-password", PASS,
+                    "quarkus.infinispan-client.auth-realm", "default",
+                    "quarkus.infinispan-client.sasl-mechanism", "DIGEST-MD5",
+                    "quarkus.infinispan-client.auth-server-name", "infinispan");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
     public void stop() {
-        if (hotRodServer != null) {
-            hotRodServer.stop();
+        try {
+            if (container != null) {
+                container.stop();
+            }
+        } catch (Exception e) {
+            // ignored
         }
     }
 }
diff --git a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java b/integration-tests/support/testcontainers-support/src/main/java/org/apache/camel/quarkus/testcontainers/ContainerSupport.java
similarity index 51%
copy from integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java
copy to integration-tests/support/testcontainers-support/src/main/java/org/apache/camel/quarkus/testcontainers/ContainerSupport.java
index 63f065f..26c9d1b 100644
--- a/integration-tests/infinispan/src/main/java/org/apache/camel/quarkus/component/infinispan/InfinispanResources.java
+++ b/integration-tests/support/testcontainers-support/src/main/java/org/apache/camel/quarkus/testcontainers/ContainerSupport.java
@@ -14,35 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.infinispan;
+package org.apache.camel.quarkus.testcontainers;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import org.testcontainers.containers.GenericContainer;
 
-import org.apache.camel.ProducerTemplate;
-
-@Path("/test")
-@ApplicationScoped
-public class InfinispanResources {
-    @Inject
-    ProducerTemplate template;
-
-    @Path("/get")
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String get() {
-        return template.requestBody("direct:get", "", String.class);
+public final class ContainerSupport {
+    private ContainerSupport() {
     }
 
-    @Path("/put")
-    @POST
-    @Produces(MediaType.TEXT_PLAIN)
-    public String put(String content) {
-        return template.requestBody("direct:put", content, String.class);
+    public static String getHostAndPort(GenericContainer<?> container, int port) {
+        return container.getContainerIpAddress() + ":" + container.getMappedPort(port).toString();
     }
 }