You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2018/10/06 11:01:02 UTC
[camel] 03/03: CAMEL-12855: cleanup and tests
This is an automated email from the ASF dual-hosted git repository.
zregvart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit a4f81d4f43d25030ed70d4bdb1979542ee31ba4c
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Sat Oct 6 13:00:18 2018 +0200
CAMEL-12855: cleanup and tests
---
components/camel-swagger-java/pom.xml | 30 ++++-
.../apache/camel/swagger/RestSwaggerSupport.java | 29 ++---
.../camel/swagger/RestSwaggerSupportTest.java | 140 +++++++++++++++++++++
3 files changed, 179 insertions(+), 20 deletions(-)
diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml
index 434a3c8..344fa32 100644
--- a/components/camel-swagger-java/pom.xml
+++ b/components/camel-swagger-java/pom.xml
@@ -135,10 +135,29 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>${junit-jupiter-version}</version>
<scope>test</scope>
- </dependency>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-params</artifactId>
+ <version>${junit-jupiter-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>${junit-jupiter-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
+ <version>${junit-jupiter-version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
@@ -160,6 +179,11 @@
<version>${assertj-version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
index 7a90ab3..33cd20a 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
@@ -59,11 +59,11 @@ import static org.apache.camel.swagger.SwaggerHelper.clearVendorExtensions;
* such as servlet/jetty/netty4-http to offer Swagger API listings with minimal effort.
*/
public class RestSwaggerSupport {
-
- private static final String HEADER_X_FORWARDED_PREFIX = "X-Forwarded-Prefix";
- private static final String HEADER_X_FORWARDED_HOST = "X-Forwarded-Host";
- private static final String HEADER_X_FORWARDED_PROTO = "X-Forwarded-Proto";
- private static final String HEADER_HOST = "Host";
+
+ static final String HEADER_X_FORWARDED_PREFIX = "X-Forwarded-Prefix";
+ static final String HEADER_X_FORWARDED_HOST = "X-Forwarded-Host";
+ static final String HEADER_X_FORWARDED_PROTO = "X-Forwarded-Proto";
+ static final String HEADER_HOST = "Host";
private static final Logger LOG = LoggerFactory.getLogger(RestSwaggerSupport.class);
private RestSwaggerReader reader = new RestSwaggerReader();
@@ -355,37 +355,32 @@ public class RestSwaggerSupport {
response.setHeader("Access-Control-Max-Age", maxAge);
}
- private void setupXForwardedHeaders(Swagger swagger, Map<String, Object> headers) {
+ static void setupXForwardedHeaders(Swagger swagger, Map<String, Object> headers) {
String host = (String) headers.get(HEADER_HOST);
- if(ObjectHelper.isNotEmpty(host)) {
+ if (ObjectHelper.isNotEmpty(host)) {
swagger.setHost(host);
}
String forwardedPrefix = (String) headers.get(HEADER_X_FORWARDED_PREFIX);
if (ObjectHelper.isNotEmpty(forwardedPrefix)) {
- String prefixedBasePath = "/" + URISupport.stripPrefix(forwardedPrefix, "/") +
- (!forwardedPrefix.endsWith("/") ? "/" : "") + URISupport.stripPrefix(swagger.getBasePath(), "/");
- swagger.setBasePath(prefixedBasePath);
+ swagger.setBasePath(URISupport.joinPaths(forwardedPrefix, swagger.getBasePath()));
}
String forwardedHost = (String) headers.get(HEADER_X_FORWARDED_HOST);
- if(ObjectHelper.isNotEmpty(forwardedHost)) {
+ if (ObjectHelper.isNotEmpty(forwardedHost)) {
swagger.setHost(forwardedHost);
}
String proto = (String) headers.get(HEADER_X_FORWARDED_PROTO);
if(ObjectHelper.isNotEmpty(proto)) {
String[] schemes = proto.split(",");
- List<Scheme> schs = new ArrayList<>();
for(String scheme : schemes) {
String trimmedScheme = scheme.trim();
- schs.add(Scheme.forValue(trimmedScheme));
+ if (ObjectHelper.isNotEmpty(trimmedScheme)) {
+ swagger.addScheme(Scheme.forValue(trimmedScheme));
+ }
}
- swagger.setSchemes(schs);
- }
- else {
- swagger.setSchemes(null);
}
}
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java
new file mode 100644
index 0000000..3498a8e
--- /dev/null
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java
@@ -0,0 +1,140 @@
+/**
+ * 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.swagger;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import io.swagger.models.Scheme;
+import io.swagger.models.Swagger;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import static org.junit.jupiter.params.provider.Arguments.arguments;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+public class RestSwaggerSupportTest {
+
+ @Test
+ public void shouldAdaptFromXForwardHeaders() {
+ final Swagger swagger = spy(new Swagger().basePath("/base"));
+
+ final Map<String, Object> headers = new HashMap<>();
+ headers.put(RestSwaggerSupport.HEADER_X_FORWARDED_PREFIX, "/prefix");
+ headers.put(RestSwaggerSupport.HEADER_X_FORWARDED_HOST, "host");
+ headers.put(RestSwaggerSupport.HEADER_X_FORWARDED_PROTO, "http, HTTPS ");
+ RestSwaggerSupport.setupXForwardedHeaders(swagger, headers);
+
+ verify(swagger).getBasePath();
+ verify(swagger).setBasePath("/prefix/base");
+ verify(swagger).setHost("host");
+ verify(swagger).addScheme(Scheme.HTTP);
+ verify(swagger).addScheme(Scheme.HTTPS);
+ verifyNoMoreInteractions(swagger);
+ }
+
+ @ParameterizedTest
+ @MethodSource("basePathAndPrefixVariations")
+ public void shouldAdaptWithVaryingBasePathsAndPrefixes(final String prefix, final String basePath,
+ final String expected) {
+ final Swagger swagger = spy(new Swagger().basePath(basePath));
+
+ final Map<String, Object> headers = new HashMap<>();
+ headers.put(RestSwaggerSupport.HEADER_X_FORWARDED_PREFIX, prefix);
+ RestSwaggerSupport.setupXForwardedHeaders(swagger, headers);
+
+ verify(swagger).getBasePath();
+ verify(swagger).setBasePath(expected);
+ verifyNoMoreInteractions(swagger);
+ }
+
+ @ParameterizedTest
+ @MethodSource("schemeVariations")
+ public void shouldAdaptWithVaryingSchemes(final String xForwardedScheme, final Scheme[] expected) {
+ final Swagger swagger = spy(new Swagger());
+
+ RestSwaggerSupport.setupXForwardedHeaders(swagger,
+ Collections.singletonMap(RestSwaggerSupport.HEADER_X_FORWARDED_PROTO, xForwardedScheme));
+
+ for (final Scheme scheme : expected) {
+ verify(swagger).addScheme(scheme);
+ }
+
+ verifyNoMoreInteractions(swagger);
+ }
+
+ @Test
+ public void shouldNotAdaptFromXForwardHeadersWhenNoHeadersSpecified() {
+ final Swagger swagger = spy(new Swagger());
+
+ RestSwaggerSupport.setupXForwardedHeaders(swagger, Collections.emptyMap());
+
+ verifyZeroInteractions(swagger);
+ }
+
+ static Stream<Arguments> basePathAndPrefixVariations() {
+ return Stream.of(//
+ arguments("/prefix", "/base", "/prefix/base"), //
+ arguments("/prefix", "/base/", "/prefix/base/"), //
+ arguments("/prefix", "base", "/prefix/base"), //
+ arguments("/prefix", "base/", "/prefix/base/"), //
+ arguments("/prefix", "", "/prefix"), //
+ arguments("/prefix", null, "/prefix"), //
+ arguments("/prefix/", "/base", "/prefix/base"), //
+ arguments("/prefix/", "/base/", "/prefix/base/"), //
+ arguments("/prefix/", "base", "/prefix/base"), //
+ arguments("/prefix/", "base/", "/prefix/base/"), //
+ arguments("/prefix/", "", "/prefix/"), //
+ arguments("/prefix/", null, "/prefix/"), //
+ arguments("prefix", "/base", "prefix/base"), //
+ arguments("prefix", "/base/", "prefix/base/"), //
+ arguments("prefix", "base", "prefix/base"), //
+ arguments("prefix", "base/", "prefix/base/"), //
+ arguments("prefix", "", "prefix"), //
+ arguments("prefix", null, "prefix"), //
+ arguments("prefix/", "/base", "prefix/base"), //
+ arguments("prefix/", "/base/", "prefix/base/"), //
+ arguments("prefix/", "base", "prefix/base"), //
+ arguments("prefix/", "base/", "prefix/base/"), //
+ arguments("prefix/", "", "prefix/"), //
+ arguments("prefix/", null, "prefix/") //
+ );
+ }
+
+ static Stream<Arguments> schemeVariations() {
+ final Scheme[] none = new Scheme[0];
+
+ return Stream.of(//
+ arguments(null, none), //
+ arguments("", none), //
+ arguments(",", none), //
+ arguments(" , ", none), //
+ arguments("HTTPS,http", new Scheme[] {Scheme.HTTPS, Scheme.HTTP}), //
+ arguments(" HTTPS, http ", new Scheme[] {Scheme.HTTPS, Scheme.HTTP}), //
+ arguments(",http,", new Scheme[] {Scheme.HTTP}), //
+ arguments("hTtpS", new Scheme[] {Scheme.HTTPS})//
+ );
+ }
+}