You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/09/07 12:49:16 UTC

[camel-quarkus] 02/02: Replace restcountries endpoint with local service

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

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

commit 91076b40ed7fa4684c9d00e5e092eb79fec1eb93
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Sep 7 12:13:06 2020 +0100

    Replace restcountries endpoint with local service
    
    Fixes #1538
---
 .../quarkus/component/http/it/HttpResource.java    |  33 +++++----
 .../camel/quarkus/component/http/it/HttpRoute.java |  43 +++++++++++
 .../http/src/main/resources/application.properties |   2 +-
 .../http/src/main/resources/jsse/truststore.jks    | Bin 0 -> 1018 bytes
 .../http/src/main/resources/restcountries/cz.json  |  81 +++++++++++++++++++++
 .../camel/quarkus/component/http/it/HttpTest.java  |  20 +----
 .../component/http/it/HttpTestResource.java        |   3 +-
 pom.xml                                            |   1 +
 8 files changed, 148 insertions(+), 35 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 a35d590..17ec0ce 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
@@ -50,7 +50,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String get(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("ahc:http://localhost:" + port + "/service/get?bridgeEndpoint=true")
+                .toF("ahc:http://localhost:%d/service/get?bridgeEndpoint=true", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -58,9 +58,10 @@ public class HttpResource {
     @Path("/ahc/get-https")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public String getHttps() {
+    public String getHttps(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("ahc:https://restcountries.com/v2/alpha/cz?bridgeEndpoint=true")
+                .toF("ahc:https://localhost:%d/countries/cz?bridgeEndpoint=true&sslContextParameters=#sslContextParameters",
+                        port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -71,7 +72,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String post(@QueryParam("test-port") int port, String message) {
         return producerTemplate
-                .to("ahc://http://localhost:" + port + "/service/toUpper?bridgeEndpoint=true")
+                .toF("ahc://http://localhost:%d/service/toUpper?bridgeEndpoint=true", port)
                 .withBody(message)
                 .withHeader(Exchange.CONTENT_TYPE, MediaType.TEXT_PLAIN)
                 .withHeader(Exchange.HTTP_METHOD, "POST")
@@ -107,7 +108,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String httpGet(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("http://localhost:" + port + "/service/get?bridgeEndpoint=true")
+                .toF("http://localhost:%d/service/get?bridgeEndpoint=true", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -115,9 +116,9 @@ public class HttpResource {
     @Path("/http/get-https")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public String httpGetHttps() {
+    public String httpGetHttps(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("https://restcountries.com/v2/alpha/cz?bridgeEndpoint=true")
+                .toF("https://localhost:%d/countries/cz?bridgeEndpoint=true&sslContextParameters=#sslContextParameters", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -128,7 +129,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String httpPost(@QueryParam("test-port") int port, String message) {
         return producerTemplate
-                .to("http://localhost:" + port + "/service/toUpper?bridgeEndpoint=true")
+                .toF("http://localhost:%d/service/toUpper?bridgeEndpoint=true", port)
                 .withBody(message)
                 .withHeader(Exchange.CONTENT_TYPE, MediaType.TEXT_PLAIN)
                 .withHeader(Exchange.HTTP_METHOD, "POST")
@@ -146,7 +147,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String nettyHttpGet(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("netty-http:http://localhost:" + port + "/service/get?bridgeEndpoint=true")
+                .toF("netty-http:http://localhost:%d/service/get?bridgeEndpoint=true", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -154,9 +155,9 @@ public class HttpResource {
     @Path("/netty-http/get-https")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public String nettyHttpGetHttps() {
+    public String nettyHttpGetHttps(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("netty-http:https://restcountries.com/v2/alpha/cz?ssl=true&passphrase=changeit&keyStoreResource=classpath:jsse/keystore.p12&trustStoreResource=file:{{javax.net.ssl.trustStore}}")
+                .toF("netty-http:https://localhost:%d/countries/cz?sslContextParameters=#sslContextParameters", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -167,7 +168,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String hettyHttpPost(@QueryParam("test-port") int port, String message) {
         return producerTemplate
-                .to("netty-http://http://localhost:" + port + "/service/toUpper?bridgeEndpoint=true")
+                .toF("netty-http:http://localhost:%d/service/toUpper?bridgeEndpoint=true", port)
                 .withBody(message)
                 .withHeader(Exchange.CONTENT_TYPE, MediaType.TEXT_PLAIN)
                 .withHeader(Exchange.HTTP_METHOD, "POST")
@@ -185,7 +186,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String vertxHttpGet(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("vertx-http:http://localhost:" + port + "/service/get")
+                .toF("vertx-http:http://localhost:%d/service/get", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -193,9 +194,9 @@ public class HttpResource {
     @Path("/vertx-http/get-https")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public String vertxHttpHttps() {
+    public String vertxHttpHttps(@QueryParam("test-port") int port) {
         return producerTemplate
-                .to("vertx-http:https://restcountries.com/v2/alpha/cz")
+                .toF("vertx-http:https://localhost:%d/countries/cz?sslContextParameters=#sslContextParameters", port)
                 .withHeader(Exchange.HTTP_METHOD, "GET")
                 .request(String.class);
     }
@@ -206,7 +207,7 @@ public class HttpResource {
     @Produces(MediaType.TEXT_PLAIN)
     public String vertxHttpPost(@QueryParam("test-port") int port, String message) {
         return producerTemplate
-                .to("vertx-http:http://localhost:" + port + "/service/toUpper")
+                .toF("vertx-http:http://localhost:%d/service/toUpper", port)
                 .withBody(message)
                 .withHeader(Exchange.CONTENT_TYPE, MediaType.TEXT_PLAIN)
                 .withHeader(Exchange.HTTP_METHOD, "POST")
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 46f5028..c083687 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,7 +16,17 @@
  */
 package org.apache.camel.quarkus.component.http.it;
 
+import java.io.InputStream;
+
+import javax.inject.Named;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.jsse.KeyManagersParameters;
+import org.apache.camel.support.jsse.KeyStoreParameters;
+import org.apache.camel.support.jsse.SSLContextParameters;
+import org.apache.camel.support.jsse.TrustManagersParameters;
 
 public class HttpRoute extends RouteBuilder {
     @Override
@@ -24,7 +34,40 @@ public class HttpRoute extends RouteBuilder {
         from("netty-http:http://0.0.0.0:{{camel.netty-http.test-port}}/test/server/hello")
                 .transform().constant("Netty Hello World");
 
+        from("netty-http:http://0.0.0.0:{{camel.netty-http.https-test-port}}/countries/cz?ssl=true&sslContextParameters=#sslContextParameters")
+                .process(new Processor() {
+                    @Override
+                    public void process(Exchange exchange) throws Exception {
+                        InputStream stream = HttpRoute.class.getResourceAsStream("/restcountries/cz.json");
+                        String json = exchange.getContext().getTypeConverter().convertTo(String.class, stream);
+                        exchange.getMessage().setBody(json);
+                    }
+                });
+
         from("direct:ahcWsIn")
                 .toD("ahc-ws:localhost:${header.test-port}/ahc-ws/greeting");
     }
+
+    @Named
+    public SSLContextParameters sslContextParameters() {
+        KeyStoreParameters keystoreParameters = new KeyStoreParameters();
+        keystoreParameters.setResource("/jsse/keystore.p12");
+        keystoreParameters.setPassword("changeit");
+
+        KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+        truststoreParameters.setResource("/jsse/truststore.jks");
+        truststoreParameters.setPassword("changeit");
+
+        TrustManagersParameters trustManagersParameters = new TrustManagersParameters();
+        trustManagersParameters.setKeyStore(truststoreParameters);
+        SSLContextParameters sslContextParameters = new SSLContextParameters();
+        sslContextParameters.setTrustManagers(trustManagersParameters);
+
+        KeyManagersParameters keyManagersParameters = new KeyManagersParameters();
+        keyManagersParameters.setKeyPassword("changeit");
+        keyManagersParameters.setKeyStore(keystoreParameters);
+        sslContextParameters.setKeyManagers(keyManagersParameters);
+
+        return sslContextParameters;
+    }
 }
diff --git a/integration-tests/http/src/main/resources/application.properties b/integration-tests/http/src/main/resources/application.properties
index 0892e7c..82a564a 100644
--- a/integration-tests/http/src/main/resources/application.properties
+++ b/integration-tests/http/src/main/resources/application.properties
@@ -18,4 +18,4 @@
 #
 # Quarkus
 #
-quarkus.native.additional-build-args = -H:IncludeResources=jsse/keystore.p12
+quarkus.native.additional-build-args = -H:IncludeResources=jsse/.*,-H:IncludeResources=restcountries/cz.json
diff --git a/integration-tests/http/src/main/resources/jsse/truststore.jks b/integration-tests/http/src/main/resources/jsse/truststore.jks
new file mode 100644
index 0000000..9624503
Binary files /dev/null and b/integration-tests/http/src/main/resources/jsse/truststore.jks differ
diff --git a/integration-tests/http/src/main/resources/restcountries/cz.json b/integration-tests/http/src/main/resources/restcountries/cz.json
new file mode 100644
index 0000000..87701b1
--- /dev/null
+++ b/integration-tests/http/src/main/resources/restcountries/cz.json
@@ -0,0 +1,81 @@
+{
+  "name": "Czech Republic",
+  "topLevelDomain": [
+    ".cz"
+  ],
+  "alpha2Code": "CZ",
+  "alpha3Code": "CZE",
+  "callingCodes": [
+    "420"
+  ],
+  "capital": "Prague",
+  "altSpellings": [
+    "CZ",
+    "Česká republika",
+    "Česko"
+  ],
+  "region": "Europe",
+  "subregion": "Eastern Europe",
+  "population": 10558524,
+  "latlng": [
+    49.75,
+    15.5
+  ],
+  "demonym": "Czech",
+  "area": 78865.0,
+  "gini": 26.0,
+  "timezones": [
+    "UTC+01:00"
+  ],
+  "borders": [
+    "AUT",
+    "DEU",
+    "POL",
+    "SVK"
+  ],
+  "nativeName": "Česká republika",
+  "numericCode": "203",
+  "currencies": [
+    {
+      "code": "CZK",
+      "name": "Czech koruna",
+      "symbol": "Kč"
+    }
+  ],
+  "languages": [
+    {
+      "iso639_1": "cs",
+      "iso639_2": "ces",
+      "name": "Czech",
+      "nativeName": "čeština"
+    },
+    {
+      "iso639_1": "sk",
+      "iso639_2": "slk",
+      "name": "Slovak",
+      "nativeName": "slovenčina"
+    }
+  ],
+  "translations": {
+    "de": "Tschechische Republik",
+    "es": "República Checa",
+    "fr": "République tchèque",
+    "ja": "チェコ",
+    "it": "Repubblica Ceca",
+    "br": "República Tcheca",
+    "pt": "República Checa",
+    "nl": "Tsjechië",
+    "hr": "Češka",
+    "fa": "جمهوری چک"
+  },
+  "flag": "https://restcountries.eu/data/cze.svg",
+  "regionalBlocs": [
+    {
+      "acronym": "EU",
+      "name": "European Union",
+      "otherAcronyms": [],
+      "otherNames": []
+    }
+  ],
+  "cioc": "CZE"
+}
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 c794889..82b9d67 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,7 +19,6 @@ 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;
@@ -29,7 +28,6 @@ import static org.hamcrest.Matchers.is;
 
 @QuarkusTest
 @QuarkusTestResource(HttpTestResource.class)
-@QuarkusTestResource(TrustStoreResource.class)
 class HttpTest {
     @ParameterizedTest
     @ValueSource(strings = { "ahc", "http", "netty-http", "vertx-http" })
@@ -55,25 +53,14 @@ class HttpTest {
     @ParameterizedTest
     @ValueSource(strings = { "ahc", "http", "netty-http", "vertx-http" })
     public void httpsProducer(String component) {
-        RestAssured
-                .given()
-                .when()
-                .get("/test/client/{component}/get-https", component)
-                .then()
-                .body(containsString("Czech Republic"));
-    }
+        final int port = Integer.getInteger("camel.netty-http.https-test-port");
 
-    @Test
-    public void restcountries() throws Exception {
         RestAssured
                 .given()
-                .baseUri("https://restcountries.com")
-                .port(443)
+                .queryParam("test-port", port)
                 .when()
-                .accept("application/json")
-                .get("/v2/alpha/cz")
+                .get("/test/client/{component}/get-https", component)
                 .then()
-                .statusCode(200)
                 .body(containsString("Czech Republic"));
     }
 
@@ -101,5 +88,4 @@ class HttpTest {
                 .then()
                 .body(is("Hello " + body));
     }
-
 }
diff --git a/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTestResource.java b/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTestResource.java
index c1a0daf..c60b157 100644
--- a/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTestResource.java
+++ b/integration-tests/http/src/test/java/org/apache/camel/quarkus/component/http/it/HttpTestResource.java
@@ -25,7 +25,8 @@ import org.apache.camel.quarkus.test.AvailablePortFinder;
 public class HttpTestResource implements QuarkusTestResourceLifecycleManager {
     @Override
     public Map<String, String> start() {
-        return AvailablePortFinder.reserveNetworkPorts(Objects::toString, "camel.netty-http.test-port");
+        return AvailablePortFinder.reserveNetworkPorts(Objects::toString, "camel.netty-http.test-port",
+                "camel.netty-http.https-test-port");
     }
 
     @Override
diff --git a/pom.xml b/pom.xml
index d3c3be5..7996082 100644
--- a/pom.xml
+++ b/pom.xml
@@ -378,6 +378,7 @@
                             <exclude>**/*.ftl</exclude>
                             <exclude>**/*.graphql</exclude>
                             <exclude>**/*.ics</exclude>
+                            <exclude>**/*.jks</exclude>
                             <exclude>**/*.lock</exclude>
                             <exclude>**/*.mp3</exclude>
                             <exclude>**/*.mp4</exclude>