You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/02/09 09:38:35 UTC

[camel-quarkus] 04/08: nats: disable tls+auth integration tests and add some additional logging for troubleshooting

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

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

commit 02f206e8a5bc9fdc20c046ae31ab1d5eb6df322e
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Mon Feb 8 10:32:11 2021 +0100

    nats: disable tls+auth integration tests and add some additional logging for troubleshooting
    
    See https://github.com/apache/camel-quarkus/issues/2211
---
 .../component/nats/it/NatsConfiguration.java       |  18 +--
 .../quarkus/component/nats/it/NatsRoutes.java      |   2 +-
 .../camel/quarkus/component/nats/it/NatsTest.java  |   2 +
 .../component/nats/it/NatsTestResource.java        | 150 ++++++++++++++-------
 4 files changed, 117 insertions(+), 55 deletions(-)

diff --git a/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsConfiguration.java b/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsConfiguration.java
index b270159..fe48a7a 100644
--- a/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsConfiguration.java
+++ b/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsConfiguration.java
@@ -34,8 +34,9 @@ public class NatsConfiguration {
     @ConfigProperty(name = NATS_BROKER_URL_NO_AUTH_CONFIG_KEY)
     String natsNoAuthBrokerUrl;
 
-    @ConfigProperty(name = NATS_BROKER_URL_TLS_AUTH_CONFIG_KEY)
-    String natsTlsAuthBrokerUrl;
+    // TODO: https://github.com/apache/camel-quarkus/issues/2211
+    // @ConfigProperty(name = NATS_BROKER_URL_TLS_AUTH_CONFIG_KEY)
+    // String natsTlsAuthBrokerUrl;
 
     @ConfigProperty(name = NATS_BROKER_URL_TOKEN_AUTH_CONFIG_KEY)
     String natsTokenAuthBrokerUrl;
@@ -54,12 +55,13 @@ public class NatsConfiguration {
         return component;
     }
 
-    @Named
-    NatsComponent natsTlsAuth() {
-        NatsComponent component = new NatsComponent();
-        component.setServers(natsTlsAuthBrokerUrl);
-        return component;
-    }
+    // TODO: https://github.com/apache/camel-quarkus/issues/2211
+    // @Named
+    // NatsComponent natsTlsAuth() {
+    //     NatsComponent component = new NatsComponent();
+    //     component.setServers(natsTlsAuthBrokerUrl);
+    //     return component;
+    // }
 
     @Named
     NatsComponent natsTokenAuth() {
diff --git a/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsRoutes.java b/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsRoutes.java
index 67bf1a3..4cf0284 100644
--- a/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsRoutes.java
+++ b/integration-tests/nats/src/main/java/org/apache/camel/quarkus/component/nats/it/NatsRoutes.java
@@ -37,7 +37,7 @@ public class NatsRoutes extends RouteBuilder {
         from("natsBasicAuth:test").routeId("basic-auth").bean(natsResource, "storeMessage");
         from("natsNoAuth:test").routeId("no-auth").bean(natsResource, "storeMessage");
         from("natsTokenAuth:test").routeId("token-auth").bean(natsResource, "storeMessage");
-        from("natsTlsAuth:test?sslContextParameters=#ssl&secure=true").routeId("tls-auth").bean(natsResource, "storeMessage");
+        //from("natsTlsAuth:test?sslContextParameters=#ssl&secure=true").routeId("tls-auth").bean(natsResource, "storeMessage");
 
         from("natsNoAuth:max?maxMessages=2").routeId("2-msg-max").bean(natsResource, "storeMessage");
 
diff --git a/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTest.java b/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTest.java
index 177848f..64bee53 100644
--- a/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTest.java
+++ b/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTest.java
@@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit;
 import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.http.Header;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static io.restassured.RestAssured.given;
@@ -59,6 +60,7 @@ class NatsTest {
         assertEquals("no-auth-msg", messages[0]);
     }
 
+    @Disabled("https://github.com/apache/camel-quarkus/issues/2211")
     @Test
     void tlsAuthProduceConsumeRoundTripShouldSucceed() {
         Header header = new Header("sendToEndpointUri", "natsTlsAuth:test?sslContextParameters=#ssl&secure=true");
diff --git a/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTestResource.java b/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTestResource.java
index 46cc3a0..712f47a 100644
--- a/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTestResource.java
+++ b/integration-tests/nats/src/test/java/org/apache/camel/quarkus/component/nats/it/NatsTestResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.component.nats.it;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.quarkus.testcontainers.ContainerResourceLifecycleManager;
@@ -23,6 +24,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.BindMode;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.SelinuxContext;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.Wait;
 import org.testcontainers.utility.TestcontainersConfiguration;
 
@@ -30,7 +33,6 @@ import static org.apache.camel.quarkus.component.nats.it.NatsConfiguration.NATS_
 import static org.apache.camel.quarkus.component.nats.it.NatsConfiguration.NATS_BROKER_URL_NO_AUTH_CONFIG_KEY;
 import static org.apache.camel.quarkus.component.nats.it.NatsConfiguration.NATS_BROKER_URL_TLS_AUTH_CONFIG_KEY;
 import static org.apache.camel.quarkus.component.nats.it.NatsConfiguration.NATS_BROKER_URL_TOKEN_AUTH_CONFIG_KEY;
-import static org.apache.camel.util.CollectionHelper.mapOf;
 
 public class NatsTestResource implements ContainerResourceLifecycleManager {
 
@@ -41,36 +43,95 @@ public class NatsTestResource implements ContainerResourceLifecycleManager {
     private static final int NATS_SERVER_PORT = 4222;
     private static final String TOKEN_AUTH_TOKEN = "!admin23456";
 
-    private GenericContainer basicAuthContainer, noAuthContainer, tlsAuthContainer, tokenAuthContainer;
+    private GenericContainer<?> basicAuthContainer, noAuthContainer, tlsAuthContainer, tokenAuthContainer;
 
     @Override
     public Map<String, String> start() {
         LOG.info(TestcontainersConfiguration.getInstance().toString());
 
-        // Start the container needed for the basic authentication test
-        basicAuthContainer = new GenericContainer(NATS_IMAGE).withExposedPorts(NATS_SERVER_PORT)
+        Map<String, String> properties = new HashMap<>();
+
+        basicAuthContainer = basicAuthContainer(properties);
+        noAuthContainer = noAuthContainer(properties);
+        //tlsAuthContainer = tlsAuthContainer(properties);
+        tokenAuthContainer = tokenAuthContainer(properties);
+
+        LOG.info("Properties: {}", properties);
+
+        return properties;
+    }
+
+    @Override
+    public void stop() {
+        stop(basicAuthContainer);
+        stop(noAuthContainer);
+        stop(tlsAuthContainer);
+        stop(tokenAuthContainer);
+    }
+
+    private void stop(GenericContainer<?> container) {
+        try {
+            if (container != null) {
+                container.stop();
+            }
+        } catch (Exception ex) {
+            LOG.error("An issue occurred while stopping " + container.getNetworkAliases(), ex);
+        }
+    }
+
+    private static GenericContainer<?> basicAuthContainer(Map<String, String> properties) {
+        LOG.info("Starting basicAuthContainer");
+        // container needed for the basic authentication test
+        GenericContainer<?> container = new GenericContainer<>(NATS_IMAGE)
+                .withExposedPorts(NATS_SERVER_PORT)
+                .withNetworkAliases("basicAuthContainer")
                 .withCommand("-DV", "--user", BASIC_AUTH_USERNAME, "--pass", BASIC_AUTH_PASSWORD)
+                .withLogConsumer(new Slf4jLogConsumer(LOG).withPrefix("basicAuthContainer"))
                 .waitingFor(Wait.forLogMessage(".*Server is ready.*", 1));
-        basicAuthContainer.start();
-        String basicAuthIp = basicAuthContainer.getContainerIpAddress();
-        Integer basicAuthPort = basicAuthContainer.getMappedPort(NATS_SERVER_PORT);
+
+        container.start();
+
+        String basicAuthIp = container.getContainerIpAddress();
+        Integer basicAuthPort = container.getMappedPort(NATS_SERVER_PORT);
         String basicAuthAuthority = BASIC_AUTH_USERNAME + ":" + BASIC_AUTH_PASSWORD;
         String basicAuthBrokerUrl = String.format("%s@%s:%d", basicAuthAuthority, basicAuthIp, basicAuthPort);
 
-        // Start the container needed for tests without authentication
-        noAuthContainer = new GenericContainer(NATS_IMAGE).withExposedPorts(NATS_SERVER_PORT)
+        properties.put(NATS_BROKER_URL_BASIC_AUTH_CONFIG_KEY, basicAuthBrokerUrl);
+
+        return container;
+    }
+
+    private static GenericContainer<?> noAuthContainer(Map<String, String> properties) {
+        LOG.info("Starting noAuthContainer");
+        // container needed for the basic authentication test
+        GenericContainer<?> container = new GenericContainer<>(NATS_IMAGE)
+                .withExposedPorts(NATS_SERVER_PORT)
+                .withNetworkAliases("noAuthContainer")
+                .withLogConsumer(new Slf4jLogConsumer(LOG).withPrefix("noAuthContainer"))
                 .waitingFor(Wait.forLogMessage(".*Listening for route connections.*", 1));
-        noAuthContainer.start();
-        String noAuthIp = noAuthContainer.getContainerIpAddress();
-        Integer noAuthPort = noAuthContainer.getMappedPort(NATS_SERVER_PORT);
+
+        container.start();
+
+        String noAuthIp = container.getContainerIpAddress();
+        Integer noAuthPort = container.getMappedPort(NATS_SERVER_PORT);
         String noAuthBrokerUrl = String.format("%s:%s", noAuthIp, noAuthPort);
 
+        properties.put(NATS_BROKER_URL_NO_AUTH_CONFIG_KEY, noAuthBrokerUrl);
+
+        return container;
+    }
+
+    private static GenericContainer<?> tlsAuthContainer(Map<String, String> properties) {
+        LOG.info("Starting tlsAuthContainer");
         // Start the container needed for the TLS authentication test
-        tlsAuthContainer = new GenericContainer(NATS_IMAGE).withExposedPorts(NATS_SERVER_PORT)
-                .withClasspathResourceMapping("certs/ca.pem", "/certs/ca.pem", BindMode.READ_ONLY)
-                .withClasspathResourceMapping("certs/key.pem", "/certs/key.pem", BindMode.READ_ONLY)
-                .withClasspathResourceMapping("certs/server.pem", "/certs/server.pem", BindMode.READ_ONLY)
-                .withClasspathResourceMapping("conf/tls.conf", "/conf/tls.conf", BindMode.READ_ONLY)
+        GenericContainer<?> container = new GenericContainer<>(NATS_IMAGE)
+                .withExposedPorts(NATS_SERVER_PORT)
+                .withNetworkAliases("tlsAuthContainer")
+                .withClasspathResourceMapping("certs/ca.pem", "/certs/ca.pem", BindMode.READ_ONLY, SelinuxContext.SHARED)
+                .withClasspathResourceMapping("certs/key.pem", "/certs/key.pem", BindMode.READ_ONLY, SelinuxContext.SHARED)
+                .withClasspathResourceMapping("certs/server.pem", "/certs/server.pem", BindMode.READ_ONLY,
+                        SelinuxContext.SHARED)
+                .withClasspathResourceMapping("conf/tls.conf", "/conf/tls.conf", BindMode.READ_ONLY, SelinuxContext.SHARED)
                 .withCommand(
                         "--config", "/conf/tls.conf",
                         "--tls",
@@ -78,47 +139,44 @@ public class NatsTestResource implements ContainerResourceLifecycleManager {
                         "--tlskey=/certs/key.pem",
                         "--tlsverify",
                         "--tlscacert=/certs/ca.pem")
+                .withLogConsumer(new Slf4jLogConsumer(LOG).withPrefix("tlsAuthContainer"))
+                .waitingFor(Wait.forListeningPort())
                 .waitingFor(Wait.forLogMessage(".*Server is ready.*", 1));
         try {
-            tlsAuthContainer.start();
+            container.start();
         } catch (Exception ex) {
-            throw new RuntimeException("An issue occurred while starting tlsAuthContainer: " + tlsAuthContainer.getLogs(), ex);
+            throw new RuntimeException("An issue occurred while starting tlsAuthContainer: " + container.getLogs(), ex);
         }
-        String tlsAuthIp = tlsAuthContainer.getContainerIpAddress();
-        Integer tlsAuthPort = tlsAuthContainer.getMappedPort(NATS_SERVER_PORT);
+
+        container.start();
+
+        String tlsAuthIp = container.getContainerIpAddress();
+        Integer tlsAuthPort = container.getMappedPort(NATS_SERVER_PORT);
         String tlsAuthBrokerUrl = String.format("%s:%d", tlsAuthIp, tlsAuthPort);
 
+        properties.put(NATS_BROKER_URL_TLS_AUTH_CONFIG_KEY, tlsAuthBrokerUrl);
+
+        return container;
+    }
+
+    private static GenericContainer<?> tokenAuthContainer(Map<String, String> properties) {
+        LOG.info("Starting tokenAuthContainer");
         // Start the container needed for the token authentication test
-        tokenAuthContainer = new GenericContainer(NATS_IMAGE).withExposedPorts(NATS_SERVER_PORT)
+        GenericContainer<?> container = new GenericContainer<>(NATS_IMAGE)
+                .withExposedPorts(NATS_SERVER_PORT)
+                .withNetworkAliases("tokenAuthContainer")
                 .withCommand("-DV", "-auth", TOKEN_AUTH_TOKEN)
+                .withLogConsumer(new Slf4jLogConsumer(LOG).withPrefix("tokenAuthContainer"))
                 .waitingFor(Wait.forLogMessage(".*Server is ready.*", 1));
-        tokenAuthContainer.start();
-        String tokenAuthIp = tokenAuthContainer.getContainerIpAddress();
-        Integer tokenAuthPort = tokenAuthContainer.getMappedPort(NATS_SERVER_PORT);
+
+        container.start();
+
+        String tokenAuthIp = container.getContainerIpAddress();
+        Integer tokenAuthPort = container.getMappedPort(NATS_SERVER_PORT);
         String tokenAuthBrokerUrl = String.format("%s@%s:%d", TOKEN_AUTH_TOKEN, tokenAuthIp, tokenAuthPort);
 
-        Map<String, String> properties = mapOf(NATS_BROKER_URL_BASIC_AUTH_CONFIG_KEY, basicAuthBrokerUrl);
-        properties.put(NATS_BROKER_URL_NO_AUTH_CONFIG_KEY, noAuthBrokerUrl);
-        properties.put(NATS_BROKER_URL_TLS_AUTH_CONFIG_KEY, tlsAuthBrokerUrl);
         properties.put(NATS_BROKER_URL_TOKEN_AUTH_CONFIG_KEY, tokenAuthBrokerUrl);
-        return properties;
-    }
-
-    @Override
-    public void stop() {
-        stop(basicAuthContainer, "natsBasicAuthContainer");
-        stop(noAuthContainer, "natsNoAuthContainer");
-        stop(tlsAuthContainer, "natsTlsAuthContainer");
-        stop(tokenAuthContainer, "natsTokenAuthContainer");
-    }
 
-    private void stop(GenericContainer<?> container, String id) {
-        try {
-            if (container != null) {
-                container.stop();
-            }
-        } catch (Exception ex) {
-            LOG.error("An issue occured while stopping " + id, ex);
-        }
+        return container;
     }
 }