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