This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new a529aca Fix vertx-http SSL integration test a529aca is described below commit a529aca78106c84f1db5deb6eda3d9e0f197e844 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Tue Jun 1 16:25:50 2021 +0100 Fix vertx-http SSL integration test Fixes #2656 --- .../quarkus/component/http/it/HttpResource.java | 2 +- .../camel/quarkus/component/http/it/HttpRoute.java | 55 ++++++++++++++++++++++ .../camel/quarkus/component/http/it/HttpTest.java | 4 +- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpResource.java b/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpResource.java index e428ac5..3c50baf 100644 --- a/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpResource.java +++ b/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpResource.java @@ -216,7 +216,7 @@ public class HttpResource { @Produces(MediaType.TEXT_PLAIN) public String vertxHttpHttps(@QueryParam("test-port") int port) { return producerTemplate - .toF("vertx-http:https://localhost:%d/countries/cz?sslContextParameters=#sslContextParameters", port) + .toF("vertx-http:https://localhost:%d/countries/cz?webClientOptions=#clientOptions", port) .withHeader(Exchange.HTTP_METHOD, "GET") .request(String.class); } diff --git a/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpRoute.java b/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpRoute.java index 930f860..740c76a 100644 --- a/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpRoute.java +++ b/integration-tests/http/src/main/java/org/apache/camel/quarkus/component/http/it/HttpRoute.java @@ -16,10 +16,17 @@ */ package org.apache.camel.quarkus.component.http.it; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import javax.inject.Named; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; +import io.vertx.core.buffer.Buffer; +import io.vertx.core.net.KeyStoreOptions; +import io.vertx.ext.web.client.WebClientOptions; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; @@ -68,4 +75,52 @@ public class HttpRoute extends RouteBuilder { return sslContextParameters; } + + // TODO: Remove this when vertx-http SSL configuration is fixed: + // https://github.com/apache/camel-quarkus/issues/2704 + @Named + public WebClientOptions clientOptions(SSLContextParameters sslContextParameters) throws IOException { + KeyManagersParameters keyManagers = sslContextParameters.getKeyManagers(); + byte[] keyStoreBytes = readStore(keyManagers.getKeyStore().getResource()); + KeyStoreOptions keyStoreOptions = new KeyStoreOptions(); + keyStoreOptions.setPassword(keyManagers.getKeyPassword()); + keyStoreOptions.setProvider(KeyManagerFactory.getDefaultAlgorithm()); + keyStoreOptions.setType("PKCS12"); + keyStoreOptions.setValue(Buffer.buffer(keyStoreBytes)); + + TrustManagersParameters trustManagers = sslContextParameters.getTrustManagers(); + byte[] trustStoreBytes = readStore(trustManagers.getKeyStore().getResource()); + KeyStoreOptions trustStoreOptions = new KeyStoreOptions(); + trustStoreOptions.setPassword(trustManagers.getKeyStore().getPassword()); + trustStoreOptions.setProvider(TrustManagerFactory.getDefaultAlgorithm()); + trustStoreOptions.setType("JKS"); + trustStoreOptions.setValue(Buffer.buffer(trustStoreBytes)); + + return new WebClientOptions() + .setSsl(true) + .setKeyCertOptions(keyStoreOptions) + .setTrustOptions(trustStoreOptions); + } + + private static byte[] readStore(String path) throws IOException { + byte[] data = null; + final InputStream resource = HttpRoute.class.getResourceAsStream(path); + if (resource != null) { + try (InputStream is = resource) { + data = inputStreamToBytes(is); + } + } + return data; + } + + private static byte[] inputStreamToBytes(InputStream is) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int r; + while ((r = is.read(buf)) > 0) { + out.write(buf, 0, r); + } + return out.toByteArray(); + } + } diff --git a/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTest.java b/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTest.java index 1e4a760..05273c3 100644 --- a/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTest.java +++ b/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTest.java @@ -55,9 +55,7 @@ class HttpTest { } @ParameterizedTest - @ValueSource(strings = { "ahc", "http", "netty-http" - /* , "vertx-http" disabled because of https://github.com/apache/camel-quarkus/issues/2656 */ - }) + @ValueSource(strings = { "ahc", "http", "netty-http", "vertx-http" }) public void httpsProducer(String component) { final int port = ConfigProvider.getConfig().getValue("camel.netty-http.https-test-port", Integer.class);