From e31f41c2a9ef8c367a78ef37064a2af51fc286bd Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 31 Aug 2015 12:45:30 -0600 Subject: [PATCH] Created StaticServerList and updated tests to use it. --- .../netflix/ribbon/StaticServerList.java | 45 +++++++++++++++++++ .../ribbon/FeignRibbonClientRetryTests.java | 21 ++++----- .../netflix/feign/valid/FeignClientTests.java | 16 +++---- .../feign/valid/FeignHttpClientTests.java | 11 ++--- .../RibbonClientHttpRequestFactoryTests.java | 10 ++--- .../zuul/FormZuulProxyApplicationTests.java | 17 +++---- .../FormZuulServletProxyApplicationTests.java | 17 +++---- .../RetryableZuulProxyApplicationTests.java | 22 ++++----- .../zuul/SampleZuulProxyApplicationTests.java | 18 +++----- 9 files changed, 94 insertions(+), 83 deletions(-) create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/StaticServerList.java diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/StaticServerList.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/StaticServerList.java new file mode 100644 index 00000000..dae6293f --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/StaticServerList.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2015 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.netflix.ribbon; + +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; + +import java.util.Arrays; +import java.util.List; + +/** + * @author Spencer Gibb + */ +public class StaticServerList implements ServerList { + + private final List servers; + + public StaticServerList(T... servers) { + this.servers = Arrays.asList(servers); + } + + @Override + public List getInitialListOfServers() { + return servers; + } + + @Override + public List getUpdatedListOfServers() { + return servers; + } +} diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java index edc254a0..3c45b411 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java @@ -16,9 +16,12 @@ package org.springframework.cloud.netflix.feign.ribbon; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; -import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; import lombok.AllArgsConstructor; @@ -36,6 +39,7 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.annotation.DirtiesContext; @@ -45,13 +49,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import com.netflix.loadbalancer.ServerList; /** * @author Spencer Gibb @@ -146,12 +145,10 @@ class LocalRibbonClientConfiguration { private int port = 0; @Bean - public ILoadBalancer ribbonLoadBalancer() { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("___mybadhost__", 10001), + public ServerList ribbonServerList() { + return new StaticServerList<>(new Server("___mybadhost__", 10001), new Server("___mybadhost2__", 10002), - new Server("___mybadhost3__", 10003), new Server("localhost", this.port))); - return balancer; + new Server("___mybadhost3__", 10003), new Server("localhost", this.port)); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java index e611ac27..660bcc78 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java @@ -40,16 +40,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.WebIntegrationTest; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; @@ -57,9 +57,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import feign.Client; import feign.RequestInterceptor; @@ -71,8 +70,7 @@ import feign.RequestTemplate; */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = FeignClientTests.Application.class) -@WebAppConfiguration -@IntegrationTest({ "server.port=0", "spring.application.name=feignclienttest", +@WebIntegrationTest(randomPort = true, value = { "spring.application.name=feignclienttest", "feign.httpclient.enabled=false"}) @DirtiesContext public class FeignClientTests { @@ -262,10 +260,8 @@ class LocalRibbonClientConfiguration { private int port = 0; @Bean - public ILoadBalancer ribbonLoadBalancer() { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", this.port))); - return balancer; + public ServerList ribbonServerList() { + return new StaticServerList<>(new Server("localhost", this.port)); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignHttpClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignHttpClientTests.java index a0350e19..3fd2df76 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignHttpClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignHttpClientTests.java @@ -25,7 +25,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import java.lang.reflect.Field; -import java.util.Arrays; import lombok.AllArgsConstructor; import lombok.Data; @@ -42,6 +41,7 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.ResponseEntity; @@ -54,9 +54,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import feign.Client; @@ -185,10 +184,8 @@ public class FeignHttpClientTests { private int port = 0; @Bean - public ILoadBalancer ribbonLoadBalancer() { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", this.port))); - return balancer; + public ServerList ribbonServerList() { + return new StaticServerList<>(new Server("localhost", this.port)); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientHttpRequestFactoryTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientHttpRequestFactoryTests.java index 0af6f8bf..ad39d398 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientHttpRequestFactoryTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientHttpRequestFactoryTests.java @@ -20,7 +20,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.net.URI; -import java.util.Arrays; import lombok.SneakyThrows; @@ -47,9 +46,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; /** * @author Spencer Gibb @@ -170,10 +168,8 @@ class SimpleRibbonClientConfiguration { private int port = 0; @Bean - public ILoadBalancer ribbonLoadBalancer() { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", port))); - return balancer; + public ServerList ribbonServerList() { + return new StaticServerList<>(new Server("localhost", this.port)); } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java index 234522f2..bc95ae83 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java @@ -16,9 +16,10 @@ package org.springframework.cloud.netflix.zuul; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import java.util.Map; import lombok.extern.slf4j.Slf4j; @@ -35,6 +36,7 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.TestRestTemplate; 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.http.HttpEntity; @@ -55,13 +57,10 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.netflix.appinfo.EurekaInstanceConfig; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import com.netflix.zuul.ZuulFilter; -import static org.junit.Assert.assertEquals; - @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = FormZuulProxyApplication.class) @WebAppConfiguration @@ -227,12 +226,8 @@ class FormZuulProxyApplication { class FormRibbonClientConfiguration { @Bean - public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", instance - .getNonSecurePort()))); - // balancer.setServersList(Arrays.asList(new Server("localhost", 8000))); - return balancer; + public ServerList ribbonServerList(EurekaInstanceConfig instance) { + return new StaticServerList<>(new Server("localhost", instance.getNonSecurePort())); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulServletProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulServletProxyApplicationTests.java index 0ddf9175..0cd7136c 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulServletProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulServletProxyApplicationTests.java @@ -16,9 +16,10 @@ package org.springframework.cloud.netflix.zuul; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import java.util.Map; import lombok.extern.slf4j.Slf4j; @@ -35,6 +36,7 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.TestRestTemplate; 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.http.HttpEntity; @@ -55,13 +57,10 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.netflix.appinfo.EurekaInstanceConfig; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import com.netflix.zuul.ZuulFilter; -import static org.junit.Assert.assertEquals; - @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = FormZuulServletProxyApplication.class) @WebAppConfiguration @@ -226,12 +225,8 @@ class FormZuulServletProxyApplication { class ServletFormRibbonClientConfiguration { @Bean - public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", instance - .getNonSecurePort()))); - // balancer.setServersList(Arrays.asList(new Server("localhost", 8000))); - return balancer; + public ServerList ribbonServerList(EurekaInstanceConfig instance) { + return new StaticServerList<>(new Server("localhost", instance.getNonSecurePort())); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/RetryableZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/RetryableZuulProxyApplicationTests.java index dabdca82..9bb77c08 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/RetryableZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/RetryableZuulProxyApplicationTests.java @@ -2,8 +2,6 @@ package org.springframework.cloud.netflix.zuul; import static org.junit.Assert.assertEquals; -import java.util.Arrays; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +12,7 @@ import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.TestRestTemplate; import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.cloud.netflix.zuul.filters.ProxyRouteLocator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -34,9 +33,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.netflix.appinfo.EurekaInstanceConfig; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import com.netflix.zuul.ZuulFilter; @RunWith(SpringJUnit4ClassRunner.class) @@ -121,13 +119,11 @@ class RetryableZuulProxyApplication { //Load balancer with fixed server list for "simple" pointing to localhost @Configuration class RetryableRibbonClientConfiguration { - @Bean - public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList( - new Server("localhost", instance.getNonSecurePort()), - new Server("failed-localhost", instance.getNonSecurePort()) - )); - return balancer; - } + @Bean + public ServerList ribbonServerList(EurekaInstanceConfig instance) { + return new StaticServerList<>( + new Server("localhost", instance.getNonSecurePort()), + new Server("failed-localhost", instance.getNonSecurePort()) + ); + } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java index c01a4653..ab2d5365 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java @@ -36,6 +36,7 @@ import org.springframework.boot.test.TestRestTemplate; import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.cloud.netflix.zuul.filters.ProxyRouteLocator; import org.springframework.cloud.netflix.zuul.filters.ZuulProperties.ZuulRoute; import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonCommandFactory; @@ -58,9 +59,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.netflix.appinfo.EurekaInstanceConfig; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; @@ -299,11 +299,8 @@ class SampleZuulProxyApplication { class SimpleRibbonClientConfiguration { @Bean - public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", instance - .getNonSecurePort()))); - return balancer; + public ServerList ribbonServerList(EurekaInstanceConfig instance) { + return new StaticServerList<>(new Server("localhost", instance.getNonSecurePort())); } } @@ -312,11 +309,8 @@ class SimpleRibbonClientConfiguration { class AnotherRibbonClientConfiguration { @Bean - public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { - BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList(Arrays.asList(new Server("localhost", instance - .getNonSecurePort()))); - return balancer; + public ServerList ribbonServerList(EurekaInstanceConfig instance) { + return new StaticServerList<>(new Server("localhost", instance.getNonSecurePort())); } }