diff --git a/spring-cloud-gateway-core/pom.xml b/spring-cloud-gateway-core/pom.xml
index 323b6dde..519e642e 100644
--- a/spring-cloud-gateway-core/pom.xml
+++ b/spring-cloud-gateway-core/pom.xml
@@ -74,6 +74,12 @@
assertj-core
test
+
+ org.synchronoss.cloud
+ nio-multipart-parser
+ 1.0.1
+ test
+
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestHeaderRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestHeaderRouteFilterIntegrationTests.java
index 35da9566..9478a923 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestHeaderRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestHeaderRouteFilterIntegrationTests.java
@@ -24,8 +24,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -62,7 +62,7 @@ public class AddRequestHeaderRouteFilterIntegrationTests extends BaseWebClientTe
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestParameterRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestParameterRouteFilterIntegrationTests.java
index 61c0ba8f..fa2c5f94 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestParameterRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/AddRequestParameterRouteFilterIntegrationTests.java
@@ -24,8 +24,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -71,7 +71,7 @@ public class AddRequestParameterRouteFilterIntegrationTests extends BaseWebClien
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RedirectToRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RedirectToRouteFilterIntegrationTests.java
index 5a0606c1..2f2e9330 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RedirectToRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RedirectToRouteFilterIntegrationTests.java
@@ -22,8 +22,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.test.annotation.DirtiesContext;
@@ -63,7 +63,7 @@ public class RedirectToRouteFilterIntegrationTests extends BaseWebClientTests {
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RemoveRequestHeaderRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RemoveRequestHeaderRouteFilterIntegrationTests.java
index 63eb0fbd..a6e2513a 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RemoveRequestHeaderRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RemoveRequestHeaderRouteFilterIntegrationTests.java
@@ -24,8 +24,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -63,7 +63,7 @@ public class RemoveRequestHeaderRouteFilterIntegrationTests extends BaseWebClien
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RewritePathRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RewritePathRouteFilterIntegrationTests.java
index 5d90e075..ec7b5e76 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RewritePathRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/RewritePathRouteFilterIntegrationTests.java
@@ -22,8 +22,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpStatus;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -58,7 +58,7 @@ public class RewritePathRouteFilterIntegrationTests extends BaseWebClientTests {
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SecureHeadersRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SecureHeadersRouteFilterIntegrationTests.java
index 3ef89410..f6a301c1 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SecureHeadersRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SecureHeadersRouteFilterIntegrationTests.java
@@ -22,8 +22,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.test.annotation.DirtiesContext;
@@ -79,7 +79,7 @@ public class SecureHeadersRouteFilterIntegrationTests extends BaseWebClientTests
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterIntegrationTests.java
index 4aa99e4b..a076501d 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetPathRouteFilterIntegrationTests.java
@@ -22,8 +22,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpStatus;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -58,7 +58,7 @@ public class SetPathRouteFilterIntegrationTests extends BaseWebClientTests {
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetResponseRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetResponseRouteFilterIntegrationTests.java
index efee5026..28890573 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetResponseRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetResponseRouteFilterIntegrationTests.java
@@ -22,8 +22,8 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpHeaders;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@@ -60,7 +60,7 @@ public class SetResponseRouteFilterIntegrationTests extends BaseWebClientTests {
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetStatusRouteFilterIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetStatusRouteFilterIntegrationTests.java
index 39b43027..daf687c8 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetStatusRouteFilterIntegrationTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/route/SetStatusRouteFilterIntegrationTests.java
@@ -22,15 +22,13 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
-import org.springframework.http.HttpHeaders;
+import org.springframework.context.annotation.Import;
import org.springframework.http.HttpStatus;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.reactive.function.client.ClientResponse;
-import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
import static org.springframework.cloud.gateway.test.TestUtils.assertStatus;
@@ -69,7 +67,7 @@ public class SetStatusRouteFilterIntegrationTests extends BaseWebClientTests {
@EnableAutoConfiguration
@SpringBootConfiguration
- @EnableGateway
+ @Import(DefaultTestConfig.class)
public static class TestConfig { }
}
diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java
index dce35c8d..5584854c 100644
--- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java
+++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java
@@ -17,22 +17,43 @@
package org.springframework.cloud.gateway.test;
+import java.io.IOException;
import java.time.Duration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.cloud.gateway.EnableGateway;
-import org.springframework.cloud.gateway.api.Route;
import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.cloud.gateway.filter.route.RouteFilter;
+import org.springframework.cloud.gateway.model.Route;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.cloud.netflix.ribbon.RibbonClients;
+import org.springframework.cloud.netflix.ribbon.StaticServerList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.server.WebFilter;
+
+import com.netflix.loadbalancer.Server;
+import com.netflix.loadbalancer.ServerList;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_HANDLER_MAPPER_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR;
+import static org.springframework.cloud.gateway.test.TestUtils.parseMultipart;
+
+import reactor.core.publisher.Mono;
/**
* @author Spencer Gibb
@@ -56,12 +77,109 @@ public class BaseWebClientTests {
this.webClient = WebClient.create(baseUri);
}
+ @RestController
+ @RequestMapping("/httpbin")
@Configuration
+ @RibbonClients({
+ @RibbonClient(name = "testservice", configuration = TestRibbonConfig.class),
+ @RibbonClient(name = "myservice", configuration = TestRibbonConfig.class)
+ })
@EnableGateway
protected static class DefaultTestConfig {
private static final Log log = LogFactory.getLog(DefaultTestConfig.class);
+ @RequestMapping("/")
+ public String home(ServerWebExchange exchange) {
+ return "httpbin compatible home";
+ }
+
+ @RequestMapping("/headers")
+ public Map headers(ServerWebExchange exchange) {
+ HashMap map = new HashMap<>();
+ addHeaders(exchange, map);
+ return map;
+ }
+
+ private void addHeaders(ServerWebExchange exchange, HashMap map) {
+ HashMap headers = new HashMap<>();
+ exchange.getRequest().getHeaders().forEach((name, values) -> {
+ headers.put(name, values.get(0));
+ });
+
+ map.put("headers", headers);
+ }
+
+ @RequestMapping("/delay/{sec}")
+ public Map get(ServerWebExchange exchange, @PathVariable int sec) throws InterruptedException {
+ int delay = Math.min(sec, 10);
+ Thread.sleep(delay * 1000);
+ return get(exchange);
+ }
+
+ @RequestMapping("/get")
+ public Map get(ServerWebExchange exchange) {
+ HashMap map = new HashMap<>();
+ addHeaders(exchange, map);
+ HashMap params = new HashMap<>();
+ exchange.getRequest().getQueryParams().forEach((name, values) -> {
+ params.put(name, values.get(0));
+
+ });
+ map.put("args", params);
+ return map;
+ }
+
+ @RequestMapping(value = "/post", consumes = "multipart/form-data")
+ public Mono