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);
 

Reply via email to