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>