You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/02/17 11:24:02 UTC

[camel-quarkus] 07/34: Fix #696 Test HTTPS with the HTTP clients

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

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

commit e8e5dc4732d1a7057df5b4585942550bb72f8454
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Tue Feb 11 07:52:52 2020 +0100

    Fix #696 Test HTTPS with the HTTP clients
---
 .../quarkus/component/http/it/HttpResource.java    | 30 +++++++++++
 .../camel/quarkus/component/http/it/HttpTest.java  | 29 +++++++++++
 .../camel/quarkus/test/TrustStoreResource.java     | 58 ++++++++++++++++++++++
 3 files changed, 117 insertions(+)

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 871fc1a..732a8e1 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
@@ -55,6 +55,16 @@ public class HttpResource {
                 .request(String.class);
     }
 
+    @Path("/ahc/get-https")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getHttps() {
+        return producerTemplate
+                .to("ahc:https://restcountries.eu/rest/v2/alpha/cz?bridgeEndpoint=true")
+                .withHeader(Exchange.HTTP_METHOD, "GET")
+                .request(String.class);
+    }
+
     @Path("/ahc/post")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
@@ -102,6 +112,16 @@ public class HttpResource {
                 .request(String.class);
     }
 
+    @Path("/http/get-https")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String httpGetHttps() {
+        return producerTemplate
+                .to("https://restcountries.eu/rest/v2/alpha/cz?bridgeEndpoint=true")
+                .withHeader(Exchange.HTTP_METHOD, "GET")
+                .request(String.class);
+    }
+
     @Path("/http/post")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
@@ -131,6 +151,16 @@ public class HttpResource {
                 .request(String.class);
     }
 
+    @Path("/netty-http/get-https")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String nettyHttpGetHttps() {
+        return producerTemplate
+                .to("netty-http:https://restcountries.eu/rest/v2/alpha/cz")
+                .withHeader(Exchange.HTTP_METHOD, "GET")
+                .request(String.class);
+    }
+
     @Path("/netty-http/post")
     @POST
     @Consumes(MediaType.TEXT_PLAIN)
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 8423014..ab048c3 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
@@ -19,14 +19,17 @@ package org.apache.camel.quarkus.component.http.it;
 import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
+import org.apache.camel.quarkus.test.TrustStoreResource;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
+import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.is;
 
 @QuarkusTest
 @QuarkusTestResource(HttpTestResource.class)
+@QuarkusTestResource(TrustStoreResource.class)
 class HttpTest {
     @ParameterizedTest
     @ValueSource(strings = { "ahc", "http", "netty-http" })
@@ -49,6 +52,32 @@ class HttpTest {
                 .body(is("MESSAGE"));
     }
 
+    @ParameterizedTest
+    @ValueSource(strings = { "ahc",
+            "http" /*, "netty-http" disabled because of https://github.com/apache/camel-quarkus/issues/695 */ })
+    public void httpsProducer(String component) {
+        RestAssured
+                .given()
+                .when()
+                .get("/test/client/{component}/get-https", component)
+                .then()
+                .body(containsString("Czech Republic"));
+    }
+
+    @Test
+    public void restcountries() throws Exception {
+        RestAssured
+                .given()
+                .baseUri("https://restcountries.eu")
+                .port(443)
+                .when()
+                .accept("application/json")
+                .get("/rest/v2/alpha/cz")
+                .then()
+                .statusCode(200)
+                .body(containsString("Czech Republic"));
+    }
+
     @Test
     public void basicNettyHttpServer() throws Exception {
         final int port = Integer.getInteger("camel.netty-http.test-port");
diff --git a/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java b/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java
new file mode 100644
index 0000000..32c48c2
--- /dev/null
+++ b/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java
@@ -0,0 +1,58 @@
+/*
+ * 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.quarkus.test;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.Map;
+
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+
+/**
+ * Native images built using a docker container end up with {@code javax.net.ssl.trustStore} system property
+ * pointing to a non-existing file; see https://quarkus.io/guides/native-and-ssl For that case, we have to set
+ * {@code javax.net.ssl.trustStore} to an existing path explicitly.
+ */
+public class TrustStoreResource implements QuarkusTestResourceLifecycleManager {
+
+    @Override
+    public Map<String, String> start() {
+        final String graalVmHome = System.getenv("GRAALVM_HOME");
+        final String javaHome = System.getenv("JAVA_HOME");
+        Path trustStorePath = null;
+        final String CACERTS_REL_PATH = "jre/lib/security/cacerts";
+        if (graalVmHome != null && !graalVmHome.isEmpty()
+                && Files.exists(trustStorePath = Paths.get(graalVmHome).resolve(CACERTS_REL_PATH))) {
+        } else if (javaHome != null && !javaHome.isEmpty()
+                && Files.exists(trustStorePath = Paths.get(javaHome).resolve(CACERTS_REL_PATH))) {
+        } else {
+            throw new IllegalStateException(
+                    "Could not find any existing file to set javax.net.ssl.trustStore; tried $GRAALVM_HOME/" + CACERTS_REL_PATH
+                            + " and $JAVA_HOME/" + CACERTS_REL_PATH
+                            + ". You may need to set GRAALVM_HOME or JAVA_HOME properly. Found $GRAALVM_HOME = " + graalVmHome
+                            + " and $JAVA_HOME = " + graalVmHome);
+        }
+        return Collections.singletonMap("javax.net.ssl.trustStore", trustStorePath.toString());
+    }
+
+    @Override
+    public void stop() {
+    }
+
+}