From a13db33b28679edcf5f75f3077e54d558b558e1d Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Thu, 9 Jan 2025 12:00:38 +0100 Subject: [PATCH] Move away from ObjectProvider. Add test. Signed-off-by: Olga Maciaszek-Sharma --- .../netflix/eureka/EurekaClientTests.java | 6 ++-- ...coveryClientOptionalArgsConfiguration.java | 11 +++++--- ...ekaConfigServerBootstrapConfiguration.java | 13 +++++---- .../EurekaConfigServerBootstrapper.java | 3 +- ...urekaClientHttpRequestFactorySupplier.java | 28 ++++++++----------- .../http/EurekaServerMockApplication.java | 6 ++-- .../http/RestClientEurekaHttpClientTests.java | 23 ++++++--------- ...RestClientTransportClientFactoryTests.java | 4 ++- 8 files changed, 46 insertions(+), 48 deletions(-) diff --git a/spring-cloud-netflix-eureka-client-tls-tests/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientTests.java b/spring-cloud-netflix-eureka-client-tls-tests/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientTests.java index 48ba2da0c..a762f28fe 100644 --- a/spring-cloud-netflix-eureka-client-tls-tests/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientTests.java +++ b/spring-cloud-netflix-eureka-client-tls-tests/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientTests.java @@ -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())); } } diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java index 355f7888e..5e86b1f0b 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java @@ -95,8 +95,10 @@ public class DiscoveryClientOptionalArgsConfiguration { @Bean @ConditionalOnMissingBean EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier( - RestTemplateTimeoutProperties restTemplateTimeoutProperties) { - return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties); + RestTemplateTimeoutProperties restTemplateTimeoutProperties, + Set requestConfigCustomizers) { + return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties, + requestConfigCustomizers); } @Bean @@ -191,8 +193,9 @@ public class DiscoveryClientOptionalArgsConfiguration { @ConditionalOnMissingBean EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier( RestClientTimeoutProperties restClientTimeoutProperties, - ObjectProvider> requestConfigCustomizers) { - return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers); + Set requestConfigCustomizers) { + return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, + requestConfigCustomizers); } @Bean diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.java index 8983580a1..52f7882e9 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.java @@ -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 requestConfigCustomizers) { + return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties, + requestConfigCustomizers); } /** @@ -177,8 +179,9 @@ public class EurekaConfigServerBootstrapConfiguration { @ConditionalOnMissingBean EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier( RestClientTimeoutProperties restClientTimeoutProperties, - ObjectProvider> requestConfigCustomizers) { - return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers); + Set requestConfigCustomizers) { + return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, + requestConfigCustomizers); } static class OnRestClientPresentAndEnabledCondition extends AllNestedConditions { diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapper.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapper.java index 0c2baf860..59de877ae 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapper.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapper.java @@ -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; }); diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/DefaultEurekaClientHttpRequestFactorySupplier.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/DefaultEurekaClientHttpRequestFactorySupplier.java index 98dfdaab6..912ba4cc8 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/DefaultEurekaClientHttpRequestFactorySupplier.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/DefaultEurekaClientHttpRequestFactorySupplier.java @@ -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> requestConfigCustomizers; + private Set 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> requestConfigCustomizers) { + Set 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(); } diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java index 9e5018659..827bfb1cd 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/EurekaServerMockApplication.java @@ -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(); diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientEurekaHttpClientTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientEurekaHttpClientTests.java index e2880a711..a4d1527b2 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientEurekaHttpClientTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientEurekaHttpClientTests.java @@ -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 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 customizers) { + return new RestClientTransportClientFactory(Optional.empty(), Optional.empty(), + new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(), customizers), + RestClient::builder) + .newClient(new DefaultEndpoint(serviceUrl)); + } } diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientTransportClientFactoryTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientTransportClientFactoryTests.java index 067b272c0..f396ad7e4 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientTransportClientFactoryTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/http/RestClientTransportClientFactoryTests.java @@ -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); }