From c3f56788544e67f48b5c34a25857e3ba94476ee5 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 30 Apr 2015 12:56:38 -0600 Subject: [PATCH] only invoke RestClient.initWithNiwsConfig once fixes gh-324 --- .../ribbon/RibbonClientConfiguration.java | 7 ++- .../RibbonClientConfigurationTests.java | 59 +++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java index 0239e27c..4c32cf29 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java @@ -123,10 +123,11 @@ public class RibbonClientConfiguration { return new RibbonLoadBalancerContext(loadBalancer, config); } - private static class OverrideRestClient extends RestClient { + static class OverrideRestClient extends RestClient { - private OverrideRestClient(IClientConfig ncc) { - super(ncc); + protected OverrideRestClient(IClientConfig ncc) { + super(); + initWithNiwsConfig(ncc); } @Override diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java new file mode 100644 index 00000000..dc041575 --- /dev/null +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java @@ -0,0 +1,59 @@ +/* + * 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 static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertThat; + +import com.netflix.client.config.CommonClientConfigKey; +import com.netflix.client.config.DefaultClientConfigImpl; +import com.netflix.client.config.IClientConfig; +import org.junit.Test; + +/** + * @author Spencer Gibb + */ +public class RibbonClientConfigurationTests { + + @Test + public void restClientInitCalledOnce() { + CountingConfig config = new CountingConfig(); + config.setProperty(CommonClientConfigKey.ConnectTimeout, "1"); + config.setProperty(CommonClientConfigKey.ReadTimeout, "1"); + config.setProperty(CommonClientConfigKey.MaxHttpConnectionsPerHost, "1"); + config.setClientName("testClient"); + new TestRestClient(config); + assertThat(config.count, is(equalTo(1))); + } + + static class CountingConfig extends DefaultClientConfigImpl { + int count = 0; + } + + static class TestRestClient extends RibbonClientConfiguration.OverrideRestClient { + + private TestRestClient(IClientConfig ncc) { + super(ncc); + } + + @Override + public void initWithNiwsConfig(IClientConfig clientConfig) { + ((CountingConfig) clientConfig).count++; + super.initWithNiwsConfig(clientConfig); + } + } +}