You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/03/26 08:08:29 UTC

[3/4] camel git commit: CAMEL-11028: Avoid duplicating content-type headers for camel-spark-rest

CAMEL-11028: Avoid duplicating content-type headers for camel-spark-rest


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38e2c1f9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38e2c1f9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38e2c1f9

Branch: refs/heads/camel-2.18.x
Commit: 38e2c1f983cb9203dcfa0c002e31a39e8d137363
Parents: 1a59b2c
Author: Charlie McNeill, Karthikeyan Gurunathan and Jonathan Bridger <jo...@sky.uk>
Authored: Thu Mar 23 14:35:35 2017 +0000
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 26 10:07:23 2017 +0200

----------------------------------------------------------------------
 components/camel-spark-rest/pom.xml             |   7 +-
 .../sparkrest/DefaultSparkBinding.java          |  14 +--
 .../sparkrest/SparkHeaderFilterStrategy.java    |   2 +
 .../sparkrest/DefaultSparkBindingTest.java      | 125 +++++++++++++++++++
 4 files changed, 140 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/pom.xml b/components/camel-spark-rest/pom.xml
index 3b8dd56..879bbd8 100644
--- a/components/camel-spark-rest/pom.xml
+++ b/components/camel-spark-rest/pom.xml
@@ -100,7 +100,6 @@
       <artifactId>camel-swagger-java</artifactId>
       <scope>test</scope>
     </dependency>
-
     <!-- for testing rest-dsl -->
     <dependency>
       <groupId>org.apache.camel</groupId>
@@ -112,6 +111,12 @@
       <artifactId>camel-jaxb</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+        <groupId>org.mockito</groupId>
+        <artifactId>mockito-all</artifactId>
+        <version>1.9.5</version>
+        <scope>test</scope>
+    </dependency>
 
     <!-- logging -->
     <dependency>

http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
index e721baa..202fb17 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
@@ -66,13 +66,6 @@ public class DefaultSparkBinding implements SparkBinding {
 
     @Override
     public void populateCamelHeaders(Request request, Map<String, Object> headers, Exchange exchange, SparkConfiguration configuration) throws Exception {
-        // store the method and query and other info in headers as String types
-        headers.put(Exchange.HTTP_METHOD, request.raw().getMethod());
-        headers.put(Exchange.HTTP_QUERY, request.raw().getQueryString());
-        headers.put(Exchange.HTTP_URL, request.raw().getRequestURL().toString());
-        headers.put(Exchange.HTTP_URI, request.raw().getRequestURI());
-        headers.put(Exchange.CONTENT_TYPE, request.raw().getContentType());
-
         String path = request.raw().getPathInfo();
         SparkEndpoint endpoint = (SparkEndpoint) exchange.getFromEndpoint();
         if (endpoint.getPath() != null) {
@@ -127,6 +120,13 @@ public class DefaultSparkBinding implements SparkBinding {
                 && !headerFilterStrategy.applyFilterToExternalHeaders(key, splat, exchange)) {
             SparkHelper.appendHeader(headers, key, splat);
         }
+        
+        // store the method and query and other info in headers as String types
+        headers.putIfAbsent(Exchange.HTTP_METHOD, request.raw().getMethod());
+        headers.putIfAbsent(Exchange.HTTP_QUERY, request.raw().getQueryString());
+        headers.putIfAbsent(Exchange.HTTP_URL, request.raw().getRequestURL().toString());
+        headers.putIfAbsent(Exchange.HTTP_URI, request.raw().getRequestURI());
+        headers.putIfAbsent(Exchange.CONTENT_TYPE, request.raw().getContentType());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
index 8776612..d95c868 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
@@ -28,6 +28,8 @@ public class SparkHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
     }
 
     protected void initialize() {
+        getInFilter().add("content-type");
+        
         getOutFilter().add("content-length");
         getOutFilter().add("content-type");
         getOutFilter().add("host");

http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
new file mode 100644
index 0000000..717e280
--- /dev/null
+++ b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
@@ -0,0 +1,125 @@
+/**
+ * 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.sparkrest;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyMap;
+import static org.apache.camel.Exchange.CONTENT_TYPE;
+import static org.apache.camel.Exchange.HTTP_METHOD;
+import static org.apache.camel.Exchange.HTTP_QUERY;
+import static org.apache.camel.Exchange.HTTP_URI;
+import static org.apache.camel.Exchange.HTTP_URL;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.Exchange;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.FromDataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
+import spark.Request;
+
+@RunWith(Theories.class)
+public class DefaultSparkBindingTest {
+
+    private DefaultSparkBinding defaultSparkBinding; 
+
+    private Request request = mock(Request.class);
+    private SparkConfiguration sparkConfiguration = mock(SparkConfiguration.class);
+    private HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
+    private Exchange camelExchange = mock(Exchange.class);
+    
+    @Before
+    public void setup() {
+        defaultSparkBinding = new DefaultSparkBinding();
+
+        when(request.raw()).thenReturn(httpServletRequest);
+        when(request.headers()).thenReturn(Sets.newHashSet("Content-Type"));
+        when(request.headers("Content-Type")).thenReturn("application/json");
+        
+        when(httpServletRequest.getMethod()).thenReturn("POST");
+        when(httpServletRequest.getQueryString()).thenReturn("?query=value");
+        when(httpServletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost?query=value"));
+        when(httpServletRequest.getRequestURI()).thenReturn("http://localhost?query=value");
+        when(httpServletRequest.getContentType()).thenReturn("application/json");
+        
+        when(camelExchange.getFromEndpoint()).thenReturn(new SparkEndpoint("/", null));   
+    }
+    
+    @DataPoints("exchangeHeaderScenarios")
+    public static List<ExchangeHeaderScenario> exchangeHeaderScenarios() {
+        return asList(
+                new ExchangeHeaderScenario(emptyMap(), HTTP_METHOD, "POST"),
+                new ExchangeHeaderScenario(emptyMap(), HTTP_QUERY, "?query=value"),
+                new ExchangeHeaderScenario(emptyMap(), HTTP_URL, "http://localhost?query=value"),
+                new ExchangeHeaderScenario(emptyMap(), HTTP_URI, "http://localhost?query=value"),
+                new ExchangeHeaderScenario(emptyMap(), CONTENT_TYPE, "application/json"),
+                new ExchangeHeaderScenario(ImmutableMap.of(HTTP_METHOD, "GET"), HTTP_METHOD, "GET"),
+                new ExchangeHeaderScenario(ImmutableMap.of(HTTP_QUERY, "?originalQuery=value"), HTTP_QUERY, "?originalQuery=value"),
+                new ExchangeHeaderScenario(ImmutableMap.of(HTTP_URL, "http://originalhost?query=value"), HTTP_URL, "http://originalhost?query=value"),
+                new ExchangeHeaderScenario(ImmutableMap.of(HTTP_URI, "http://originalhost?query=value"), HTTP_URI, "http://originalhost?query=value"),
+                new ExchangeHeaderScenario(ImmutableMap.of(CONTENT_TYPE, "text/plain"), CONTENT_TYPE, "text/plain")
+        );
+    }
+
+    @Theory
+    @Test
+    public void shouldOnlyAddStandardExchangeHeader_givenHeaderNotPresentInInput(
+            @FromDataPoints("exchangeHeaderScenarios") ExchangeHeaderScenario scenario) throws Exception {
+        //given
+        Map<String, Object> headers = scenario.headers;
+        
+        //when
+        defaultSparkBinding.populateCamelHeaders(request, headers, camelExchange, sparkConfiguration);
+
+        //then
+        String actualHeader = Objects.toString(headers.get(scenario.expectedHeaderName), null);
+        assertEquals(scenario.expectedHeaderValue, actualHeader);
+    }
+
+    private static class ExchangeHeaderScenario {
+        Map<String, Object> headers = new HashMap<>();
+        String expectedHeaderName;
+        String expectedHeaderValue;
+        
+        public ExchangeHeaderScenario(Map<String, Object> headers, String expectedHeaderName, String expectedHeaderValue) {
+            super();
+            this.expectedHeaderName = expectedHeaderName;
+            this.expectedHeaderValue = expectedHeaderValue;
+            
+            this.headers.putAll(headers);
+        }
+    }
+}
+
+