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

[camel] branch master updated: CAMEL-15516: Automate camel-nats TLS test

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 72f9cd4  CAMEL-15516: Automate camel-nats TLS test
72f9cd4 is described below

commit 72f9cd40e1d61300891b486dd4a2b799ee092f4b
Author: aldettinger <al...@gmail.com>
AuthorDate: Tue Sep 8 16:14:10 2020 +0200

    CAMEL-15516: Automate camel-nats TLS test
---
 .../component/nats/NatsTLSAuthTestSupport.java     |  65 +++++++++++++++++++++
 .../{NatsProducerTLSTest.java => NatsTLSTest.java} |  35 ++++++-----
 .../org/apache/camel/component/nats/ca.pem         |  20 +++++++
 .../org/apache/camel/component/nats/key.pem        |  28 +++++++++
 .../org/apache/camel/component/nats/keystore.jks   | Bin 3870 -> 3477 bytes
 .../org/apache/camel/component/nats/server.pem     |  20 +++++++
 .../org/apache/camel/component/nats/truststore.jks | Bin 0 -> 1162 bytes
 7 files changed, 155 insertions(+), 13 deletions(-)

diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java
new file mode 100644
index 0000000..f785b64
--- /dev/null
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSAuthTestSupport.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.nats;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
+import org.apache.camel.test.testcontainers.junit5.Wait;
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+
+/*Certificates used for tests with TLS authentication come from:
+ *https://github.com/nats-io/jnats/tree/master/src/test/resources */
+public class NatsTLSAuthTestSupport extends ContainerAwareTestSupport {
+
+    public static final String CONTAINER_IMAGE = "nats:2.1.4";
+    public static final String CONTAINER_NAME = "nats-tls";
+
+    @Override
+    protected GenericContainer<?> createContainer() {
+        return natsContainer();
+    }
+
+    public static GenericContainer natsContainer() {
+        return new GenericContainer(CONTAINER_IMAGE)
+                .withNetworkAliases(CONTAINER_NAME)
+                .withClasspathResourceMapping("org/apache/camel/component/nats", "/nats", BindMode.READ_ONLY)
+                .waitingFor(Wait.forLogMessageContaining("Server is ready", 1))
+                .withCommand(
+                        "--tls",
+                        "--tlscert=/nats/server.pem",
+                        "--tlskey=/nats/key.pem",
+                        "--tlsverify",
+                        "--tlscacert=/nats/ca.pem");
+    }
+
+    public String getNatsBrokerUrl() {
+        return String.format(
+                "%s:%d",
+                getContainerHost(CONTAINER_NAME),
+                getContainerPort(CONTAINER_NAME, 4222));
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        NatsComponent nats = context.getComponent("nats", NatsComponent.class);
+        nats.setServers(getNatsBrokerUrl());
+        return context;
+    }
+
+}
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsProducerTLSTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSTest.java
similarity index 62%
rename from components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsProducerTLSTest.java
rename to components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSTest.java
index 4f76dde..b640245 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsProducerTLSTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsTLSTest.java
@@ -17,27 +17,28 @@
 package org.apache.camel.component.nats;
 
 import org.apache.camel.BindToRegistry;
+import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.support.jsse.KeyManagersParameters;
 import org.apache.camel.support.jsse.KeyStoreParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Disabled;
+import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.junit.jupiter.api.Test;
 
-/* 
- * The keystore used in this test it's from https://github.com/nats-io/jnats/tree/master/src/test/resources, in particular
- * the tls_1222.conf file. Running this test will require use the server-cert.pem and server-key.pem in your gnatsd running instance.
- */
-@Disabled("Require a running Nats server")
-public class NatsProducerTLSTest extends CamelTestSupport {
+public class NatsTLSTest extends NatsTLSAuthTestSupport {
 
     @BindToRegistry("ssl")
     SSLContextParameters ssl = createSSLContextParameters();
 
+    @EndpointInject("mock:received")
+    MockEndpoint mockReceived;
+
     @Test
-    public void sendTest() throws Exception {
-        template.sendBody("direct:send", "pippo");
+    public void sendReceiveNatsRoundTripShouldSucceed() throws Exception {
+        mockReceived.expectedBodiesReceived("pippo");
+        template.requestBody("direct:send", "pippo");
+        mockReceived.assertIsSatisfied();
     }
 
     private SSLContextParameters createSSLContextParameters() {
@@ -51,15 +52,23 @@ public class NatsProducerTLSTest extends CamelTestSupport {
         keyManagersParameters.setKeyStore(keyStore);
         sslContextParameters.setKeyManagers(keyManagersParameters);
 
+        TrustManagersParameters trustManagersParameters = new TrustManagersParameters();
+        KeyStoreParameters trustStore = new KeyStoreParameters();
+        trustStore.setPassword("password");
+        trustStore.setResource("org/apache/camel/component/nats/truststore.jks");
+        trustManagersParameters.setKeyStore(trustStore);
+        sslContextParameters.setTrustManagers(trustManagersParameters);
+
         return sslContextParameters;
     }
 
     @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
+    protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             @Override
-            public void configure() throws Exception {
-                from("direct:send").to("nats:topic=test?servers=localhost:4222&sslContextParameters=#ssl&secure=true");
+            public void configure() {
+                from("direct:send").to("nats:test?sslContextParameters=#ssl&secure=true");
+                from("nats:test?sslContextParameters=#ssl&secure=true").to("mock:received");
             }
         };
     }
diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/ca.pem b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/ca.pem
new file mode 100644
index 0000000..d13e913
--- /dev/null
+++ b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/ca.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDXDCCAkQCCQDI2Vsry8+BDDANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJV
+UzELMAkGA1UECAwCQ0ExEDAOBgNVBAoMB1N5bmFkaWExEDAOBgNVBAsMB25hdHMu
+aW8xEjAQBgNVBAMMCWxvY2FsaG9zdDEcMBoGCSqGSIb3DQEJARYNZGVyZWtAbmF0
+cy5pbzAeFw0xOTEwMTcxMzAzNThaFw0yOTEwMTQxMzAzNThaMHAxCzAJBgNVBAYT
+AlVTMQswCQYDVQQIDAJDQTEQMA4GA1UECgwHU3luYWRpYTEQMA4GA1UECwwHbmF0
+cy5pbzESMBAGA1UEAwwJbG9jYWxob3N0MRwwGgYJKoZIhvcNAQkBFg1kZXJla0Bu
+YXRzLmlvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAohX2dXdHIDM5
+yZDWk96b0mwRTHhBIOKtMPTTs/zKmlAgjjDxW7kSg0JimTNds9YbJ33FhcEJKXtV
+KH3Cn0uyZPS1VcTzPr7XP2QI+9SqqLuahkHAhgqoRwK62fTFJgzdZO0f9w9WwzMi
+gGk/v7KkKFa/9xKLCa9DTEJ9FA34HuYoBxXMZvypDm8d+0kxOCdThpzhKeucE4ya
+jFlvOP9/l7GyjlczzAD/nt/QhPfSeIx1MF0ICj5qzwPD/jB1ekoL9OShoHvoEyXo
+UO13GMdVmZqwJcS7Vk5XNEZoH0cxSw/SrZGCE9SFjR1t8TAe3QZiZ9E8EAg4IzJQ
+jfR2II5LiQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBIwib+0xLth/1+URtgQFn8
+dvQNqnJjlqC27U48qiTCTC5vJWbQDqUg9o6gtwZyYEHQ7dMmn68ozDzcGTCxaikV
+n01Bj2ijODK96Jrm/P5aVkP5Cn06FfudluZI2Q/A1cqTsa8V4rj02PpwCcLEaDqX
+yhztlhbKypWrlGuWpVlDBWstyRar98vvRK1XEyBu2NHp2fy49cwJCub4Cmz920fh
+oiIwzXIKtfnf1GEjUnsuFPMgCxvhjirYNPWWjqaBldrM/dBJqwTyZf/p6g40vufN
+JJDc65c4tyRwBSBdFn+Q4zD44M0AR/8THAeIfsT42lyl8fMV5A4fe1nAVJDC4Z/H
+-----END CERTIFICATE-----
diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/key.pem b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/key.pem
new file mode 100644
index 0000000..f2c2c6c
--- /dev/null
+++ b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQDm+0dlzcmiLa+L
+zdVqeVQ8B1/rWnErK+VvvjH7FmVodg5Z5+RXyojpd9ZBrVd6QrLSVMQPfFvBvGGX
+4yI6Ph5KXUefa31vNOOMhp2FGSmaEVhETKGQ0xRh4VfaAerOP5Cunl0TbSyJyjkV
+a7aeMtcqTEiFL7Ae2EtiMhTrMrYpBDQ8rzm2i1IyTb9DX5v7DUOmrSynQSlVyXCz
+tRVGNL/kHlItpEku1SHt/AD3ogu8EgqQZFB8xRRw9fubYgh4Q0kx80e4k9QtTKnc
+F3B2NGb/ZcE5Z+mmHIBq8J2zKMijOrdd3m5TbQmzDbETEOjs4L1eoZRLcL/cvYu5
+gmXdr4F7AgMBAAECggEBAK4sr3MiEbjcsHJAvXyzjwRRH1Bu+8VtLW7swe2vvrpd
+w4aiKXrV/BXpSsRtvPgxkXyvdMSkpuBZeFI7cVTwAJFc86RQPt77x9bwr5ltFwTZ
+rXCbRH3b3ZPNhByds3zhS+2Q92itu5cPyanQdn2mor9/lHPyOOGZgobCcynELL6R
+wRElkeDyf5ODuWEd7ADC5IFyZuwb3azNVexIK+0yqnMmv+QzEW3hsycFmFGAeB7v
+MIMjb2BhLrRr6Y5Nh+k58yM5DCf9h/OJhDpeXwLkxyK4BFg+aZffEbUX0wHDMR7f
+/nMv1g6cKvDWiLU8xLzez4t2qNIBNdxw5ZSLyQRRolECgYEA+ySTKrBAqI0Uwn8H
+sUFH95WhWUXryeRyGyQsnWAjZGF1+d67sSY2un2W6gfZrxRgiNLWEFq9AaUs0MuH
+6syF4Xwx/aZgU/gvsGtkgzuKw1bgvekT9pS/+opmHRCZyQAFEHj0IEpzyB6rW1u/
+LdlR3ShEENnmXilFv/uF/uXP5tMCgYEA63LiT0w46aGPA/E+aLRWU10c1eZ7KdhR
+c3En6zfgIxgFs8J38oLdkOR0CF6T53DSuvGR/OprVKdlnUhhDxBgT1oQjK2GlhPx
+JV5uMvarJDJxAwsF+7T4H2QtZ00BtEfpyp790+TlypSG1jo/BnSMmX2uEbV722lY
+hzINLY49obkCgYBEpN2YyG4T4+PtuXznxRkfogVk+kiVeVx68KtFJLbnw//UGT4i
+EHjbBmLOevDT+vTb0QzzkWmh3nzeYRM4aUiatjCPzP79VJPsW54whIDMHZ32KpPr
+TQMgPt3kSdpO5zN7KiRIAzGcXE2n/e7GYGUQ1uWr2XMu/4byD5SzdCscQwJ/Ymii
+LoKtRvk/zWYHr7uwWSeR5dVvpQ3E/XtONAImrIRd3cRqXfJUqTrTRKxDJXkCmyBc
+5FkWg0t0LUkTSDiQCJqcUDA3EINFR1kwthxja72pfpwc5Be/nV9BmuuUysVD8myB
+qw8A/KsXsHKn5QrRuVXOa5hvLEXbuqYw29mX6QKBgDGDzIzpR9uPtBCqzWJmc+IJ
+z4m/1NFlEz0N0QNwZ/TlhyT60ytJNcmW8qkgOSTHG7RDueEIzjQ8LKJYH7kXjfcF
+6AJczUG5PQo9cdJKo9JP3e1037P/58JpLcLe8xxQ4ce03zZpzhsxR2G/tz8DstJs
+b8jpnLyqfGrcV2feUtIZ
+-----END PRIVATE KEY-----
diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/keystore.jks b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/keystore.jks
index 75fe5f9..daaea36 100644
Binary files a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/keystore.jks and b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/keystore.jks differ
diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/server.pem b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/server.pem
new file mode 100644
index 0000000..e36fd9d
--- /dev/null
+++ b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/server.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPTCCAiWgAwIBAgIJAJCSLX9jr5W7MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIDAJDQTEQMA4GA1UECgwHU3luYWRpYTEQMA4GA1UECwwH
+bmF0cy5pbzESMBAGA1UEAwwJbG9jYWxob3N0MRwwGgYJKoZIhvcNAQkBFg1kZXJl
+a0BuYXRzLmlvMB4XDTE5MTAxNzEzNTcyNloXDTI5MTAxNDEzNTcyNlowDTELMAkG
+A1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDm+0dlzcmi
+La+LzdVqeVQ8B1/rWnErK+VvvjH7FmVodg5Z5+RXyojpd9ZBrVd6QrLSVMQPfFvB
+vGGX4yI6Ph5KXUefa31vNOOMhp2FGSmaEVhETKGQ0xRh4VfaAerOP5Cunl0TbSyJ
+yjkVa7aeMtcqTEiFL7Ae2EtiMhTrMrYpBDQ8rzm2i1IyTb9DX5v7DUOmrSynQSlV
+yXCztRVGNL/kHlItpEku1SHt/AD3ogu8EgqQZFB8xRRw9fubYgh4Q0kx80e4k9Qt
+TKncF3B2NGb/ZcE5Z+mmHIBq8J2zKMijOrdd3m5TbQmzDbETEOjs4L1eoZRLcL/c
+vYu5gmXdr4F7AgMBAAGjPTA7MBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATAd
+BgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQADggEB
+ADQYaEjWlOb9YzUnFGjfDC06dRZjRmK8TW/4GiDHIDk5TyZ1ROtskvyhVyTZJ5Vs
+qXOKJwpps0jK2edtrvZ7xIGw+Y41oPgYYhr5TK2c+oi2UOHG4BXqRbuwz/5cU+nM
+ZWOG1OrHBCbrMSeFsn7rzETnd8SZnw6ZE7LI62WstdoCY0lvNfjNv3kY/6hpPm+9
+0bVzurZ28pdJ6YEJYgbPcOvxSzGDXTw9LaKEmqknTsrBKI2qm+myVTbRTimojYTo
+rw/xjHESAue/HkpOwWnFTOiTT+V4hZnDXygiSy+LWKP4zLnYOtsn0lN9OmD0z+aa
+gpoVMSncu2jMIDZX63IkQII=
+-----END CERTIFICATE-----
diff --git a/components/camel-nats/src/test/resources/org/apache/camel/component/nats/truststore.jks b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/truststore.jks
new file mode 100644
index 0000000..1d844c5
Binary files /dev/null and b/components/camel-nats/src/test/resources/org/apache/camel/component/nats/truststore.jks differ