You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/10/18 07:51:56 UTC
[camel-k-runtime] branch master updated: HTTP multi-headers are
randomized in camel-knative-http #69
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
The following commit(s) were added to refs/heads/master by this push:
new c17f8ab HTTP multi-headers are randomized in camel-knative-http #69
c17f8ab is described below
commit c17f8abb43b6eef44d3a15843f8e479d2ffb75c1
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Thu Oct 17 18:21:17 2019 +0200
HTTP multi-headers are randomized in camel-knative-http #69
---
.../component/knative/http/KnativeHttpSupport.java | 14 ++++--
.../component/knative/http/KnativeHttpTest.java | 58 +++++++++++++++++++++-
.../knative/http/KnativeHttpTestSupport.java | 10 +++-
.../component/knative/ce/CloudEventProcessors.java | 1 +
.../src/test/resources/log4j2-test.xml | 2 +-
5 files changed, 77 insertions(+), 8 deletions(-)
diff --git a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
index daeeeff..112ad58 100644
--- a/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
+++ b/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
@@ -70,13 +70,21 @@ public final class KnativeHttpSupport {
}
for (Map.Entry<String, String> entry : filters.entrySet()) {
- String ref = entry.getValue();
- String val = v.getHeader(entry.getKey());
+ final List<String> values = v.headers().getAll(entry.getKey());
+ final String ref = entry.getValue();
- if (val == null) {
+ if (values.isEmpty()) {
return false;
}
+ String val = values.get(values.size() - 1);
+ int idx = val.lastIndexOf(',');
+
+ if (values.size() == 1 && idx != -1) {
+ val = val.substring(idx + 1);
+ val = val.trim();
+ }
+
boolean matches = Objects.equals(ref, val) || val.matches(ref);
if (!matches) {
return false;
diff --git a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
index c89e6a3..6e0eb8d 100644
--- a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
+++ b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
@@ -18,7 +18,11 @@ package org.apache.camel.component.knative.http;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
+import java.util.Random;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -32,6 +36,7 @@ import org.apache.camel.component.knative.KnativeComponent;
import org.apache.camel.component.knative.spi.CloudEvent;
import org.apache.camel.component.knative.spi.CloudEvents;
import org.apache.camel.component.knative.spi.Knative;
+import org.apache.camel.component.knative.spi.KnativeEnvironment;
import org.apache.camel.component.knative.spi.KnativeSupport;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.http.common.HttpOperationFailedException;
@@ -1067,8 +1072,6 @@ public class KnativeHttpTest {
assertThat(exchange.getException()).hasMessage("body must not be null");
}
-
-
@ParameterizedTest
@MethodSource("provideCloudEventsImplementations")
void testNoContent(CloudEvent ce) throws Exception {
@@ -1137,5 +1140,56 @@ public class KnativeHttpTest {
server.stop();
}
}
+
+ @ParameterizedTest
+ @MethodSource("provideCloudEventsImplementations")
+ void testOrdering(CloudEvent ce) throws Exception {
+ List<KnativeEnvironment.KnativeServiceDefinition> hops = new Random()
+ .ints(0, 100)
+ .distinct()
+ .limit(10)
+ .mapToObj(i -> endpoint(
+ Knative.EndpointKind.source,
+ "channel-" + i,
+ "localhost",
+ port,
+ KnativeSupport.mapOf(Knative.KNATIVE_FILTER_PREFIX + "MyHeader", "channel-" + i)))
+ .collect(Collectors.toList());
+
+ configureKnativeComponent(context, ce, hops);
+
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .routeId("undertow")
+ .toF("undertow:http://localhost:%d", port)
+ .convertBodyTo(String.class);
+
+ for (KnativeEnvironment.KnativeServiceDefinition definition: hops) {
+ fromF("knative:endpoint/%s", definition.getName())
+ .routeId(definition.getName())
+ .setBody().constant(definition.getName());
+ }
+ }
+ });
+
+ context.start();
+
+ List<String> hopsDone = new ArrayList<>();
+ for (KnativeEnvironment.KnativeServiceDefinition definition: hops) {
+ hopsDone.add(definition.getName());
+
+ Exchange result = template.request(
+ "direct:start",
+ e -> {
+ e.getMessage().setHeader("MyHeader", hopsDone);
+ e.getMessage().setBody(definition.getName());
+ }
+ );
+
+ assertThat(result.getMessage().getBody()).isEqualTo(definition.getName());
+ }
+ }
}
diff --git a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
index 273d5fb..8bf3702 100644
--- a/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
+++ b/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.component.knative.http;
+import java.util.Arrays;
+import java.util.List;
+
import org.apache.camel.CamelContext;
import org.apache.camel.component.knative.KnativeComponent;
import org.apache.camel.component.knative.spi.CloudEvent;
@@ -26,10 +29,13 @@ public final class KnativeHttpTestSupport {
}
public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, KnativeEnvironment.KnativeServiceDefinition... definitions) {
- KnativeEnvironment env = KnativeEnvironment.on(definitions);
+ return configureKnativeComponent(context, ce, Arrays.asList(definitions));
+ }
+
+ public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, List<KnativeEnvironment.KnativeServiceDefinition> definitions) {
KnativeComponent component = context.getComponent("knative", KnativeComponent.class);
component.setCloudEventsSpecVersion(ce.version());
- component.setEnvironment(env);
+ component.setEnvironment(new KnativeEnvironment(definitions));
return component;
}
diff --git a/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java b/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
index cf08243..a91a64d 100644
--- a/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
+++ b/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
@@ -32,6 +32,7 @@ import static org.apache.camel.util.ObjectHelper.ifNotEmpty;
public enum CloudEventProcessors implements CloudEventProcessor {
V01(new AbstractCloudEventProcessor(CloudEvents.V01) {
+ @SuppressWarnings("unchecked")
@Override
protected void decodeStructuredContent(Exchange exchange, Map<String, Object> content) {
final CloudEvent ce = cloudEvent();
diff --git a/camel-knative/camel-knative/src/test/resources/log4j2-test.xml b/camel-knative/camel-knative/src/test/resources/log4j2-test.xml
index 486a0f0..82b517b 100644
--- a/camel-knative/camel-knative/src/test/resources/log4j2-test.xml
+++ b/camel-knative/camel-knative/src/test/resources/log4j2-test.xml
@@ -30,7 +30,7 @@
<!--
<AppenderRef ref="STDOUT"/>
-->
- <AppenderRef ref="STDOUT"/>
+ <AppenderRef ref="NONE"/>
</Root>
</Loggers>