| /* |
| * 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 java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Objects; |
| |
| import static java.util.Arrays.asList; |
| import static java.util.Collections.emptyMap; |
| |
| import javax.servlet.http.HttpServletRequest; |
| |
| import com.google.common.collect.ImmutableMap; |
| import com.google.common.collect.Sets; |
| 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 spark.Request; |
| |
| 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.junit.Assert.assertEquals; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.when; |
| |
| |
| @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 shouldOnlyAddStandardExchangeHeaderGivenHeaderNotPresentInInput( |
| @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; |
| |
| ExchangeHeaderScenario(Map<String, Object> headers, String expectedHeaderName, String expectedHeaderValue) { |
| super(); |
| this.expectedHeaderName = expectedHeaderName; |
| this.expectedHeaderValue = expectedHeaderValue; |
| |
| this.headers.putAll(headers); |
| } |
| } |
| } |
| |
| |