This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 85789bb Add unit test for CAMEL-16699: HttpProducer skip request
headers for query params on bridge endpoint broken for common types (#5664)
85789bb is described below
commit 85789bb55725363b29a663bd040f2e8bee02a6cf
Author: Mathias Teikari <[email protected]>
AuthorDate: Mon Jun 14 17:09:44 2021 +0200
Add unit test for CAMEL-16699: HttpProducer skip request headers for query
params on bridge endpoint broken for common types (#5664)
---
.../http/HttpProducerBridgeEndpointTest.java | 143 +++++++++++++++++++++
.../http/handler/HeaderValidationHandler.java | 23 ++++
2 files changed, 166 insertions(+)
diff --git
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerBridgeEndpointTest.java
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerBridgeEndpointTest.java
new file mode 100644
index 0000000..f1f3ed7
--- /dev/null
+++
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerBridgeEndpointTest.java
@@ -0,0 +1,143 @@
+/*
+ * 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.component.http;
+
+import java.time.Instant;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.http.handler.HeaderValidationHandler;
+import org.apache.http.impl.bootstrap.HttpServer;
+import org.apache.http.impl.bootstrap.ServerBootstrap;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class HttpProducerBridgeEndpointTest extends BaseHttpTest {
+
+ private static final Instant INSTANT =
Instant.parse("2021-06-10T14:42:00Z");
+ private static final String STRING = "text";
+ private static final Integer INTEGER = Integer.valueOf(1);
+ private static final Long LONG = Long.valueOf(999999999999999L);
+ private static final Boolean BOOLEAN = true;
+ private static final String QUERY
+ = "qp1=" + INSTANT + "&qp2=" + STRING + "&qp3=" + INTEGER +
"&qp4=" + LONG + "&qp5=" + BOOLEAN;
+
+ private HttpServer localServer;
+
+ @BeforeEach
+ @Override
+ public void setUp() throws Exception {
+ String[] absentHeaders = new String[] { "qp1", "qp2", "qp3", "qp4",
"qp5" };
+ Map<String, String> noBridgeExpectedHeaders = new HashMap<>();
+ noBridgeExpectedHeaders.put("qp1", INSTANT.toString());
+ noBridgeExpectedHeaders.put("qp2", STRING);
+ noBridgeExpectedHeaders.put("qp3", INTEGER.toString());
+ noBridgeExpectedHeaders.put("qp4", LONG.toString());
+ noBridgeExpectedHeaders.put("qp5", BOOLEAN.toString());
+
+ localServer =
ServerBootstrap.bootstrap().setHttpProcessor(getBasicHttpProcessor())
+
.setConnectionReuseStrategy(getConnectionReuseStrategy()).setResponseFactory(getHttpResponseFactory())
+
.setExpectationVerifier(getHttpExpectationVerifier()).setSslContext(getSSLContext())
+ .registerHandler("/bridged",
+ new HeaderValidationHandler(
+ "GET",
+ QUERY,
+ null,
+ getExpectedContent(),
+ null,
+ Arrays.asList(absentHeaders)))
+ .registerHandler("/notbridged",
+ new HeaderValidationHandler(
+ "GET",
+ QUERY,
+ null,
+ getExpectedContent(),
+ noBridgeExpectedHeaders))
+ .create();
+
+ localServer.start();
+
+ super.setUp();
+ }
+
+ @AfterEach
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+
+ if (localServer != null) {
+ localServer.stop();
+ }
+ }
+
+ @Test
+ public void testHttpProducerBridgeEndpointSkipRequestHeaders() throws
Exception {
+
+ HttpComponent component = context.getComponent("http",
HttpComponent.class);
+ component.setConnectionTimeToLive(1000L);
+
+ HttpEndpoint endpoint = (HttpEndpoint) component
+ .createEndpoint("http://" +
localServer.getInetAddress().getHostName() + ":"
+ + localServer.getLocalPort() +
"/bridged?bridgeEndpoint=true");
+ HttpProducer producer = new HttpProducer(endpoint);
+
+ Exchange exchange = producer.createExchange();
+ exchange.getIn().setBody(null);
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, QUERY);
+ exchange.getIn().setHeader("qp1", INSTANT);
+ exchange.getIn().setHeader("qp2", STRING);
+ exchange.getIn().setHeader("qp3", INTEGER);
+ exchange.getIn().setHeader("qp4", LONG);
+ exchange.getIn().setHeader("qp5", BOOLEAN);
+
+ producer.start();
+ producer.process(exchange);
+ producer.stop();
+
+ assertExchange(exchange);
+ }
+
+ @Test
+ public void testHttpProducerNoBridgeEndpointRequestHeaders() throws
Exception {
+
+ HttpComponent component = context.getComponent("http",
HttpComponent.class);
+ component.setConnectionTimeToLive(1000L);
+
+ HttpEndpoint endpoint = (HttpEndpoint) component
+ .createEndpoint("http://" +
localServer.getInetAddress().getHostName() + ":"
+ + localServer.getLocalPort() + "/notbridged");
+ HttpProducer producer = new HttpProducer(endpoint);
+
+ Exchange exchange = producer.createExchange();
+ exchange.getIn().setBody(null);
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, QUERY);
+ exchange.getIn().setHeader("qp1", INSTANT);
+ exchange.getIn().setHeader("qp2", STRING);
+ exchange.getIn().setHeader("qp3", INTEGER);
+ exchange.getIn().setHeader("qp4", LONG);
+ exchange.getIn().setHeader("qp5", BOOLEAN);
+
+ producer.start();
+ producer.process(exchange);
+ producer.stop();
+
+ assertExchange(exchange);
+ }
+}
diff --git
a/components/camel-http/src/test/java/org/apache/camel/component/http/handler/HeaderValidationHandler.java
b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/HeaderValidationHandler.java
index d9c8be7..240e56b 100644
---
a/components/camel-http/src/test/java/org/apache/camel/component/http/handler/HeaderValidationHandler.java
+++
b/components/camel-http/src/test/java/org/apache/camel/component/http/handler/HeaderValidationHandler.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.http.handler;
import java.io.IOException;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -29,7 +30,12 @@ import org.apache.http.protocol.HttpContext;
public class HeaderValidationHandler extends BasicValidationHandler {
+ // Map of headers and values that are expected to be present
+ // in HttpRequest.
protected Map<String, String> expectedHeaders;
+ // List of headers that are expected to be absent from HttpRequest
+ // (e.g. for testing filtering).
+ protected List<String> absentHeaders;
public HeaderValidationHandler(String expectedMethod, String expectedQuery,
Object expectedContent, String
responseContent,
@@ -38,6 +44,14 @@ public class HeaderValidationHandler extends
BasicValidationHandler {
this.expectedHeaders = expectedHeaders;
}
+ public HeaderValidationHandler(String expectedMethod, String expectedQuery,
+ Object expectedContent, String
responseContent,
+ Map<String, String> expectedHeaders,
+ List<String> absentHeaders) {
+ this(expectedMethod, expectedQuery, expectedContent, responseContent,
expectedHeaders);
+ this.absentHeaders = absentHeaders;
+ }
+
@Override
public void handle(
final HttpRequest request, final HttpResponse response,
@@ -63,6 +77,15 @@ public class HeaderValidationHandler extends
BasicValidationHandler {
}
}
+ if (absentHeaders != null) {
+ for (String header : absentHeaders) {
+ if (request.getHeaders(header).length > 0) {
+ response.setStatusCode(HttpStatus.SC_EXPECTATION_FAILED);
+ return;
+ }
+ }
+ }
+
super.handle(request, response, context);
}