diff --git a/spring-cloud-gateway-core/pom.xml b/spring-cloud-gateway-core/pom.xml index 64163a1c..39232497 100644 --- a/spring-cloud-gateway-core/pom.xml +++ b/spring-cloud-gateway-core/pom.xml @@ -37,7 +37,7 @@ spring-boot-configuration-processor true - + io.reactivex @@ -62,11 +62,11 @@ org.springframework spring-tuple - + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 73f15ae7..8018978c 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -20,20 +20,19 @@ package org.springframework.cloud.gateway.config; import java.util.List; import org.springframework.boot.actuate.endpoint.Endpoint; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; -// import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.gateway.actuate.GatewayEndpoint; import org.springframework.cloud.gateway.api.RouteDefinitionLocator; import org.springframework.cloud.gateway.api.RouteDefinitionRepository; import org.springframework.cloud.gateway.api.RouteDefinitionWriter; import org.springframework.cloud.gateway.api.RouteLocator; import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter; import org.springframework.cloud.gateway.filter.NettyRoutingFilter; import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter; import org.springframework.cloud.gateway.filter.WriteResponseFilter; @@ -47,12 +46,12 @@ import org.springframework.cloud.gateway.filter.factory.RemoveNonProxyHeadersWeb import org.springframework.cloud.gateway.filter.factory.RemoveRequestHeaderWebFilterFactory; import org.springframework.cloud.gateway.filter.factory.RemoveResponseHeaderWebFilterFactory; import org.springframework.cloud.gateway.filter.factory.RewritePathWebFilterFactory; -import org.springframework.cloud.gateway.filter.factory.SecureHeadersWebFilterFactory; -import org.springframework.cloud.gateway.filter.factory.SetResponseHeaderWebFilterFactory; -import org.springframework.cloud.gateway.filter.factory.WebFilterFactory; import org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties; +import org.springframework.cloud.gateway.filter.factory.SecureHeadersWebFilterFactory; import org.springframework.cloud.gateway.filter.factory.SetPathWebFilterFactory; +import org.springframework.cloud.gateway.filter.factory.SetResponseHeaderWebFilterFactory; import org.springframework.cloud.gateway.filter.factory.SetStatusWebFilterFactory; +import org.springframework.cloud.gateway.filter.factory.WebFilterFactory; import org.springframework.cloud.gateway.handler.FilteringWebHandler; import org.springframework.cloud.gateway.handler.NettyRoutingWebHandler; import org.springframework.cloud.gateway.handler.RequestPredicateHandlerMapping; @@ -70,14 +69,14 @@ import org.springframework.cloud.gateway.handler.predicate.RequestPredicateFacto import org.springframework.cloud.gateway.support.CachingRouteLocator; import org.springframework.cloud.gateway.support.CompositeRouteDefinitionLocator; import org.springframework.cloud.gateway.support.CompositeRouteLocator; -import org.springframework.cloud.gateway.support.RouteDefinitionRouteLocator; import org.springframework.cloud.gateway.support.InMemoryRouteDefinitionRepository; +import org.springframework.cloud.gateway.support.RouteDefinitionRouteLocator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - -// import com.netflix.hystrix.HystrixObservableCommand; - import org.springframework.context.annotation.Primary; + +import com.netflix.hystrix.HystrixObservableCommand; + import reactor.core.publisher.Flux; import reactor.ipc.netty.http.client.HttpClient; import rx.RxReactiveStreams; @@ -89,6 +88,7 @@ import rx.RxReactiveStreams; @ConditionalOnBean(GatewayConfiguration.Marker.class) @EnableConfigurationProperties @AutoConfigureBefore(HttpHandlerAutoConfiguration.class) +@AutoConfigureAfter(GatewayLoadBalancerClientAutoConfiguration.class) public class GatewayAutoConfiguration { @Configuration @@ -173,16 +173,6 @@ public class GatewayAutoConfiguration { // GlobalFilter beans - /*@ConditionalOnClass(LoadBalancerClient.class) - @Configuration - protected static class LoadBalancerClientConfiguration { - @Bean - @ConditionalOnBean(LoadBalancerClient.class) - public LoadBalancerClientFilter loadBalancerClientFilter(LoadBalancerClient client) { - return new LoadBalancerClientFilter(client); - } - }*/ - @Bean public RouteToRequestUrlFilter routeToRequestUrlFilter() { return new RouteToRequestUrlFilter(); @@ -261,7 +251,7 @@ public class GatewayAutoConfiguration { public AddResponseHeaderWebFilterFactory addResponseHeaderWebFilterFactory() { return new AddResponseHeaderWebFilterFactory(); } -/* TODO: add it back when s-c-netflix is up to date + @Configuration @ConditionalOnClass({HystrixObservableCommand.class, RxReactiveStreams.class}) protected static class HystrixConfiguration { @@ -269,7 +259,7 @@ public class GatewayAutoConfiguration { public HystrixWebFilterFactory hystrixWebFilterFactory() { return new HystrixWebFilterFactory(); } - }*/ + } @Bean public PrefixPathWebFilterFactory prefixPathWebFilterFactory() { diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayLoadBalancerClientAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayLoadBalancerClientAutoConfiguration.java new file mode 100644 index 00000000..c7043424 --- /dev/null +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayLoadBalancerClientAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2017 the original author or authors. + * + * Licensed 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.springframework.cloud.gateway.config; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter; +import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Spencer Gibb + */ +@Configuration +@ConditionalOnClass({LoadBalancerClient.class, RibbonAutoConfiguration.class}) +@ConditionalOnBean(GatewayConfiguration.Marker.class) +@AutoConfigureAfter(RibbonAutoConfiguration.class) +public class GatewayLoadBalancerClientAutoConfiguration { + + // GlobalFilter beans + + @Bean + @ConditionalOnBean(LoadBalancerClient.class) + public LoadBalancerClientFilter loadBalancerClientFilter(LoadBalancerClient client) { + return new LoadBalancerClientFilter(client); + } +} diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java index 42ba8d2c..cf1211ed 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java @@ -19,7 +19,7 @@ package org.springframework.cloud.gateway.discovery; import java.net.URI; -// import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.gateway.api.RouteDefinitionLocator; import org.springframework.cloud.gateway.filter.factory.RewritePathWebFilterFactory; import org.springframework.cloud.gateway.handler.predicate.PathRequestPredicateFactory; @@ -39,7 +39,7 @@ import reactor.core.publisher.Flux; * TODO: developer configuration, in zuul, this was opt out, should be opt in * @author Spencer Gibb */ -public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitionLocator { +public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLocator { private final DiscoveryClient discoveryClient; private final String routeIdPrefix; @@ -57,50 +57,10 @@ public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitio routeDefinition.setId(this.routeIdPrefix + serviceId); routeDefinition.setUri(URI.create("lb://" + serviceId)); - // add a predicate that matches the url at /serviceId*//** - PredicateDefinition predicate = new PredicateDefinition(); - predicate.setName(normalizePredicateName(PathRequestPredicateFactory.class)); - predicate.addArg(PATTERN_KEY, "/" + serviceId + "*//**"); - routeDefinition.getPredicates().add(predicate); - - //TODO: support for other default predicates - - // add a filter that removes /serviceId by default - FilterDefinition filter = new FilterDefinition(); - filter.setName(normalizeFilterName(RewritePathWebFilterFactory.class)); - String regex = "/" + serviceId + "/(?.*)"; - String replacement = "/${remaining}"; - filter.addArg(REGEXP_KEY, regex); - filter.addArg(REPLACEMENT_KEY, replacement); - routeDefinition.getFilters().add(filter); - - //TODO: support for default filters - - return routeDefinition; - }); - } - }*/ /*implements RouteDefinitionLocator { - - private final DiscoveryClient discoveryClient; - private final String routeIdPrefix; - - public DiscoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient) { - this.discoveryClient = discoveryClient; - this.routeIdPrefix = this.discoveryClient.getClass().getSimpleName() + "_"; - } - - @Override - public Flux getRouteDefinitions() { - return Flux.fromIterable(discoveryClient.getServices()) - .map(serviceId -> { - RouteDefinition routeDefinition = new RouteDefinition(); - routeDefinition.setId(this.routeIdPrefix + serviceId); - routeDefinition.setUri(URI.create("lb://" + serviceId)); - - // add a predicate that matches the url at /serviceId*//** + // add a predicate that matches the url at /serviceId* PredicateDefinition predicate = new PredicateDefinition(); predicate.setName(normalizePredicateName(PathRequestPredicateFactory.class)); - predicate.addArg(PATTERN_KEY, "/" + serviceId + "*//**"); + predicate.addArg(PATTERN_KEY, "/" + serviceId + "*"); routeDefinition.getPredicates().add(predicate); //TODO: support for other default predicates @@ -119,4 +79,4 @@ public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitio return routeDefinition; }); } -}*/ +} diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/LoadBalancerClientFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/LoadBalancerClientFilter.java index bdad0997..d6f6c7ea 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/LoadBalancerClientFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/LoadBalancerClientFilter.java @@ -21,8 +21,8 @@ import java.net.URI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -// import org.springframework.cloud.client.ServiceInstance; -// import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.gateway.support.NotFoundException; import org.springframework.core.Ordered; import org.springframework.web.server.ServerWebExchange; @@ -42,11 +42,11 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered { private static final Log log = LogFactory.getLog(LoadBalancerClientFilter.class); public static final int LOAD_BALANCER_CLIENT_FILTER_ORDER = 10100; - /*private final LoadBalancerClient loadBalancer; + private final LoadBalancerClient loadBalancer; public LoadBalancerClientFilter(LoadBalancerClient loadBalancer) { this.loadBalancer = loadBalancer; - }*/ + } @Override public int getOrder() { @@ -55,7 +55,7 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { - /*URI url = getAttribute(exchange, GATEWAY_REQUEST_URL_ATTR, URI.class); + URI url = getAttribute(exchange, GATEWAY_REQUEST_URL_ATTR, URI.class); if (url == null || !url.getScheme().equals("lb")) { return chain.filter(exchange); } @@ -74,7 +74,7 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered { .build(true) .toUri(); log.trace("LoadBalancerClientFilter url chosen: " + requestUrl); - exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl);*/ + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl); return chain.filter(exchange); } diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactory.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactory.java index b4fa4439..01f3ffa5 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactory.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactory.java @@ -22,14 +22,14 @@ import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; -// import com.netflix.hystrix.HystrixCommandGroupKey; -// import com.netflix.hystrix.HystrixCommandKey; -// import com.netflix.hystrix.HystrixObservableCommand; +import com.netflix.hystrix.HystrixCommandGroupKey; +import com.netflix.hystrix.HystrixCommandKey; +import com.netflix.hystrix.HystrixObservableCommand; import reactor.core.publisher.Mono; -// import rx.Observable; +import rx.Observable; import rx.RxReactiveStreams; -// import rx.Subscription; +import rx.Subscription; import java.util.Arrays; import java.util.List; @@ -37,7 +37,7 @@ import java.util.List; /** * @author Spencer Gibb */ -public class HystrixWebFilterFactory {}/*implements WebFilterFactory { +public class HystrixWebFilterFactory implements WebFilterFactory { @Override public List argNames() { @@ -46,6 +46,7 @@ public class HystrixWebFilterFactory {}/*implements WebFilterFactory { @Override public WebFilter apply(Tuple args) { + //TODO: if no name is supplied, generate one from command id (useful for default filter) final String commandName = args.getString(NAME_KEY); final HystrixCommandGroupKey groupKey = HystrixCommandGroupKey.Factory.asKey(getClass().getSimpleName()); final HystrixCommandKey commandKey = HystrixCommandKey.Factory.asKey(commandName); @@ -80,4 +81,4 @@ public class HystrixWebFilterFactory {}/*implements WebFilterFactory { return RxReactiveStreams.toObservable(this.chain.filter(this.exchange)); } } -}*/ +} diff --git a/spring-cloud-gateway-core/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-core/src/main/resources/META-INF/spring.factories index 8de7fa66..1d13cae7 100644 --- a/spring-cloud-gateway-core/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-gateway-core/src/main/resources/META-INF/spring.factories @@ -1,3 +1,4 @@ # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.gateway.config.GatewayAutoConfiguration +org.springframework.cloud.gateway.config.GatewayAutoConfiguration,\ +org.springframework.cloud.gateway.config.GatewayLoadBalancerClientAutoConfiguration diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderWebFilterFactoryTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderWebFilterFactoryTests.java index 34e2b31d..ebf1bb81 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderWebFilterFactoryTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderWebFilterFactoryTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.gateway.filter.factory; +import java.time.Duration; import java.util.Map; import org.junit.Test; @@ -57,7 +58,7 @@ public class AddRequestHeaderWebFilterFactoryTests extends BaseWebClientTests { assertThat(headers).containsEntry("X-Request-Foo", "Bar"); }) .expectComplete() - .verify(DURATION); + .verify(Duration.ofMinutes(10)); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactoryTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactoryTests.java index c4fed47a..57568390 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactoryTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/HystrixWebFilterFactoryTests.java @@ -44,7 +44,7 @@ public class HystrixWebFilterFactoryTests extends BaseWebClientTests { @Test public void hystrixFilterWorks() { - /*Mono result = webClient.get() + Mono result = webClient.get() .uri("/get") .header("Host", "www.hystrixsuccess.org") .exchange(); @@ -58,19 +58,19 @@ public class HystrixWebFilterFactoryTests extends BaseWebClientTests { .isEqualTo("hystrix_success_test"); }) .expectComplete() - .verify(DURATION);*/ + .verify(DURATION); } @Test public void hystrixFilterTimesout() { - /*Mono result = webClient.get() + Mono result = webClient.get() .uri("/delay/3") .header("Host", "www.hystrixfailure.org") .exchange(); StepVerifier.create(result) .expectError() //TODO: can we get more specific as to the error? - .verify();*/ + .verify(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveNonProxyHeadersWebFilterFactoryTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveNonProxyHeadersWebFilterFactoryTests.java index 5ca6d21d..d81b1fce 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveNonProxyHeadersWebFilterFactoryTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveNonProxyHeadersWebFilterFactoryTests.java @@ -24,7 +24,6 @@ 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; @@ -60,7 +59,7 @@ public class RemoveNonProxyHeadersWebFilterFactoryTests extends BaseWebClientTes .consumeNextWith( response -> { Map headers = getMap(response, "headers"); - // for (String header : DEFAULT_HEADERS_TO_REMOVE) { + //FIXME for (String header : DEFAULT_HEADERS_TO_REMOVE) { assertThat(headers).doesNotContainKey("Proxy-Authorization"); // } }) 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 055c9c49..4b72dfaf 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 @@ -30,9 +30,9 @@ import org.springframework.boot.web.server.LocalServerPort; import org.springframework.cloud.gateway.EnableGateway; import org.springframework.cloud.gateway.filter.GlobalFilter; 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.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; @@ -43,8 +43,8 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.server.ServerWebExchange; -// import com.netflix.loadbalancer.Server; -// import com.netflix.loadbalancer.ServerList; +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; @@ -77,10 +77,10 @@ public class BaseWebClientTests { @RestController @RequestMapping("/httpbin") @Configuration - /*@RibbonClients({ + @RibbonClients({ @RibbonClient(name = "testservice", configuration = TestRibbonConfig.class), @RibbonClient(name = "myservice", configuration = TestRibbonConfig.class) - })*/ + }) @EnableGateway protected static class DefaultTestConfig { @@ -177,10 +177,10 @@ public class BaseWebClientTests { @LocalServerPort protected int port = 0; - /*@Bean + @Bean public ServerList ribbonServerList() { return new StaticServerList<>(new Server("localhost", this.port)); - }*/ + } } } diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java index 1d894794..e50b94a5 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java @@ -21,7 +21,6 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -126,7 +125,6 @@ public class GatewayIntegrationTests extends BaseWebClientTests { } @Test - @Ignore public void loadBalancerFilterWorks() { Mono result = webClient.get() .uri("/get") @@ -146,7 +144,6 @@ public class GatewayIntegrationTests extends BaseWebClientTests { } @Test - @Ignore public void postWorks() { Mono result = webClient.post() .uri("/post") diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java index 991d71be..67e6835a 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java @@ -20,23 +20,14 @@ package org.springframework.cloud.gateway.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -// import org.springframework.cloud.client.discovery.DiscoveryClient; -// import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.gateway.EnableGateway; -import org.springframework.cloud.gateway.api.RouteDefinitionLocator; -import org.springframework.cloud.gateway.config.GatewayProperties; -import org.springframework.cloud.gateway.config.PropertiesRouteDefinitionLocator; import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator; -import org.springframework.cloud.gateway.support.CachingRouteDefinitionLocator; -import org.springframework.cloud.gateway.support.CompositeRouteDefinitionLocator; -import org.springframework.cloud.gateway.support.InMemoryRouteDefinitionRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Profile; -import reactor.core.publisher.Flux; - @EnableGateway @SpringBootConfiguration @EnableAutoConfiguration @@ -47,7 +38,7 @@ public class GatewayTestApplication { then run this app with `--spring.profiles.active=discovery` should be able to hit http://localhost:8008/configserver/foo/default a normal configserver api */ - /*@Configuration + @Configuration @EnableDiscoveryClient @Profile("discovery") protected static class GatewayDiscoveryConfiguration { @@ -56,39 +47,6 @@ public class GatewayTestApplication { public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator(DiscoveryClient discoveryClient) { return new DiscoveryClientRouteDefinitionLocator(discoveryClient); } - - @Bean - public PropertiesRouteDefinitionLocator propertiesRouteLocator(GatewayProperties properties) { - return new PropertiesRouteDefinitionLocator(properties); - } - - @Bean - @Primary - public RouteDefinitionLocator compositeRouteLocator(InMemoryRouteDefinitionRepository inMemoryRouteRepository, - DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator, - PropertiesRouteDefinitionLocator propertiesRouteLocator) { - Flux flux = Flux.just(inMemoryRouteRepository, discoveryClientRouteLocator, propertiesRouteLocator); - return new CachingRouteDefinitionLocator(new CompositeRouteDefinitionLocator(flux)); - } - }*/ - - @Configuration - @Profile("!discovery") - protected static class GatewayInMemoryConfiguration { - - @Bean - public PropertiesRouteDefinitionLocator propertiesRouteLocator(GatewayProperties properties) { - return new PropertiesRouteDefinitionLocator(properties); - } - - @Bean - @Primary - public RouteDefinitionLocator compositeRouteLocator(InMemoryRouteDefinitionRepository inMemoryRouteRepository, - PropertiesRouteDefinitionLocator propertiesRouteLocator) { - Flux flux = Flux.just(inMemoryRouteRepository, propertiesRouteLocator); - CompositeRouteDefinitionLocator composite = new CompositeRouteDefinitionLocator(flux); - return new CachingRouteDefinitionLocator(composite); - } } public static void main(String[] args) { diff --git a/spring-cloud-gateway-core/src/test/resources/application.yml b/spring-cloud-gateway-core/src/test/resources/application.yml index 52e4f618..826790bb 100644 --- a/spring-cloud-gateway-core/src/test/resources/application.yml +++ b/spring-cloud-gateway-core/src/test/resources/application.yml @@ -1,15 +1,15 @@ test: hostport: httpbin.org:80 # hostport: localhost:5000 - uri: http://${test.hostport} -# uri: lb://testservice +# uri: http://${test.hostport} + uri: lb://testservice spring: cloud: gateway: default-filters: - AddResponseHeader=X-Response-Default-Foo, Default-Bar -# - PrefixPath=/httpbin + - PrefixPath=/httpbin # TODO: breakup configuration for individual tests (though some are reused) routes: @@ -59,20 +59,20 @@ spring: - AddResponseHeader=X-Request-Foo, Bar # ===================================== -# - id: hystrix_failure_test -# uri: ${test.uri} -# predicates: -# - Host=**.hystrixfailure.org -# filters: -# - Hystrix=failcmd + - id: hystrix_failure_test + uri: ${test.uri} + predicates: + - Host=**.hystrixfailure.org + filters: + - Hystrix=failcmd # ===================================== -# - id: hystrix_success_test -# uri: ${test.uri} -# predicates: -# - Host=**.hystrixsuccess.org -# filters: -# - Hystrix=successcmd + - id: hystrix_success_test + uri: ${test.uri} + predicates: + - Host=**.hystrixsuccess.org + filters: + - Hystrix=successcmd # ===================================== - id: load_balancer_client_test