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

davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.x by this push:
     new 64043211fcf CAMEL-18779: STOMP, use artemis (#9045)
64043211fcf is described below

commit 64043211fcfe86fe9bb5c5d8e9b68ae80b07ebca
Author: Federico Mariani <34543311+cro...@users.noreply.github.com>
AuthorDate: Wed Jan 11 18:00:52 2023 +0100

    CAMEL-18779: STOMP, use artemis (#9045)
---
 components/camel-stomp/pom.xml                     |   8 +-
 .../camel/component/stomp/StompBaseTest.java       | 111 ++++++++-------------
 .../StompConsumerHeaderFilterStrategyTest.java     |   6 +-
 .../camel/component/stomp/StompConsumerTest.java   |   6 +-
 .../component/stomp/StompConsumerUriTest.java      |   4 +-
 .../stomp/StompGlobalSslConsumerTest.java          |   2 +-
 .../camel/component/stomp/StompProducerTest.java   |   2 +-
 .../component/stomp/StompSslConsumerTest.java      |   2 +-
 .../component/stomp/StompSslProducerTest.java      |   2 +-
 .../src/test/resources/jsse/client-side-cert.cer   | Bin 0 -> 905 bytes
 .../test/resources/jsse/client-side-keystore.jks   | Bin 0 -> 2742 bytes
 .../test/resources/jsse/client-side-truststore.jks | Bin 0 -> 1254 bytes
 .../src/test/resources/jsse/client.keystore        | Bin 2201 -> 0 bytes
 .../src/test/resources/jsse/createCertificate.sh   |   9 ++
 .../src/test/resources/jsse/server-side-cert.cer   | Bin 0 -> 878 bytes
 .../test/resources/jsse/server-side-keystore.jks   | Bin 0 -> 2710 bytes
 .../test/resources/jsse/server-side-truststore.jks | Bin 0 -> 1270 bytes
 .../src/test/resources/jsse/server.keystore        | Bin 2201 -> 0 bytes
 18 files changed, 70 insertions(+), 82 deletions(-)

diff --git a/components/camel-stomp/pom.xml b/components/camel-stomp/pom.xml
index b15a0938d98..5a02a7b3778 100644
--- a/components/camel-stomp/pom.xml
+++ b/components/camel-stomp/pom.xml
@@ -53,9 +53,15 @@
             <scope>test</scope>
         </dependency>
         <!-- test infra -->
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>artemis-stomp-protocol</artifactId>
+            <version>${activemq-artemis-version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test-infra-activemq</artifactId>
+            <artifactId>camel-test-infra-artemis</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
             <type>test-jar</type>
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
index b215ce0299a..f1ad9fa3235 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
@@ -18,8 +18,6 @@ package org.apache.camel.component.stomp;
 
 import javax.net.ssl.SSLContext;
 
-import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.SslContext;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.Registry;
@@ -29,32 +27,41 @@ import org.apache.camel.support.jsse.KeyStoreParameters;
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.apache.camel.test.AvailablePortFinder;
-import org.apache.camel.test.infra.activemq.services.ActiveMQEmbeddedService;
-import 
org.apache.camel.test.infra.activemq.services.ActiveMQEmbeddedServiceBuilder;
+import 
org.apache.camel.test.infra.artemis.services.ArtemisEmbeddedServiceBuilder;
+import org.apache.camel.test.infra.artemis.services.ArtemisService;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.fusesource.stomp.client.Stomp;
 import org.junit.jupiter.api.extension.RegisterExtension;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.jupiter.api.Assertions.fail;
 
 public abstract class StompBaseTest extends CamelTestSupport {
 
-    @RegisterExtension
-    public ActiveMQEmbeddedService service = ActiveMQEmbeddedServiceBuilder
-            .bare()
-            .withPersistent(false)
-            .withUseJmx(true)
-            .withDeleteAllMessagesOnStartup(true)
-            .withAdvisorySupport(true)
-            .withCustomSetup(this::configureBroker)
-            .buildWithRecycle();
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
     protected int numberOfMessages = 100;
-    private SSLContextParameters serverSslContextParameters;
-    private SSLContext serverSslContext;
+    int sslServicePort = AvailablePortFinder.getNextAvailable();
+    int servicePort = AvailablePortFinder.getNextAvailable();
+
+    @RegisterExtension
+    public ArtemisService service = new ArtemisEmbeddedServiceBuilder()
+            .withCustomConfiguration(configuration -> {
+                try {
+                    configuration.setJMXManagementEnabled(true);
+
+                    
configuration.addAcceptorConfiguration("stomp-ssl-acceptor",
+                            String.format("tcp://0.0.0.0:%s?" +
+                                          "sslEnabled=true;" +
+                                          
"keyStorePath=jsse/server-side-keystore.jks;" +
+                                          "keyStorePassword=password;" +
+                                          "protocols=STOMP",
+                                    sslServicePort));
+
+                    
configuration.addAcceptorConfiguration("stomp-tcp-acceptor",
+                            String.format("tcp://0.0.0.0:%s?protocols=STOMP",
+                                    servicePort));
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            })
+            .build();
+
     private SSLContextParameters clientSslContextParameters;
     private SSLContext clientSslContext;
 
@@ -77,64 +84,23 @@ public abstract class StompBaseTest extends 
CamelTestSupport {
         return registry;
     }
 
-    private void configureBroker(BrokerService brokerService) {
-        int port = AvailablePortFinder.getNextAvailable();
-
-        if (isUseSsl()) {
-            SslContext sslContext = new SslContext();
-            try {
-                sslContext.setSSLContext(getServerSSLContext());
-            } catch (Exception e) {
-                fail(e.getMessage());
-            }
-
-            brokerService.setSslContext(sslContext);
-            try {
-                brokerService.addConnector("stomp+ssl://localhost:" + port + 
"?trace=true");
-            } catch (Exception e) {
-                fail(e.getMessage());
-            }
-        } else {
-            try {
-                brokerService.addConnector("stomp://localhost:" + port + 
"?trace=true");
-            } catch (Exception e) {
-                fail(e.getMessage());
-            }
-        }
-    }
-
     protected Stomp createStompClient() throws Exception {
         Stomp stomp;
 
         if (isUseSsl()) {
-            stomp = new Stomp("ssl://localhost:" + service.getPort());
+            stomp = new Stomp("ssl://localhost:" + sslServicePort);
             stomp.setSslContext(getClientSSLContext());
         } else {
-            stomp = new Stomp("tcp://localhost:" + service.getPort());
+            stomp = new Stomp("tcp://localhost:" + servicePort);
         }
 
         return stomp;
     }
 
-    protected SSLContextParameters getServerSSLContextParameters() {
-        if (serverSslContextParameters == null) {
-            serverSslContextParameters = 
getSSLContextParameters("jsse/server.keystore", "password");
-        }
-
-        return serverSslContextParameters;
-    }
-
-    protected SSLContext getServerSSLContext() throws Exception {
-        if (serverSslContext == null) {
-            serverSslContext = 
getServerSSLContextParameters().createSSLContext(context);
-        }
-
-        return serverSslContext;
-    }
-
     protected SSLContextParameters getClientSSLContextParameters() {
         if (clientSslContextParameters == null) {
-            clientSslContextParameters = 
getSSLContextParameters("jsse/client.keystore", "password");
+            clientSslContextParameters
+                    = getSSLContextParameters("jsse/client-side-keystore.jks", 
"jsse/client-side-truststore.jks", "password");
         }
 
         return clientSslContextParameters;
@@ -148,23 +114,26 @@ public abstract class StompBaseTest extends 
CamelTestSupport {
         return clientSslContext;
     }
 
-    private SSLContextParameters getSSLContextParameters(String path, String 
password) {
+    private SSLContextParameters getSSLContextParameters(String keyStore, 
String trustStore, String password) {
         // need an early camel context dummy due to ActiveMQEmbeddedService is 
eager initialized
         CamelContext dummy = new DefaultCamelContext();
 
         KeyStoreParameters ksp = new KeyStoreParameters();
         ksp.setCamelContext(dummy);
-        ksp.setResource(path);
+        ksp.setResource(keyStore);
         ksp.setPassword(password);
 
+        KeyStoreParameters tsp = new KeyStoreParameters();
+        tsp.setCamelContext(dummy);
+        tsp.setResource(trustStore);
+        tsp.setPassword(password);
+
         KeyManagersParameters kmp = new KeyManagersParameters();
-        kmp.setCamelContext(dummy);
         kmp.setKeyPassword(password);
         kmp.setKeyStore(ksp);
 
         TrustManagersParameters tmp = new TrustManagersParameters();
-        tmp.setCamelContext(dummy);
-        tmp.setKeyStore(ksp);
+        tmp.setKeyStore(tsp);
 
         SSLContextParameters sslContextParameters = new SSLContextParameters();
         sslContextParameters.setCamelContext(dummy);
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerHeaderFilterStrategyTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerHeaderFilterStrategyTest.java
index 9b912d16b45..ccc39348813 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerHeaderFilterStrategyTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerHeaderFilterStrategyTest.java
@@ -26,6 +26,7 @@ import org.fusesource.stomp.client.BlockingConnection;
 import org.fusesource.stomp.client.Stomp;
 import org.fusesource.stomp.codec.StompFrame;
 import org.junit.jupiter.api.Test;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
 
 import static org.fusesource.hawtbuf.UTF8Buffer.utf8;
 import static org.fusesource.stomp.client.Constants.DESTINATION;
@@ -42,6 +43,8 @@ public class StompConsumerHeaderFilterStrategyTest extends 
StompBaseTest {
         context.addRoutes(createRouteBuilder());
         context.start();
 
+        Awaitility.await().until(() -> 
context.getRoute("headerFilterStrategyRoute").getUptimeMillis() > 100);
+
         Stomp stomp = createStompClient();
         final BlockingConnection producerConnection = stomp.connectBlocking();
 
@@ -64,7 +67,8 @@ public class StompConsumerHeaderFilterStrategyTest extends 
StompBaseTest {
         return new RouteBuilder() {
             public void configure() {
                 
fromF("stomp:test?brokerURL=tcp://localhost:%s&headerFilterStrategy=#customHeaderFilterStrategy",
-                        service.getPort())
+                        servicePort)
+                                .id("headerFilterStrategyRoute")
                                 .transform(body().convertToString())
                                 .to("mock:result");
             }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
index 415f74041b6..6a547473aee 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerTest.java
@@ -43,7 +43,7 @@ public class StompConsumerTest extends StompBaseTest {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(numberOfMessages);
 
-        for (int i = 0; i < numberOfMessages; i++) {
+        for (int i = 0; i < numberOfMessages * 2; i++) {
             StompFrame frame = new StompFrame(SEND);
             frame.addHeader(DESTINATION, StompFrame.encodeHeader("test"));
             frame.addHeader(MESSAGE_ID, StompFrame.encodeHeader("msg:" + i));
@@ -51,7 +51,7 @@ public class StompConsumerTest extends StompBaseTest {
             producerConnection.send(frame);
         }
 
-        mock.await(5, TimeUnit.SECONDS);
+        mock.await(10, TimeUnit.SECONDS);
         mock.assertIsSatisfied();
     }
 
@@ -59,7 +59,7 @@ public class StompConsumerTest extends StompBaseTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                fromF("stomp:test?brokerURL=tcp://localhost:%s", 
service.getPort())
+                fromF("stomp:test?brokerURL=tcp://localhost:%s", servicePort)
                         .transform(body().convertToString())
                         .to("mock:result");
             }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
index 08da92b7ab5..c9cf1fc6341 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompConsumerUriTest.java
@@ -43,7 +43,7 @@ public class StompConsumerUriTest extends StompBaseTest {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(numberOfMessages);
 
-        for (int i = 0; i < numberOfMessages; i++) {
+        for (int i = 0; i < numberOfMessages * 2; i++) {
             StompFrame frame = new StompFrame(SEND);
             frame.addHeader(DESTINATION, StompFrame.encodeHeader("test"));
             frame.addHeader(MESSAGE_ID, StompFrame.encodeHeader("msg:" + i));
@@ -59,7 +59,7 @@ public class StompConsumerUriTest extends StompBaseTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                fromF("stomp:test?brokerURL=tcp://localhost:%d", 
service.getPort())
+                fromF("stomp:test?brokerURL=tcp://localhost:%d", servicePort)
                         .transform(body().convertToString())
                         .to("mock:result");
             }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompGlobalSslConsumerTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompGlobalSslConsumerTest.java
index 5340b2a799b..54e95f270d3 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompGlobalSslConsumerTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompGlobalSslConsumerTest.java
@@ -40,7 +40,7 @@ public class StompGlobalSslConsumerTest extends 
StompConsumerTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                fromF("stomp:test?brokerURL=ssl://localhost:%d", 
service.getPort())
+                fromF("stomp:test?brokerURL=ssl://localhost:%d", 
sslServicePort)
                         .transform(body().convertToString())
                         .to("mock:result");
             }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
index 3be5d50dfa2..3588f5eb372 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompProducerTest.java
@@ -92,7 +92,7 @@ public class StompProducerTest extends StompBaseTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                
from("direct:foo").toF("stomp:test?brokerURL=tcp://localhost:%s", 
service.getPort());
+                
from("direct:foo").toF("stomp:test?brokerURL=tcp://localhost:%s", servicePort);
             }
         };
     }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
index 699b6c873b8..48161e0fefc 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslConsumerTest.java
@@ -30,7 +30,7 @@ public class StompSslConsumerTest extends StompConsumerTest {
         return new RouteBuilder() {
             public void configure() {
                 
fromF("stomp:test?brokerURL=ssl://localhost:%d&sslContextParameters=#sslContextParameters",
-                        service.getPort())
+                        sslServicePort)
                                 .transform(body().convertToString())
                                 .to("mock:result");
             }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
index 5ca01939bf6..801ad99e846 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompSslProducerTest.java
@@ -31,7 +31,7 @@ public class StompSslProducerTest extends StompProducerTest {
             public void configure() {
                 from("direct:foo")
                         
.toF("stomp:test?brokerURL=ssl://localhost:%d&sslContextParameters=#sslContextParameters",
-                                service.getPort());
+                                sslServicePort);
             }
         };
     }
diff --git 
a/components/camel-stomp/src/test/resources/jsse/client-side-cert.cer 
b/components/camel-stomp/src/test/resources/jsse/client-side-cert.cer
new file mode 100644
index 00000000000..8c23f0fe6d1
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/client-side-cert.cer differ
diff --git 
a/components/camel-stomp/src/test/resources/jsse/client-side-keystore.jks 
b/components/camel-stomp/src/test/resources/jsse/client-side-keystore.jks
new file mode 100644
index 00000000000..e3b67783f8b
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/client-side-keystore.jks differ
diff --git 
a/components/camel-stomp/src/test/resources/jsse/client-side-truststore.jks 
b/components/camel-stomp/src/test/resources/jsse/client-side-truststore.jks
new file mode 100644
index 00000000000..33c8349fd4e
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/client-side-truststore.jks 
differ
diff --git a/components/camel-stomp/src/test/resources/jsse/client.keystore 
b/components/camel-stomp/src/test/resources/jsse/client.keystore
deleted file mode 100644
index 6ab1286b159..00000000000
Binary files a/components/camel-stomp/src/test/resources/jsse/client.keystore 
and /dev/null differ
diff --git 
a/components/camel-stomp/src/test/resources/jsse/createCertificate.sh 
b/components/camel-stomp/src/test/resources/jsse/createCertificate.sh
new file mode 100755
index 00000000000..82a3d72c183
--- /dev/null
+++ b/components/camel-stomp/src/test/resources/jsse/createCertificate.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+
+keytool -genkey -keystore server-side-keystore.jks -storepass password 
-keypass password -dname "CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, 
C=AMQ" -keyalg RSA
+keytool -export -keystore server-side-keystore.jks -file server-side-cert.cer 
-storepass password
+keytool -import -keystore client-side-truststore.jks -file 
server-side-cert.cer -storepass password -keypass password -noprompt
+keytool -genkey -keystore client-side-keystore.jks -storepass password 
-keypass password -dname "CN=ActiveMQ Artemis Client, OU=Artemis, O=ActiveMQ, 
L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
+keytool -export -keystore client-side-keystore.jks -file client-side-cert.cer 
-storepass password
+keytool -import -keystore server-side-truststore.jks -file 
client-side-cert.cer -storepass password -keypass password -noprompt
\ No newline at end of file
diff --git 
a/components/camel-stomp/src/test/resources/jsse/server-side-cert.cer 
b/components/camel-stomp/src/test/resources/jsse/server-side-cert.cer
new file mode 100644
index 00000000000..8028ff0d440
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/server-side-cert.cer differ
diff --git 
a/components/camel-stomp/src/test/resources/jsse/server-side-keystore.jks 
b/components/camel-stomp/src/test/resources/jsse/server-side-keystore.jks
new file mode 100644
index 00000000000..7250c6474d7
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/server-side-keystore.jks differ
diff --git 
a/components/camel-stomp/src/test/resources/jsse/server-side-truststore.jks 
b/components/camel-stomp/src/test/resources/jsse/server-side-truststore.jks
new file mode 100644
index 00000000000..90f78cc10ba
Binary files /dev/null and 
b/components/camel-stomp/src/test/resources/jsse/server-side-truststore.jks 
differ
diff --git a/components/camel-stomp/src/test/resources/jsse/server.keystore 
b/components/camel-stomp/src/test/resources/jsse/server.keystore
deleted file mode 100644
index b8af477f19f..00000000000
Binary files a/components/camel-stomp/src/test/resources/jsse/server.keystore 
and /dev/null differ

Reply via email to