Use customiserw while creating EurekaClientHttpRequestFactorySupplier beans. Add tests.
Signed-off-by: Olga Maciaszek-Sharma <olga.maciaszek-sharma@broadcom.com>
This commit is contained in:
committed by
Olga Maciaszek-Sharma
parent
8e3a33de29
commit
f6c6720c5a
@@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.eureka.config;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.util.Set;
|
||||
|
||||
import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
|
||||
import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
|
||||
@@ -189,8 +190,9 @@ public class DiscoveryClientOptionalArgsConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestClientTimeoutProperties restClientTimeoutProperties) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties);
|
||||
RestClientTimeoutProperties restClientTimeoutProperties,
|
||||
ObjectProvider<Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer>> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers);
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.cloud.netflix.eureka.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.netflix.discovery.EurekaClientConfig;
|
||||
import com.netflix.discovery.shared.transport.EurekaHttpClient;
|
||||
|
||||
@@ -174,8 +176,9 @@ public class EurekaConfigServerBootstrapConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
|
||||
RestClientTimeoutProperties restClientTimeoutProperties) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties);
|
||||
RestClientTimeoutProperties restClientTimeoutProperties,
|
||||
ObjectProvider<Set<EurekaClientHttpRequestFactorySupplier.RequestConfigCustomizer>> requestConfigCustomizers) {
|
||||
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties, requestConfigCustomizers);
|
||||
}
|
||||
|
||||
static class OnRestClientPresentAndEnabledCondition extends AllNestedConditions {
|
||||
|
||||
@@ -61,7 +61,7 @@ public class EurekaConfigServerBootstrapper implements BootstrapRegistryInitiali
|
||||
EurekaHttpClient httpClient = new RestClientTransportClientFactory(
|
||||
context.getOrElse(TlsProperties.class, null),
|
||||
context.getOrElse(EurekaClientHttpRequestFactorySupplier.class,
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties())))
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties(), null)))
|
||||
.newClient(HostnameBasedUrlRandomizer.randomEndpoint(config, getPropertyResolver(context)));
|
||||
return new EurekaConfigServerInstanceProvider(httpClient, config)::getInstances;
|
||||
});
|
||||
|
||||
@@ -25,12 +25,14 @@ 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;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
@@ -45,6 +47,7 @@ import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
@@ -172,7 +175,12 @@ public class EurekaServerMockApplication {
|
||||
}
|
||||
|
||||
@GetMapping("/apps/{appName}")
|
||||
public Application getApplication(@PathVariable String appName) {
|
||||
public Application getApplication(@PathVariable String appName,
|
||||
@RequestHeader HttpHeaders headers) {
|
||||
// Used to verify that RequestConfig customizer has taken effect
|
||||
if (!headers.containsKey("upgrade")) {
|
||||
throw new RuntimeException("No upgrade header found");
|
||||
}
|
||||
return new Application();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,22 +16,29 @@
|
||||
|
||||
package org.springframework.cloud.netflix.eureka.http;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
|
||||
import com.netflix.discovery.shared.resolver.DefaultEndpoint;
|
||||
import com.netflix.discovery.shared.transport.EurekaHttpClient;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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;
|
||||
import org.springframework.web.client.RestClient;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType;
|
||||
|
||||
/**
|
||||
* Tests for {@link RestClientEurekaHttpClient}.
|
||||
*
|
||||
@@ -53,13 +60,9 @@ class RestClientEurekaHttpClientTests extends AbstractEurekaHttpClientTests {
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
eurekaHttpClient = new RestClientTransportClientFactory(Optional.empty(), Optional.empty(),
|
||||
new DefaultEurekaClientHttpRequestFactorySupplier(new RestClientTimeoutProperties()),
|
||||
RestClient::builder)
|
||||
.newClient(new DefaultEndpoint(serviceUrl));
|
||||
eurekaHttpClient = buildEurekaHttpClient();
|
||||
|
||||
EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
|
||||
|
||||
String appname = "customapp";
|
||||
config.setIpAddress("127.0.0.1");
|
||||
config.setHostname("localhost");
|
||||
@@ -73,4 +76,26 @@ class RestClientEurekaHttpClientTests extends AbstractEurekaHttpClientTests {
|
||||
info = new EurekaConfigBasedInstanceInfoProvider(config).get();
|
||||
}
|
||||
|
||||
private EurekaHttpClient buildEurekaHttpClient() {
|
||||
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"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user