Browse Source

Takes advantage of new builder pattern. Also reverted elimination of properties for feign and ribbon.

pull/6/head
Ryan Baxter 8 years ago
parent
commit
69739420fa
  1. 18
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java
  2. 60
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java
  3. 26
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java
  4. 4
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RibbonCommandFactoryConfiguration.java
  5. 12
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfiguration.java
  6. 75
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java
  7. 12
      spring-cloud-netflix-core/src/test/java/OkHttpClientConfigurationTests.java
  8. 10
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ApacheHttpClientConfigurationTests.java
  9. 2
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignHttpClientUrlTests.java
  10. 4
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java
  11. 3
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorPropertiesOverridesIntegrationTests.java
  12. 3
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java
  13. 2
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/okhttp/SpringRetryDisableOkHttpClientTests.java
  14. 2
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/okhttp/SpringRetryEnabledOkHttpClientTests.java
  15. 4
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfigurationTests.java
  16. 45
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java
  17. 4
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonRetryIntegrationTests.java

18
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java

@ -101,6 +101,7 @@ public class FeignAutoConfiguration { @@ -101,6 +101,7 @@ public class FeignAutoConfiguration {
@Configuration
@ConditionalOnClass(ApacheHttpClient.class)
@ConditionalOnMissingClass("com.netflix.loadbalancer.ILoadBalancer")
@ConditionalOnMissingBean(CloseableHttpClient.class)
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
protected static class HttpClientFeignConfiguration {
private final Timer connectionManagerTimer = new Timer(
@ -131,7 +132,7 @@ public class FeignAutoConfiguration { @@ -131,7 +132,7 @@ public class FeignAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean(CloseableHttpClient.class)
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
HttpClientConnectionManager httpClientConnectionManager,
FeignHttpClientProperties httpClientProperties) {
@ -139,8 +140,9 @@ public class FeignAutoConfiguration { @@ -139,8 +140,9 @@ public class FeignAutoConfiguration {
.setConnectTimeout(httpClientProperties.getConnectionTimeout())
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
.build();
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
httpClientConnectionManager);
this.httpClient = httpClientFactory.createBuilder().
setConnectionManager(httpClientConnectionManager).
setDefaultRequestConfig(defaultRequestConfig).build();
return this.httpClient;
}
@ -162,6 +164,7 @@ public class FeignAutoConfiguration { @@ -162,6 +164,7 @@ public class FeignAutoConfiguration {
@Configuration
@ConditionalOnClass(OkHttpClient.class)
@ConditionalOnMissingClass("com.netflix.loadbalancer.ILoadBalancer")
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class)
@ConditionalOnProperty(value = "feign.okhttp.enabled")
protected static class OkHttpFeignConfiguration {
@ -178,15 +181,14 @@ public class FeignAutoConfiguration { @@ -178,15 +181,14 @@ public class FeignAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class)
public okhttp3.OkHttpClient client(OkHttpClientFactory httpClientFactory,
ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) {
Boolean followRedirects = httpClientProperties.isFollowRedirects();
Integer connectTimeout = httpClientProperties.getConnectionTimeout();
//TODO Remove read timeout constant after changing to builder pattern
this.okHttpClient = httpClientFactory.create(false, connectTimeout, TimeUnit.MILLISECONDS,
followRedirects, 2000, TimeUnit.MILLISECONDS, connectionPool, null,
null);
this.okHttpClient = httpClientFactory.createBuilder(false).
connectTimeout(connectTimeout, TimeUnit.MILLISECONDS).
followRedirects(followRedirects).
connectionPool(connectionPool).build();
return this.okHttpClient;
}

60
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java

@ -100,8 +100,8 @@ public class FeignRibbonClientAutoConfiguration { @@ -100,8 +100,8 @@ public class FeignRibbonClientAutoConfiguration {
@Configuration
@ConditionalOnClass(ApacheHttpClient.class)
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
protected static class HttpClientFeignLoadBalancedConfiguration {
@ConditionalOnMissingBean(CloseableHttpClient.class)
protected static class HttpClientFeignConfiguration {
private final Timer connectionManagerTimer = new Timer(
"FeignApacheHttpClientConfiguration.connectionManagerTimer", true);
@ -130,27 +130,19 @@ public class FeignRibbonClientAutoConfiguration { @@ -130,27 +130,19 @@ public class FeignRibbonClientAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean(CloseableHttpClient.class)
public CloseableHttpClient httpClient(ApacheHttpClientFactory httpClientFactory,
HttpClientConnectionManager httpClientConnectionManager,
FeignHttpClientProperties httpClientProperties) {
HttpClientConnectionManager httpClientConnectionManager,
FeignHttpClientProperties httpClientProperties) {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(httpClientProperties.getConnectionTimeout())
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
.build();
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
httpClientConnectionManager);
this.httpClient = httpClientFactory.createBuilder().
setDefaultRequestConfig(defaultRequestConfig).
setConnectionManager(httpClientConnectionManager).build();
return this.httpClient;
}
@Bean
@ConditionalOnMissingBean(Client.class)
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory, HttpClient httpClient) {
ApacheHttpClient delegate = new ApacheHttpClient(httpClient);
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory);
}
@PreDestroy
public void destroy() throws Exception {
connectionManagerTimer.cancel();
@ -160,11 +152,26 @@ public class FeignRibbonClientAutoConfiguration { @@ -160,11 +152,26 @@ public class FeignRibbonClientAutoConfiguration {
}
}
@Configuration
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
@ConditionalOnClass(ApacheHttpClient.class)
protected static class HttpClientFeignLoadBalancedConfiguration {
@Bean
@ConditionalOnMissingBean(Client.class)
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory, HttpClient httpClient) {
ApacheHttpClient delegate = new ApacheHttpClient(httpClient);
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory);
}
}
@Configuration
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class)
@ConditionalOnClass(OkHttpClient.class)
@ConditionalOnProperty(value = "feign.okhttp.enabled")
protected static class OkHttpFeignLoadBalancedConfiguration {
protected static class OkHttpFeignConfiguration {
private okhttp3.OkHttpClient okHttpClient;
@Bean
@ -178,15 +185,14 @@ public class FeignRibbonClientAutoConfiguration { @@ -178,15 +185,14 @@ public class FeignRibbonClientAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean(okhttp3.OkHttpClient.class)
public okhttp3.OkHttpClient client(OkHttpClientFactory httpClientFactory,
ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) {
Boolean followRedirects = httpClientProperties.isFollowRedirects();
Integer connectTimeout = httpClientProperties.getConnectionTimeout();
this.okHttpClient = httpClientFactory.create(false, connectTimeout, TimeUnit.MILLISECONDS,
//TODO Remove read timeout constant after changing to builder pattern
followRedirects, 2000, TimeUnit.MILLISECONDS, connectionPool, null,
null);
this.okHttpClient = httpClientFactory.createBuilder(false).
connectTimeout(connectTimeout, TimeUnit.MILLISECONDS).
followRedirects(followRedirects).
connectionPool(connectionPool).build();
return this.okHttpClient;
}
@ -197,12 +203,18 @@ public class FeignRibbonClientAutoConfiguration { @@ -197,12 +203,18 @@ public class FeignRibbonClientAutoConfiguration {
okHttpClient.connectionPool().evictAll();
}
}
}
@Configuration
@ConditionalOnClass(OkHttpClient.class)
@ConditionalOnProperty(value = "feign.okhttp.enabled")
protected static class OkHttpFeignLoadBalancedConfiguration {
@Bean
@ConditionalOnMissingBean(Client.class)
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) {
OkHttpClient delegate = new OkHttpClient(this.okHttpClient);
SpringClientFactory clientFactory, okhttp3.OkHttpClient okHttpClient) {
OkHttpClient delegate = new OkHttpClient(okHttpClient);
return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory);
}
}

26
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java

@ -35,6 +35,8 @@ import org.apache.http.conn.HttpClientConnectionManager; @@ -35,6 +35,8 @@ import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
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.condition.ConditionalOnMissingClass;
@ -141,7 +143,7 @@ public class RibbonClientConfiguration { @@ -141,7 +143,7 @@ public class RibbonClientConfiguration {
}
@Configuration
@ConditionalOnProperty(name = "spring.cloud.httpclient.apache.enable", matchIfMissing = true)
@ConditionalOnProperty(name = "ribbon.httpclient.enabled", matchIfMissing = true)
protected static class ApacheHttpClientConfiguration {
private final Timer connectionManagerTimer = new Timer(
"RibbonApacheHttpClientConfiguration.connectionManagerTimer", true);
@ -154,8 +156,7 @@ public class RibbonClientConfiguration { @@ -154,8 +156,7 @@ public class RibbonClientConfiguration {
@ConditionalOnMissingBean(HttpClientConnectionManager.class)
public HttpClientConnectionManager httpClientConnectionManager(
IClientConfig config,
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
ApacheHttpClientFactory httpClientFactory) {
ApacheHttpClientConnectionManagerFactory connectionManagerFactory) {
Integer maxTotalConnections = config.getPropertyAsInteger(
CommonClientConfigKey.MaxTotalConnections,
DefaultClientConfigImpl.DEFAULT_MAX_TOTAL_CONNECTIONS);
@ -202,8 +203,9 @@ public class RibbonClientConfiguration { @@ -202,8 +203,9 @@ public class RibbonClientConfiguration {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setRedirectsEnabled(followRedirects).build();
this.httpClient = httpClientFactory.createClient(defaultRequestConfig,
connectionManager);
this.httpClient = httpClientFactory.createBuilder().
setDefaultRequestConfig(defaultRequestConfig).
setConnectionManager(connectionManager).build();
return httpClient;
}
@ -217,7 +219,7 @@ public class RibbonClientConfiguration { @@ -217,7 +219,7 @@ public class RibbonClientConfiguration {
}
@Configuration
@ConditionalOnProperty("spring.cloud.httpclient.ok.enabled")
@ConditionalOnProperty(value = {"ribbon.okhttp.enabled"})
@ConditionalOnClass(name = "okhttp3.OkHttpClient")
protected static class OkHttpClientConfiguration {
private OkHttpClient httpClient;
@ -256,9 +258,11 @@ public class RibbonClientConfiguration { @@ -256,9 +258,11 @@ public class RibbonClientConfiguration {
DefaultClientConfigImpl.DEFAULT_CONNECT_TIMEOUT);
Integer readTimeout = config.getPropertyAsInteger(CommonClientConfigKey.ReadTimeout,
DefaultClientConfigImpl.DEFAULT_READ_TIMEOUT);
this.httpClient = httpClientFactory.create(false, connectTimeout, TimeUnit.MILLISECONDS,
followRedirects, readTimeout, TimeUnit.MILLISECONDS, connectionPool, null,
null);
this.httpClient = httpClientFactory.createBuilder(false).
connectTimeout(connectTimeout, TimeUnit.MILLISECONDS).
readTimeout(readTimeout, TimeUnit.MILLISECONDS).
followRedirects(followRedirects).
connectionPool(connectionPool).build();
return this.httpClient;
}
@ -272,7 +276,7 @@ public class RibbonClientConfiguration { @@ -272,7 +276,7 @@ public class RibbonClientConfiguration {
}
@Configuration
@ConditionalOnProperty(name = "spring.cloud.httpclient.apache.enable", matchIfMissing = true)
@ConditionalOnProperty(name = "ribbon.httpclient.enabled", matchIfMissing = true)
protected static class HttpClientRibbonConfiguration {
@Value("${ribbon.client.name}")
private String name = "client";
@ -311,7 +315,7 @@ public class RibbonClientConfiguration { @@ -311,7 +315,7 @@ public class RibbonClientConfiguration {
}
@Configuration
@ConditionalOnProperty("spring.cloud.httpclient.ok.enabled")
@ConditionalOnProperty(value = {"ribbon.okhttp.enabled"})
@ConditionalOnClass(name = "okhttp3.OkHttpClient")
protected static class OkHttpRibbonConfiguration {
@Value("${ribbon.client.name}")

4
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RibbonCommandFactoryConfiguration.java

@ -105,7 +105,7 @@ public class RibbonCommandFactoryConfiguration { @@ -105,7 +105,7 @@ public class RibbonCommandFactoryConfiguration {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
@ConditionalOnProperty(name = "spring.cloud.httpclient.apache.enable", matchIfMissing = true)
@ConditionalOnProperty(name = "ribbon.httpclient.enabled", matchIfMissing = true)
static class RibbonProperty {}
}
@ -120,7 +120,7 @@ public class RibbonCommandFactoryConfiguration { @@ -120,7 +120,7 @@ public class RibbonCommandFactoryConfiguration {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
@ConditionalOnProperty("spring.cloud.httpclient.ok.enabled")
@ConditionalOnProperty("ribbon.okhttp.enabled")
static class RibbonProperty {}
}

12
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfiguration.java

@ -19,6 +19,7 @@ package org.springframework.cloud.netflix.zuul; @@ -19,6 +19,7 @@ package org.springframework.cloud.netflix.zuul;
import java.util.Collections;
import java.util.List;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.trace.TraceRepository;
@ -108,7 +109,7 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { @@ -108,7 +109,7 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
}
@Bean
@ConditionalOnMissingBean(SimpleHostRoutingFilter.class)
@ConditionalOnMissingBean({SimpleHostRoutingFilter.class, CloseableHttpClient.class})
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
ZuulProperties zuulProperties,
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
@ -117,6 +118,15 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { @@ -117,6 +118,15 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
connectionManagerFactory, httpClientFactory);
}
@Bean
@ConditionalOnMissingBean({SimpleHostRoutingFilter.class})
public SimpleHostRoutingFilter simpleHostRoutingFilter2(ProxyRequestHelper helper,
ZuulProperties zuulProperties,
CloseableHttpClient httpClient) {
return new SimpleHostRoutingFilter(helper, zuulProperties,
httpClient);
}
@Bean
public ApplicationListener<ApplicationEvent> zuulDiscoveryRefreshRoutesListener() {
return new ZuulDiscoveryRefreshListener();

75
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java

@ -90,26 +90,28 @@ public class SimpleHostRoutingFilter extends ZuulFilter { @@ -90,26 +90,28 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
private ApacheHttpClientFactory httpClientFactory;
private HttpClientConnectionManager connectionManager;
private CloseableHttpClient httpClient;
private boolean customHttpClient = false;
@EventListener
public void onPropertyChange(EnvironmentChangeEvent event) {
boolean createNewClient = false;
if(!customHttpClient) {
boolean createNewClient = false;
for (String key : event.getKeys()) {
if (key.startsWith("zuul.host.")) {
createNewClient = true;
break;
for (String key : event.getKeys()) {
if (key.startsWith("zuul.host.")) {
createNewClient = true;
break;
}
}
}
if (createNewClient) {
try {
SimpleHostRoutingFilter.this.httpClient.close();
}
catch (IOException ex) {
log.error("error closing client", ex);
if (createNewClient) {
try {
SimpleHostRoutingFilter.this.httpClient.close();
} catch (IOException ex) {
log.error("error closing client", ex);
}
SimpleHostRoutingFilter.this.httpClient = newClient();
}
SimpleHostRoutingFilter.this.httpClient = newClient();
}
}
@ -125,24 +127,37 @@ public class SimpleHostRoutingFilter extends ZuulFilter { @@ -125,24 +127,37 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
this.httpClientFactory = httpClientFactory;
}
public SimpleHostRoutingFilter(ProxyRequestHelper helper, ZuulProperties properties,
CloseableHttpClient httpClient) {
this.helper = helper;
this.hostProperties = properties.getHost();
this.sslHostnameValidationEnabled = properties.isSslHostnameValidationEnabled();
this.forceOriginalQueryStringEncoding = properties
.isForceOriginalQueryStringEncoding();
this.httpClient = httpClient;
this.customHttpClient = true;
}
@PostConstruct
private void initialize() {
this.connectionManager = connectionManagerFactory.newConnectionManager(
this.sslHostnameValidationEnabled,
this.hostProperties.getMaxTotalConnections(),
this.hostProperties.getMaxPerRouteConnections(),
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(),
null);
this.httpClient = newClient();
this.connectionManagerTimer.schedule(new TimerTask() {
@Override
public void run() {
if (SimpleHostRoutingFilter.this.connectionManager == null) {
return;
if(!customHttpClient) {
this.connectionManager = connectionManagerFactory.newConnectionManager(
this.sslHostnameValidationEnabled,
this.hostProperties.getMaxTotalConnections(),
this.hostProperties.getMaxPerRouteConnections(),
this.hostProperties.getTimeToLive(), this.hostProperties.getTimeUnit(),
null);
this.httpClient = newClient();
this.connectionManagerTimer.schedule(new TimerTask() {
@Override
public void run() {
if (SimpleHostRoutingFilter.this.connectionManager == null) {
return;
}
SimpleHostRoutingFilter.this.connectionManager.closeExpiredConnections();
}
SimpleHostRoutingFilter.this.connectionManager.closeExpiredConnections();
}
}, 30000, 5000);
}, 30000, 5000);
}
}
@PreDestroy
@ -203,7 +218,9 @@ public class SimpleHostRoutingFilter extends ZuulFilter { @@ -203,7 +218,9 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
.setSocketTimeout(this.hostProperties.getSocketTimeoutMillis())
.setConnectTimeout(this.hostProperties.getConnectTimeoutMillis())
.setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
return httpClientFactory.createClient(requestConfig, this.connectionManager);
return httpClientFactory.createBuilder().
setDefaultRequestConfig(requestConfig).
setConnectionManager(this.connectionManager).build();
}
private CloseableHttpResponse forward(CloseableHttpClient httpclient, String verb,

12
spring-cloud-netflix-core/src/test/java/OkHttpClientConfigurationTests.java

@ -61,7 +61,7 @@ import static org.mockito.Mockito.mockingDetails; @@ -61,7 +61,7 @@ import static org.mockito.Mockito.mockingDetails;
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = OkHttpClientConfigurationTestApp.class, value = {"feign.okhttp.enabled: true",
"spring.cloud.httpclient.ok.enabled: true", "ribbon.eureka.enabled = false"})
"spring.cloud.httpclient.ok.enabled: true", "ribbon.eureka.enabled = false", "ribbon.okhttp.enabled: true"})
@DirtiesContext
public class OkHttpClientConfigurationTests {
@ -118,7 +118,6 @@ public class OkHttpClientConfigurationTests { @@ -118,7 +118,6 @@ public class OkHttpClientConfigurationTests {
@Configuration
@EnableAutoConfiguration
@RestController
//@EnableFeignClients(clients = {})
@EnableZuulProxy
class OkHttpClientConfigurationTestApp {
@ -135,10 +134,6 @@ class OkHttpClientConfigurationTestApp { @@ -135,10 +134,6 @@ class OkHttpClientConfigurationTestApp {
}
static class MyOkHttpClientFactory extends DefaultOkHttpClientFactory {
@Override
public OkHttpClient create(boolean disableSslValidation, long connectTimeout, TimeUnit connectTimeoutUnit, boolean followRedirects, long readTimeout, TimeUnit readTimeoutUnit, ConnectionPool connectionPool, SSLSocketFactory sslSocketFactory, X509TrustManager x509TrustManager) {
return mock(OkHttpClient.class);
}
}
@Configuration
@ -153,6 +148,11 @@ class OkHttpClientConfigurationTestApp { @@ -153,6 +148,11 @@ class OkHttpClientConfigurationTestApp {
return new MyOkHttpClientFactory();
}
@Bean
public OkHttpClient client() {
return mock(OkHttpClient.class);
}
}
@FeignClient(name="foo", serviceId = "foo")

10
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ApacheHttpClientConfigurationTests.java

@ -34,6 +34,7 @@ import org.apache.http.client.methods.HttpUriRequest; @@ -34,6 +34,7 @@ import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.junit.Test;
@ -105,9 +106,6 @@ public class ApacheHttpClientConfigurationTests { @@ -105,9 +106,6 @@ public class ApacheHttpClientConfigurationTests {
@Test
public void testHttpClientSimpleHostRoutingFilter() {
PoolingHttpClientConnectionManager connectionManager = getField(simpleHostRoutingFilter, "connectionManager");
MockingDetails connectionManagerDetails = mockingDetails(connectionManager);
assertTrue(connectionManagerDetails.isMock());
CloseableHttpClient httpClient = getField(simpleHostRoutingFilter, "httpClient");
MockingDetails httpClientDetails = mockingDetails(httpClient);
assertTrue(httpClientDetails.isMock());
@ -164,7 +162,7 @@ class ApacheHttpClientConfigurationTestApp { @@ -164,7 +162,7 @@ class ApacheHttpClientConfigurationTestApp {
static class MyApacheHttpClientFactory extends DefaultApacheHttpClientFactory {
@Override
public CloseableHttpClient createClient(RequestConfig requestConfig, HttpClientConnectionManager connectionManager) {
public HttpClientBuilder createBuilder() {
CloseableHttpClient client = mock(CloseableHttpClient.class);
CloseableHttpResponse response = mock(CloseableHttpResponse.class);
StatusLine statusLine = mock(StatusLine.class);
@ -177,7 +175,9 @@ class ApacheHttpClientConfigurationTestApp { @@ -177,7 +175,9 @@ class ApacheHttpClientConfigurationTestApp {
} catch (IOException e) {
e.printStackTrace();
}
return client;
HttpClientBuilder builder = mock(HttpClientBuilder.class);
doReturn(client).when(builder).build();
return builder;
}
}

2
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignHttpClientUrlTests.java

@ -58,7 +58,7 @@ import lombok.NoArgsConstructor; @@ -58,7 +58,7 @@ import lombok.NoArgsConstructor;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = FeignHttpClientUrlTests.TestConfig.class, webEnvironment = WebEnvironment.DEFINED_PORT, value = {
"spring.application.name=feignclienturltest", "feign.hystrix.enabled=false",
"feign.okhttp.enabled=false" })
"spring.cloud.httpclient.ok.enabled=false" })
@DirtiesContext
public class FeignHttpClientUrlTests {

4
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationTests.java

@ -152,7 +152,7 @@ public class RibbonClientConfigurationTests { @@ -152,7 +152,7 @@ public class RibbonClientConfigurationTests {
@Test
public void testDefaultsToApacheHttpClient() {
testClient(RibbonLoadBalancingHttpClient.class, null, RestClient.class, OkHttpLoadBalancingClient.class);
testClient(RibbonLoadBalancingHttpClient.class, new String[]{"spring.cloud.httpclient.apache.enable"}, RestClient.class, OkHttpLoadBalancingClient.class);
testClient(RibbonLoadBalancingHttpClient.class, new String[]{"ribbon.httpclient.enabled"}, RestClient.class, OkHttpLoadBalancingClient.class);
}
@Test
@ -163,7 +163,7 @@ public class RibbonClientConfigurationTests { @@ -163,7 +163,7 @@ public class RibbonClientConfigurationTests {
@Test
public void testEnableOkHttpClient() {
testClient(OkHttpLoadBalancingClient.class, new String[]{"spring.cloud.httpclient.ok.enabled"}, RibbonLoadBalancingHttpClient.class,
testClient(OkHttpLoadBalancingClient.class, new String[]{"ribbon.okhttp.enabled"}, RibbonLoadBalancingHttpClient.class,
RestClient.class);
}

3
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorPropertiesOverridesIntegrationTests.java

@ -26,6 +26,7 @@ import org.junit.runner.RunWith; @@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.commons.httpclient.HttpClientConfiguration;
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration;
import org.springframework.cloud.netflix.ribbon.test.TestLoadBalancer;
@ -102,7 +103,7 @@ public class RibbonClientPreprocessorPropertiesOverridesIntegrationTests { @@ -102,7 +103,7 @@ public class RibbonClientPreprocessorPropertiesOverridesIntegrationTests {
@Configuration
@RibbonClients
@Import({ UtilAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class,
@Import({ UtilAutoConfiguration.class, HttpClientConfiguration.class, PropertyPlaceholderAutoConfiguration.class,
ArchaiusAutoConfiguration.class, RibbonAutoConfiguration.class })
protected static class TestConfiguration {
}

3
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java

@ -31,6 +31,7 @@ import org.junit.Before; @@ -31,6 +31,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory;
import org.springframework.cloud.commons.httpclient.HttpClientConfiguration;
import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancedRetryPolicy;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancedRetryPolicyFactory;
@ -437,7 +438,7 @@ public class RibbonLoadBalancingHttpClientTests { @@ -437,7 +438,7 @@ public class RibbonLoadBalancingHttpClientTests {
IClientConfig configOverride, SpringClientFactory factory)
throws Exception {
factory.setApplicationContext(new AnnotationConfigApplicationContext(
factory.setApplicationContext(new AnnotationConfigApplicationContext(HttpClientConfiguration.class,
RibbonAutoConfiguration.class, defaultConfigurationClass));
String serviceName = "foo";
String host = serviceName;

2
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/okhttp/SpringRetryDisableOkHttpClientTests.java

@ -46,7 +46,7 @@ public class SpringRetryDisableOkHttpClientTests { @@ -46,7 +46,7 @@ public class SpringRetryDisableOkHttpClientTests {
@Before
public void setUp() {
context = new SpringApplicationBuilder().web(false)
.properties("spring.cloud.httpclient.ok.enabled=true")
.properties("ribbon.okhttp.enabled=true")
.sources(RibbonAutoConfiguration.class,
LoadBalancerAutoConfiguration.class,
HttpClientConfiguration.class,

2
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/okhttp/SpringRetryEnabledOkHttpClientTests.java

@ -39,7 +39,7 @@ import static org.hamcrest.Matchers.instanceOf; @@ -39,7 +39,7 @@ import static org.hamcrest.Matchers.instanceOf;
* @author Ryan Baxter
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(value = { "spring.cloud.httpclient.ok.enabled: true" })
@SpringBootTest(value = { "ribbon.okhttp.enabled: true", "ribbon.httpclient.enabled: false" })
@ContextConfiguration(classes = { RibbonAutoConfiguration.class,
HttpClientConfiguration.class, RibbonClientConfiguration.class,
LoadBalancerAutoConfiguration.class })

4
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfigurationTests.java

@ -43,7 +43,7 @@ public class ZuulProxyConfigurationTests { @@ -43,7 +43,7 @@ public class ZuulProxyConfigurationTests {
@Test
public void testDefaultsToApacheHttpClient() {
testClient(HttpClientRibbonCommandFactory.class, null);
testClient(HttpClientRibbonCommandFactory.class, "spring.cloud.httpclient.apache.enable=true");
testClient(HttpClientRibbonCommandFactory.class, "ribbon.httpclient.enabled=true");
}
@Test
@ -53,7 +53,7 @@ public class ZuulProxyConfigurationTests { @@ -53,7 +53,7 @@ public class ZuulProxyConfigurationTests {
@Test
public void testEnableOkHttpClient() {
testClient(OkHttpRibbonCommandFactory.class, "spring.cloud.httpclient.ok.enabled=true");
testClient(OkHttpRibbonCommandFactory.class, "ribbon.okhttp.enabled=true");
}
void testClient(Class<?> clientType, String property) {

45
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java

@ -26,7 +26,9 @@ import org.apache.http.client.config.RequestConfig; @@ -26,7 +26,9 @@ import org.apache.http.client.config.RequestConfig;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -35,6 +37,7 @@ import org.junit.runner.RunWith; @@ -35,6 +37,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@ -42,6 +45,7 @@ import org.springframework.boot.test.web.client.TestRestTemplate; @@ -42,6 +45,7 @@ import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.cloud.commons.httpclient.ApacheHttpClientConnectionManagerFactory;
import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
import org.springframework.cloud.commons.httpclient.DefaultApacheHttpClientFactory;
import org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.netflix.zuul.RoutesMvcEndpoint;
import org.springframework.cloud.netflix.zuul.filters.discovery.DiscoveryClientRouteLocator;
@ -212,6 +216,7 @@ class SampleCustomZuulProxyApplication { @@ -212,6 +216,7 @@ class SampleCustomZuulProxyApplication {
@Configuration
@EnableZuulProxy
@AutoConfigureBefore({FeignRibbonClientAutoConfiguration.class})
protected static class CustomZuulProxyConfig {
@Bean
@ -219,18 +224,25 @@ class SampleCustomZuulProxyApplication { @@ -219,18 +224,25 @@ class SampleCustomZuulProxyApplication {
return new CustomApacheHttpClientFactory();
}
@Bean
public CloseableHttpClient closeableClient() {
return HttpClients.custom()
.setDefaultCookieStore(new BasicCookieStore())
.setDefaultRequestConfig(RequestConfig.custom()
.setCookieSpec(CookieSpecs.DEFAULT).build())
.build();
}
@Bean
public SimpleHostRoutingFilter simpleHostRoutingFilter(ProxyRequestHelper helper,
ZuulProperties zuulProperties, ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
ApacheHttpClientFactory httpClientFactory) {
return new CustomHostRoutingFilter(helper, zuulProperties, connectionManagerFactory, httpClientFactory);
ZuulProperties zuulProperties, CloseableHttpClient httpClient) {
return new CustomHostRoutingFilter(helper, zuulProperties, httpClient);
}
private class CustomHostRoutingFilter extends SimpleHostRoutingFilter {
public CustomHostRoutingFilter(ProxyRequestHelper helper,
ZuulProperties zuulProperties, ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
ApacheHttpClientFactory httpClientFactory) {
super(helper, zuulProperties, connectionManagerFactory, httpClientFactory);
ZuulProperties zuulProperties, CloseableHttpClient httpClient) {
super(helper, zuulProperties, httpClient);
}
@Override
@ -242,14 +254,19 @@ class SampleCustomZuulProxyApplication { @@ -242,14 +254,19 @@ class SampleCustomZuulProxyApplication {
private class CustomApacheHttpClientFactory extends DefaultApacheHttpClientFactory {
@Override
public CloseableHttpClient createClient(RequestConfig requestConfig, HttpClientConnectionManager connectionManager) {
return HttpClients.custom().setConnectionManager(connectionManager)
.setDefaultCookieStore(new BasicCookieStore())
.setDefaultRequestConfig(RequestConfig.custom()
.setCookieSpec(CookieSpecs.DEFAULT).build())
.build();
}
//@Override
//public HttpClientBuilder createBuilder() {
// return HttpClients.custom()
// .setDefaultCookieStore(new BasicCookieStore())
// .setDefaultRequestConfig(RequestConfig.custom()
// .setCookieSpec(CookieSpecs.DEFAULT).build());
//}public CloseableHttpClient createClient(RequestConfig requestConfig, HttpClientConnectionManager connectionManager) {
// return HttpClients.custom().setConnectionManager(connectionManager)
// .setDefaultCookieStore(new BasicCookieStore())
// .setDefaultRequestConfig(RequestConfig.custom()
// .setCookieSpec(CookieSpecs.DEFAULT).build())
// .build();
// }
}
}

4
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonRetryIntegrationTests.java

@ -30,6 +30,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -30,6 +30,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RibbonRetryIntegrationTestBase.RetryableTestConfig.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, value = {
"zuul.retryable: false", /* Disable retry by default, have each route enable it */
"ribbon.okhttp.enabled",
"hystrix.command.default.execution.timeout.enabled: false", /* Disable hystrix so its timeout doesnt get in the way */
"ribbon.ReadTimeout: 1000", /* Make sure ribbon will timeout before the thread is done sleeping */
"zuul.routes.retryable: /retryable/**",
@ -48,8 +49,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -48,8 +49,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
"disableretry.ribbon.MaxAutoRetriesNextServer: 1",
"zuul.routes.globalretrydisabled: /globalretrydisabled/**",
"globalretrydisabled.ribbon.MaxAutoRetries: 1",
"globalretrydisabled.ribbon.MaxAutoRetriesNextServer: 1",
"spring.cloud.httpclient.ok.enabled: true"
"globalretrydisabled.ribbon.MaxAutoRetriesNextServer: 1"
})
@DirtiesContext
public class OkHttpRibbonRetryIntegrationTests extends RibbonRetryIntegrationTestBase {

Loading…
Cancel
Save