Move away from ObjectProvider. Add test.
Signed-off-by: Olga Maciaszek-Sharma <olga.maciaszek-sharma@broadcom.com>
This commit is contained in:
committed by
Olga Maciaszek-Sharma
parent
f6c6720c5a
commit
a13db33b28
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.cloud.netflix.eureka;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
@@ -64,8 +66,8 @@ public class EurekaClientTests extends BaseCertTests {
|
||||
|
||||
@Bean
|
||||
public RestTemplateDiscoveryClientOptionalArgs discoveryClientOptionalArgs() {
|
||||
return new RestTemplateDiscoveryClientOptionalArgs(
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestTemplateTimeoutProperties()), null);
|
||||
return new RestTemplateDiscoveryClientOptionalArgs(new DefaultEurekaClientHttpRequestFactorySupplier(
|
||||
new RestTemplateTimeoutProperties(), Collections.emptySet()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -95,8 +95,10 @@ public class DiscoveryClientOptionalArgsConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestTemplateTimeoutProperties restTemplateTimeoutProperties) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties);
|
||||
RestTemplateTimeoutProperties restTemplateTimeoutProperties,
|
||||
Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties,
|
||||
requestConfigCustomizers);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -191,8 +193,9 @@ public class DiscoveryClientOptionalArgsConfiguration {
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestClientTimeoutProperties restClientTimeoutProperties,
|
||||
ObjectProvider<Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer>> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers);
|
||||
Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties,
|
||||
requestConfigCustomizers);
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -56,7 +56,7 @@ import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.reactive.function.client.WebClient;
|
||||
|
||||
/**
|
||||
* Bootstrap configuration for config client that wants to lookup the config server via
|
||||
* Bootstrap configuration for config client that wants to look the config server up via
|
||||
* discovery.
|
||||
*
|
||||
* @author Dave Syer
|
||||
@@ -105,8 +105,10 @@ public class EurekaConfigServerBootstrapConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestTemplateTimeoutProperties restTemplateTimeoutProperties) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties);
|
||||
RestTemplateTimeoutProperties restTemplateTimeoutProperties,
|
||||
Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties,
|
||||
requestConfigCustomizers);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,8 +179,9 @@ public class EurekaConfigServerBootstrapConfiguration {
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestClientTimeoutProperties restClientTimeoutProperties,
|
||||
ObjectProvider<Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer>> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers);
|
||||
Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties,
|
||||
requestConfigCustomizers);
|
||||
}
|
||||
|
||||
static class OnRestClientPresentAndEnabledCondition extends AllNestedConditions {
|
||||
|
||||
@@ -61,7 +61,8 @@ public class EurekaConfigServerBootstrapper implements BootstrapRegistryInitiali
|
||||
EurekaHttpClient httpClient = new RestClientTransportClientFactory(
|
||||
context.getOrElse(TlsProperties.class, null),
|
||||
context.getOrElse(EurekaClientHttpRequestFactorySupplier.class,
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(), null)))
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(),
|
||||
Collections.emptySet())))
|
||||
.newClient(HostnameBasedUrlRandomizer.randomEndpoint(config, getPropertyResolver(context)));
|
||||
return new EurekaConfigServerInstanceProvider(httpClient, config)::getInstances;
|
||||
});
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.springframework.cloud.netflix.eureka.http;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -35,7 +34,6 @@ import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
|
||||
import org.apache.hc.core5.http.io.SocketConfig;
|
||||
import org.apache.hc.core5.util.Timeout;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.cloud.netflix.eureka.RestTemplateTimeoutProperties;
|
||||
import org.springframework.cloud.netflix.eureka.TimeoutProperties;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
@@ -54,12 +52,13 @@ import org.springframework.lang.Nullable;
|
||||
public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClientHttpRequestFactorySupplier {
|
||||
|
||||
private final TimeoutProperties timeoutProperties;
|
||||
|
||||
// TODO: switch to final after removing deprecated interfaces
|
||||
private ObjectProvider<Set<RequestConfigCustomizer>> requestConfigCustomizers;
|
||||
private Set<RequestConfigCustomizer> requestConfigCustomizers = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, ObjectProvider)}
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, Set)}
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public DefaultEurekaClientHttpRequestFactorySupplier() {
|
||||
@@ -68,7 +67,7 @@ public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClie
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, ObjectProvider)}
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, Set)}
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public DefaultEurekaClientHttpRequestFactorySupplier(RestTemplateTimeoutProperties timeoutProperties) {
|
||||
@@ -77,7 +76,7 @@ public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClie
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, ObjectProvider)}
|
||||
* {@link DefaultEurekaClientHttpRequestFactorySupplier#DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties, Set)}
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties timeoutProperties) {
|
||||
@@ -85,7 +84,7 @@ public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClie
|
||||
}
|
||||
|
||||
public DefaultEurekaClientHttpRequestFactorySupplier(TimeoutProperties timeoutProperties,
|
||||
ObjectProvider<Set<RequestConfigCustomizer>> requestConfigCustomizers) {
|
||||
Set<RequestConfigCustomizer> requestConfigCustomizers) {
|
||||
this.timeoutProperties = timeoutProperties;
|
||||
this.requestConfigCustomizers = requestConfigCustomizers;
|
||||
}
|
||||
@@ -120,12 +119,11 @@ public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClie
|
||||
connectionManagerBuilder.setSSLSocketFactory(sslConnectionSocketFactoryBuilder.build());
|
||||
if (timeoutProperties != null) {
|
||||
connectionManagerBuilder.setDefaultSocketConfig(SocketConfig.custom()
|
||||
.setSoTimeout(Timeout.of(timeoutProperties.getSocketTimeout(), TimeUnit.MILLISECONDS))
|
||||
.setSoTimeout(Timeout.of(timeoutProperties.getSocketTimeout(), TimeUnit.MILLISECONDS))
|
||||
.build());
|
||||
connectionManagerBuilder.setDefaultConnectionConfig(ConnectionConfig.custom()
|
||||
.setConnectTimeout(Timeout.of(timeoutProperties.getConnectTimeout(), TimeUnit.MILLISECONDS))
|
||||
.build());
|
||||
connectionManagerBuilder.setDefaultConnectionConfig(ConnectionConfig.custom().
|
||||
setConnectTimeout(Timeout.of(timeoutProperties.getConnectTimeout(),
|
||||
TimeUnit.MILLISECONDS)).build()
|
||||
);
|
||||
}
|
||||
return connectionManagerBuilder.build();
|
||||
}
|
||||
@@ -136,11 +134,7 @@ public class DefaultEurekaClientHttpRequestFactorySupplier implements EurekaClie
|
||||
requestConfigBuilder.setConnectionRequestTimeout(
|
||||
Timeout.of(timeoutProperties.getConnectRequestTimeout(), TimeUnit.MILLISECONDS));
|
||||
}
|
||||
Optional.ofNullable(requestConfigCustomizers).ifPresent(
|
||||
requestConfigCustomizers ->
|
||||
requestConfigCustomizers
|
||||
.getIfAvailable(Collections::emptySet)
|
||||
.forEach(customizer -> customizer.customize(requestConfigBuilder)));
|
||||
requestConfigCustomizers.forEach(customizer -> customizer.customize(requestConfigBuilder));
|
||||
return requestConfigBuilder.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.netflix.appinfo.LeaseInfo;
|
||||
import com.netflix.appinfo.MyDataCenterInfo;
|
||||
import com.netflix.discovery.shared.Application;
|
||||
import com.netflix.discovery.shared.Applications;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -175,10 +174,9 @@ public class EurekaServerMockApplication {
|
||||
}
|
||||
|
||||
@GetMapping("/apps/{appName}")
|
||||
public Application getApplication(@PathVariable String appName,
|
||||
@RequestHeader HttpHeaders headers) {
|
||||
public Application getApplication(@PathVariable String appName, @RequestHeader HttpHeaders headers) {
|
||||
// Used to verify that RequestConfig customizer has taken effect
|
||||
if (!headers.containsKey("upgrade")) {
|
||||
if (appName.equals("upgrade") && !headers.containsKey("upgrade")) {
|
||||
throw new RuntimeException("No upgrade header found");
|
||||
}
|
||||
return new Application();
|
||||
|
||||
@@ -31,7 +31,6 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.cloud.commons.util.InetUtils;
|
||||
import org.springframework.cloud.loadbalancer.support.SimpleObjectProvider;
|
||||
import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
|
||||
import org.springframework.cloud.netflix.eureka.RestClientTimeoutProperties;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
@@ -80,22 +79,18 @@ class RestClientEurekaHttpClientTests extends AbstractEurekaHttpClientTests {
|
||||
return buildEurekaHttpClient(Collections.emptySet());
|
||||
}
|
||||
|
||||
private EurekaHttpClient buildEurekaHttpClient(Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> customizers) {
|
||||
return new RestClientTransportClientFactory(Optional.empty(), Optional.empty(),
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(),
|
||||
new SimpleObjectProvider<>(customizers)),
|
||||
RestClient::builder)
|
||||
.newClient(new DefaultEndpoint(serviceUrl));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCustomiseHttpClientRequestConfig() {
|
||||
eurekaHttpClient = buildEurekaHttpClient(Set.of(builder ->
|
||||
builder.setProtocolUpgradeEnabled(false)));
|
||||
assertThatExceptionOfType(RuntimeException.class)
|
||||
.isThrownBy(() -> eurekaHttpClient.getApplication("test"));
|
||||
eurekaHttpClient = buildEurekaHttpClient(Set.of(builder -> builder.setProtocolUpgradeEnabled(false)));
|
||||
assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> eurekaHttpClient.getApplication("upgrade"));
|
||||
}
|
||||
|
||||
|
||||
private EurekaHttpClient buildEurekaHttpClient(
|
||||
Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer> customizers) {
|
||||
return new RestClientTransportClientFactory(Optional.empty(), Optional.empty(),
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(), customizers),
|
||||
RestClient::builder)
|
||||
.newClient(new DefaultEndpoint(serviceUrl));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.cloud.netflix.eureka.http;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.netflix.discovery.shared.resolver.DefaultEndpoint;
|
||||
@@ -42,7 +43,8 @@ class RestClientTransportClientFactoryTests {
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
transportClientFactory = new RestClientTransportClientFactory(Optional.empty(), Optional.empty(),
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties()),
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(),
|
||||
Collections.emptySet()),
|
||||
RestClient::builder);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user