This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch 2.13.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/2.13.x by this push:
new 3051e9e923 Platform-http : add integration tests for reverse proxy
feature Fixes #4246
3051e9e923 is described below
commit 3051e9e923ebcf967f8a621aa4a5407d7b1ab54a
Author: Zineb Bendhiba <[email protected]>
AuthorDate: Fri Oct 7 14:03:44 2022 +0200
Platform-http : add integration tests for reverse proxy feature
Fixes #4246
---
.../pages/reference/extensions/platform-http.adoc | 15 +++
.../platform-http/runtime/src/main/doc/usage.adoc | 14 +++
integration-tests/platform-http-proxy-ssl/pom.xml | 136 ++++++++++++++++++++
.../proxy/ssl/it/PlatformHttpProxySslResource.java | 37 ++++++
.../platform/http/proxy/ssl/it/Routes.java | 77 ++++++++++++
.../src/main/resources/application.properties | 19 +++
.../src/main/resources/ssl/keystore.p12 | Bin 0 -> 2716 bytes
.../PlatformHttpSSLTestResource.java | 59 +++++++++
.../ProxySslTest.java | 57 +++++++++
.../ProxyTestIT.java | 23 ++++
.../test/resources/mappings/originServer_GET.json | 18 +++
.../test/resources/mappings/originServer_POST.json | 18 +++
integration-tests/platform-http-proxy/pom.xml | 138 +++++++++++++++++++++
.../http/proxy/it/PlatformHttpProxyResource.java | 37 ++++++
.../component/platform/http/proxy/it/Routes.java | 34 +++++
.../http/proxy/it/PlatformHttpTestResource.java | 47 +++++++
.../platform/http/proxy/it/ProxyTest.java | 60 +++++++++
.../platform/http/proxy/it/ProxyTestIT.java | 23 ++++
.../test/resources/mappings/originServer_GET.json | 18 +++
.../test/resources/mappings/originServer_POST.json | 18 +++
integration-tests/pom.xml | 2 +
tooling/scripts/test-categories.yaml | 2 +
22 files changed, 852 insertions(+)
diff --git a/docs/modules/ROOT/pages/reference/extensions/platform-http.adoc
b/docs/modules/ROOT/pages/reference/extensions/platform-http.adoc
index af1c221437..25be1753e9 100644
--- a/docs/modules/ROOT/pages/reference/extensions/platform-http.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/platform-http.adoc
@@ -136,6 +136,21 @@ from("platform-http:/secure")
Also check the `quarkus.http.body.*` configuration options in
https://quarkus.io/guides/all-config#quarkus-vertx-http_quarkus-vertx-http-eclipse-vert.x-http[Quarkus
documentation], esp. `quarkus.http.body.handle-file-uploads`,
`quarkus.http.body.uploads-directory` and
`quarkus.http.body.delete-uploaded-files-on-end`.
+[id="extensions-platform-http-usage-implementing-a-reverse-proxy"]
+=== Implementing a reverse proxy
+
+Platform HTTP component can act as a reverse proxy, in that case
`Exchange.HTTP_URI`, `Exchange.HTTP_HOST` headers are populated from the
absolute URL received on the request line of the HTTP request.
+
+Here's an example of a HTTP proxy that simply redirects the Exchange to the
origin server.
+
+[source,java]
+------------------------------------------------------------------------------------------
+from("platform-http:proxy")
+ .toD("http://"
+ + "${headers." + Exchange.HTTP_HOST + "}");
+
+-------------------------------------------------------------------------------------
+
[id="extensions-platform-http-additional-camel-quarkus-configuration"]
== Additional Camel Quarkus configuration
diff --git a/extensions/platform-http/runtime/src/main/doc/usage.adoc
b/extensions/platform-http/runtime/src/main/doc/usage.adoc
index 7fd9d9ee0f..f324692afb 100644
--- a/extensions/platform-http/runtime/src/main/doc/usage.adoc
+++ b/extensions/platform-http/runtime/src/main/doc/usage.adoc
@@ -79,3 +79,17 @@ from("platform-http:/secure")
Also check the `quarkus.http.body.*` configuration options in
https://quarkus.io/guides/all-config#quarkus-vertx-http_quarkus-vertx-http-eclipse-vert.x-http[Quarkus
documentation], esp. `quarkus.http.body.handle-file-uploads`,
`quarkus.http.body.uploads-directory` and
`quarkus.http.body.delete-uploaded-files-on-end`.
+
+=== Implementing a reverse proxy
+
+Platform HTTP component can act as a reverse proxy, in that case
`Exchange.HTTP_URI`, `Exchange.HTTP_HOST` headers are populated from the
absolute URL received on the request line of the HTTP request.
+
+Here's an example of a HTTP proxy that simply redirects the Exchange to the
origin server.
+
+[source,java]
+------------------------------------------------------------------------------------------
+from("platform-http:proxy")
+ .toD("http://"
+ + "${headers." + Exchange.HTTP_HOST + "}");
+
+-------------------------------------------------------------------------------------
diff --git a/integration-tests/platform-http-proxy-ssl/pom.xml
b/integration-tests/platform-http-proxy-ssl/pom.xml
new file mode 100644
index 0000000000..b6dfa31ffb
--- /dev/null
+++ b/integration-tests/platform-http-proxy-ssl/pom.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-build-parent-it</artifactId>
+ <version>2.13.2-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ </parent>
+
+
<artifactId>camel-quarkus-integration-test-platform-http-proxy-ssl</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Platform HTTP Proxy SSL</name>
+ <description>Integration tests for Camel Quarkus platform-http extension -
Proxy - SSL</description>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <!-- dependencies needed to mock origin server -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ </dependency>
+ </dependencies>
+
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>virtualDependencies</id>
+ <activation>
+ <property>
+ <name>!noVirtualDependencies</name>
+ </property>
+ </activation>
+ <dependencies>
+ <!-- The following dependencies guarantee that this module is
built after them. You can update them by running `mvn process-resources
-Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+
<artifactId>camel-quarkus-platform-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+
+</project>
diff --git
a/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/PlatformHttpProxySslResource.java
b/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/PlatformHttpProxySslResource.java
new file mode 100644
index 0000000000..cc3b55c0df
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/PlatformHttpProxySslResource.java
@@ -0,0 +1,37 @@
+/*
+ * 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.component.platform.http.proxy.ssl.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+@Path("/platform-http-proxy-ssl")
+public class PlatformHttpProxySslResource {
+
+ @ConfigProperty(name = "platform.origin.url")
+ String url;
+
+ @GET
+ public String getUrl() {
+ return url;
+ }
+
+}
diff --git
a/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/Routes.java
b/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/Routes.java
new file mode 100644
index 0000000000..246cbe0930
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/ssl/it/Routes.java
@@ -0,0 +1,77 @@
+/*
+ * 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.component.platform.http.proxy.ssl.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.camel.Exchange;
+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;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+public class Routes extends RouteBuilder {
+
+ @ConfigProperty(name = "platform.origin.url", defaultValue = "TODO")
+ String url;
+
+ @Named
+ @Produces
+ @Singleton
+ public SSLContextParameters sslContextParameters() {
+ SSLContextParameters sslContextParameters = new SSLContextParameters();
+
+ KeyManagersParameters keyManagersParameters = new
KeyManagersParameters();
+ KeyStoreParameters keyStore = new KeyStoreParameters();
+ keyStore.setPassword("changeit");
+ keyStore.setResource("ssl/keystore.p12");
+ keyManagersParameters.setKeyPassword("changeit");
+ keyManagersParameters.setKeyStore(keyStore);
+ sslContextParameters.setKeyManagers(keyManagersParameters);
+
+ KeyStoreParameters truststoreParameters = new KeyStoreParameters();
+ truststoreParameters.setResource("ssl/keystore.p12");
+ truststoreParameters.setPassword("changeit");
+
+ TrustManagersParameters trustManagersParameters = new
TrustManagersParameters();
+ trustManagersParameters.setKeyStore(truststoreParameters);
+ sslContextParameters.setTrustManagers(trustManagersParameters);
+
+ return sslContextParameters;
+ }
+
+ @Named
+ public NoopHostnameVerifier x509HostnameVerifier() {
+ return NoopHostnameVerifier.INSTANCE;
+ }
+
+ @Override
+ public void configure() throws Exception {
+ from("platform-http:proxy")
+ .log("header is :: ${headers.CamelHttpHost}")
+ .log("Im here with body :: ${body}")
+ .toD("https://${headers." + Exchange.HTTP_HOST
+ +
"}?bridgeEndpoint=true&sslContextParameters=#sslContextParameters&x509HostnameVerifier=#x509HostnameVerifier");
+ }
+}
diff --git
a/integration-tests/platform-http-proxy-ssl/src/main/resources/application.properties
b/integration-tests/platform-http-proxy-ssl/src/main/resources/application.properties
new file mode 100644
index 0000000000..bdb7e92643
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/main/resources/application.properties
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+
+quarkus.native.resources.includes=ssl/keystore.p12
\ No newline at end of file
diff --git
a/integration-tests/platform-http-proxy-ssl/src/main/resources/ssl/keystore.p12
b/integration-tests/platform-http-proxy-ssl/src/main/resources/ssl/keystore.p12
new file mode 100644
index 0000000000..fadac3cb35
Binary files /dev/null and
b/integration-tests/platform-http-proxy-ssl/src/main/resources/ssl/keystore.p12
differ
diff --git
a/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/PlatformHttpSSLTestResource.java
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/PlatformHttpSSLTestResource.java
new file mode 100644
index 0000000000..27b0fa00b5
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/PlatformHttpSSLTestResource.java
@@ -0,0 +1,59 @@
+/*
+ * 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.component.platform.http.proxy.ssl.it;
+
+import java.util.Map;
+
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import
org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
+
+public class PlatformHttpSSLTestResource extends
WireMockTestResourceLifecycleManager {
+ private static final String PLATFORM_ORIGIN_HOST = "PLATFORM_ORIGIN_HOST";
+ private static final String PLATFORM_ORIGIN_PORT = "PLATFORM_ORIGIN_PORT";
+
+ @Override
+ protected String getRecordTargetBaseUrl() {
+ return "/";
+ }
+
+ @Override
+ protected boolean isMockingEnabled() {
+ return !envVarsPresent(PLATFORM_ORIGIN_HOST, PLATFORM_ORIGIN_PORT);
+ }
+
+ @Override
+ public Map<String, String> start() {
+ Map<String, String> options = super.start();
+ if (options.containsKey("wiremock.url.ssl")) {
+ String wiremockUrl = options.get("wiremock.url.ssl");
+ options.put("platform.origin.url", wiremockUrl);
+ }
+ return options;
+ }
+
+ @Override
+ protected void customizeWiremockConfiguration(WireMockConfiguration
config) {
+ // add an SSL port
+ config.dynamicHttpsPort();
+ // Either a path to a file or a resource on the classpath
+ config.keystorePath("ssl/keystore.p12");
+ // The password used to access the keystore. Defaults to "password" if
omitted
+ config.keystorePassword("changeit");
+ // The password used to access individual keys in the keystore.
Defaults to "password" if omitted
+ config.keyManagerPassword("changeit");
+ }
+}
diff --git
a/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxySslTest.java
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxySslTest.java
new file mode 100644
index 0000000000..8df99de9cf
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxySslTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.component.platform.http.proxy.ssl.it;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.equalTo;
+
+@QuarkusTest
+@QuarkusTestResource(PlatformHttpSSLTestResource.class)
+public class ProxySslTest {
+ @Test
+ void test() {
+ final var proxyUrl = "http://localhost:" + RestAssured.port;
+ String url = given()
+ .get("/platform-http-proxy-ssl")
+ .body().asString();
+
+ // forcing RestAssured to send a GET instead of CONNECT with proxy
settings
+ url = url.replace("https", "http");
+ given()
+ .proxy(proxyUrl)
+ .contentType(ContentType.JSON)
+ .when().get(url)
+ .then()
+ .statusCode(200)
+ .body(equalTo("{\"message\": \"Hello World!\"}"));
+
+ given()
+ .body("hello")
+ .proxy(proxyUrl)
+ .contentType(ContentType.JSON)
+ .when().post(url)
+ .then()
+ .statusCode(200)
+ .body(equalTo("{\"message\": \"Hello World!\"}"));
+ }
+}
diff --git
a/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxyTestIT.java
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxyTestIT.java
new file mode 100644
index 0000000000..c5cb0e0ba9
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/test/java/org.apache.camel.quarkus.component.platform.http.proxy.ssl.it/ProxyTestIT.java
@@ -0,0 +1,23 @@
+/*
+ * 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.component.platform.http.proxy.ssl.it;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class ProxyTestIT extends ProxySslTest {
+}
diff --git
a/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_GET.json
b/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_GET.json
new file mode 100644
index 0000000000..4552e75883
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_GET.json
@@ -0,0 +1,18 @@
+{
+ "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "name": "platform-http-proxy_api",
+ "request": {
+ "url": "/",
+ "method": "GET"
+ },
+ "response": {
+ "status": 200,
+ "body": "{\"message\": \"Hello World!\"}",
+ "headers": {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ },
+ "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "persistent": true,
+ "insertionIndex": 2
+}
\ No newline at end of file
diff --git
a/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_POST.json
b/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_POST.json
new file mode 100644
index 0000000000..dcfce92e74
--- /dev/null
+++
b/integration-tests/platform-http-proxy-ssl/src/test/resources/mappings/originServer_POST.json
@@ -0,0 +1,18 @@
+{
+ "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "name": "platform-http-proxy_api",
+ "request": {
+ "url": "/",
+ "method": "POST"
+ },
+ "response": {
+ "status": 200,
+ "body": "{\"message\": \"Hello World!\"}",
+ "headers": {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ },
+ "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "persistent": true,
+ "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/platform-http-proxy/pom.xml
b/integration-tests/platform-http-proxy/pom.xml
new file mode 100644
index 0000000000..dd41f406fb
--- /dev/null
+++ b/integration-tests/platform-http-proxy/pom.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-build-parent-it</artifactId>
+ <version>2.13.2-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>camel-quarkus-integration-test-platform-http-proxy</artifactId>
+ <name>Camel Quarkus :: Integration Tests :: Platform HTTP Proxy</name>
+ <description>Integration tests for Camel Quarkus platform-http extension -
Proxy</description>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <!-- dependencies needed to mock origin server -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-integration-wiremock-support</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>virtualDependencies</id>
+ <activation>
+ <property>
+ <name>!noVirtualDependencies</name>
+ </property>
+ </activation>
+ <dependencies>
+ <!-- The following dependencies guarantee that this module is
built after them. You can update them by running `mvn process-resources
-Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+
<artifactId>camel-quarkus-platform-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+ </profile>
+ </profiles>
+
+</project>
diff --git
a/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpProxyResource.java
b/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpProxyResource.java
new file mode 100644
index 0000000000..5ef30fc0ad
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpProxyResource.java
@@ -0,0 +1,37 @@
+/*
+ * 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.component.platform.http.proxy.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+@Path("/platform-http-proxy")
+public class PlatformHttpProxyResource {
+
+ @ConfigProperty(name = "platform.origin.url")
+ String url;
+
+ @GET
+ public String getUrl() {
+ return url;
+ }
+
+}
diff --git
a/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/Routes.java
b/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/Routes.java
new file mode 100644
index 0000000000..310f1948ad
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/main/java/org/apache/camel/quarkus/component/platform/http/proxy/it/Routes.java
@@ -0,0 +1,34 @@
+/*
+ * 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.component.platform.http.proxy.it;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+
+@ApplicationScoped
+public class Routes extends RouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+
+ from("platform-http:proxy")
+ .log("header is :: ${headers.CamelHttpHost}")
+ .toD("http://${headers." + Exchange.HTTP_HOST +
"}?bridgeEndpoint=true");
+ }
+}
diff --git
a/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpTestResource.java
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpTestResource.java
new file mode 100644
index 0000000000..5fe00b73f4
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/PlatformHttpTestResource.java
@@ -0,0 +1,47 @@
+/*
+ * 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.component.platform.http.proxy.it;
+
+import java.util.Map;
+
+import
org.apache.camel.quarkus.test.wiremock.WireMockTestResourceLifecycleManager;
+
+public class PlatformHttpTestResource extends
WireMockTestResourceLifecycleManager {
+
+ private static final String PLATFORM_ORIGIN_HOST = "PLATFORM_ORIGIN_HOST";
+ private static final String PLATFORM_ORIGIN_PORT = "PLATFORM_ORIGIN_PORT";
+
+ @Override
+ protected String getRecordTargetBaseUrl() {
+ return "/";
+ }
+
+ @Override
+ protected boolean isMockingEnabled() {
+ return !envVarsPresent(PLATFORM_ORIGIN_HOST, PLATFORM_ORIGIN_PORT);
+ }
+
+ @Override
+ public Map<String, String> start() {
+ Map<String, String> options = super.start();
+ if (options.containsKey("wiremock.url")) {
+ String wiremockUrl = options.get("wiremock.url");
+ options.put("platform.origin.url", wiremockUrl);
+ }
+ return options;
+ }
+}
diff --git
a/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTest.java
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTest.java
new file mode 100644
index 0000000000..96f0148fad
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.component.platform.http.proxy.it;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.equalTo;
+
+@QuarkusTest
+@QuarkusTestResource(PlatformHttpTestResource.class)
+public class ProxyTest {
+ @Test
+ void testProxy() {
+
+ final var proxyUrl = "http://localhost:" + RestAssured.port;
+ System.out.println("proxyUrl :: " + proxyUrl);
+
+ String url = given()
+ .get("/platform-http-proxy")
+ .body().asString();
+
+ System.out.println("URL is :: " + url);
+ given()
+ .proxy(proxyUrl)
+ .contentType(ContentType.JSON)
+ .when().get(url)
+ .then()
+ .statusCode(200)
+ .body(equalTo("{\"message\": \"Hello World!\"}"));
+
+ given()
+ .body("hello")
+ .proxy(proxyUrl)
+ .contentType(ContentType.JSON)
+ .when().post(url)
+ .then()
+ .statusCode(200)
+ .body(equalTo("{\"message\": \"Hello World!\"}"));
+ }
+
+}
diff --git
a/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTestIT.java
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTestIT.java
new file mode 100644
index 0000000000..c3a172647c
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/test/java/org/apache/camel/quarkus/component/platform/http/proxy/it/ProxyTestIT.java
@@ -0,0 +1,23 @@
+/*
+ * 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.component.platform.http.proxy.it;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class ProxyTestIT extends ProxyTest {
+}
diff --git
a/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_GET.json
b/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_GET.json
new file mode 100644
index 0000000000..4552e75883
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_GET.json
@@ -0,0 +1,18 @@
+{
+ "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "name": "platform-http-proxy_api",
+ "request": {
+ "url": "/",
+ "method": "GET"
+ },
+ "response": {
+ "status": 200,
+ "body": "{\"message\": \"Hello World!\"}",
+ "headers": {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ },
+ "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "persistent": true,
+ "insertionIndex": 2
+}
\ No newline at end of file
diff --git
a/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_POST.json
b/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_POST.json
new file mode 100644
index 0000000000..dcfce92e74
--- /dev/null
+++
b/integration-tests/platform-http-proxy/src/test/resources/mappings/originServer_POST.json
@@ -0,0 +1,18 @@
+{
+ "id": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "name": "platform-http-proxy_api",
+ "request": {
+ "url": "/",
+ "method": "POST"
+ },
+ "response": {
+ "status": 200,
+ "body": "{\"message\": \"Hello World!\"}",
+ "headers": {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ },
+ "uuid": "09aa79df-8a19-41df-8655-e414d390d6ed",
+ "persistent": true,
+ "insertionIndex": 2
+}
\ No newline at end of file
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index cdda0dcaff..99b39bf01e 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -170,6 +170,8 @@
<module>pg-replication-slot</module>
<module>pgevent</module>
<module>platform-http</module>
+ <module>platform-http-proxy</module>
+ <module>platform-http-proxy-ssl</module>
<module>protobuf</module>
<module>pubnub</module>
<module>quartz</module>
diff --git a/tooling/scripts/test-categories.yaml
b/tooling/scripts/test-categories.yaml
index 5ab72b46ca..26e16bee0f 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -163,6 +163,8 @@ group-10:
- mail
- main-unknown-args-fail
- main-unknown-args-ignore
+ - platform-http-proxy
+ - platform-http-proxy-ssl
group-11:
- compression-grouped
- disruptor