From dfbfcfecc7ae6442e6916a496ee88287dea0802e Mon Sep 17 00:00:00 2001 From: Will Tran Date: Thu, 23 Jun 2016 15:39:07 -0400 Subject: [PATCH] Without explicit client config of IsSecure, lookup from registration instead of defaulting to false. Fixes gh-1126 --- .../ribbon/RibbonLoadBalancerClient.java | 5 ++- .../ribbon/RibbonLoadBalancerClientTests.java | 34 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java index 78bc9e8c..28ca7b7d 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java @@ -114,7 +114,10 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient { private boolean isSecure(Server server, String serviceId) { IClientConfig config = this.clientFactory.getClientConfig(serviceId); if (config != null) { - return config.get(CommonClientConfigKey.IsSecure, false); + Boolean isSecure = config.get(CommonClientConfigKey.IsSecure); + if (isSecure != null) { + return isSecure; + } } return serverIntrospector(serviceId).isSecure(server); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java index 38173080..e224a134 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java @@ -112,7 +112,7 @@ public class RibbonLoadBalancerClientTests { public void testReconstructUriWithSecureClientConfig() { RibbonServer server = getRibbonServer(); IClientConfig config = mock(IClientConfig.class); - when(config.get(CommonClientConfigKey.IsSecure, false)).thenReturn(true); + when(config.get(CommonClientConfigKey.IsSecure)).thenReturn(true); when(clientFactory.getClientConfig(server.getServiceId())).thenReturn(config); RibbonLoadBalancerClient client = getRibbonLoadBalancerClient(server); @@ -124,6 +124,33 @@ public class RibbonLoadBalancerClientTests { assertEquals("https", uri.getScheme()); } + @Test + @SneakyThrows + public void testReconstructSecureUriWithoutScheme() { + testReconstructSchemelessUriWithoutClientConfig(getSecureRibbonServer(), "https"); + } + + @Test + @SneakyThrows + public void testReconstructUnsecureSchemelessUri() { + testReconstructSchemelessUriWithoutClientConfig(getRibbonServer(), "http"); + } + + @SneakyThrows + public void testReconstructSchemelessUriWithoutClientConfig(RibbonServer server, String expectedScheme) { + IClientConfig config = mock(IClientConfig.class); + when(config.get(CommonClientConfigKey.IsSecure)).thenReturn(null); + when(clientFactory.getClientConfig(server.getServiceId())).thenReturn(config); + + RibbonLoadBalancerClient client = getRibbonLoadBalancerClient(server); + ServiceInstance serviceInstance = client.choose(server.getServiceId()); + URI uri = client.reconstructURI(serviceInstance, + new URI("//" + server.getServiceId())); + assertEquals(server.getHost(), uri.getHost()); + assertEquals(server.getPort(), uri.getPort()); + assertEquals(expectedScheme, uri.getScheme()); + } + @Test public void testChoose() { RibbonServer server = getRibbonServer(); @@ -206,6 +233,11 @@ public class RibbonLoadBalancerClientTests { Collections.singletonMap("mykey", "myvalue")); } + protected RibbonServer getSecureRibbonServer() { + return new RibbonServer("testService", new Server("myhost", 8443), false, + Collections.singletonMap("mykey", "myvalue")); + } + protected void verifyServerStats() { verify(this.serverStats).incrementActiveRequestsCount(); verify(this.serverStats).decrementActiveRequestsCount();