From e427d976ca9ac31f4380e57d6fc7a1c59b6ccdda Mon Sep 17 00:00:00 2001 From: Daniel Mikusa Date: Wed, 27 Apr 2022 15:58:07 -0400 Subject: [PATCH] Ensure that http client is always configured Previously, if no additional http configuration was set then the default http client configuration would not be applied either. This resulted in settings like the proxy settings and wire tap settings not being applied by default, which is the intention. Resolves #1143 Signed-off-by: Daniel Mikusa --- .../reactor/_DefaultConnectionContext.java | 7 ++-- .../reactor/DefaultConnectionContextTest.java | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/_DefaultConnectionContext.java b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/_DefaultConnectionContext.java index 2a4541b9ac..1fefd65ac4 100644 --- a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/_DefaultConnectionContext.java +++ b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/_DefaultConnectionContext.java @@ -36,7 +36,6 @@ import reactor.netty.resources.ConnectionProvider; import reactor.netty.resources.LoopResources; import reactor.netty.tcp.SslProvider; -import reactor.netty.tcp.SslProvider.DefaultConfigurationType; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -103,10 +102,10 @@ public Integer getConnectionPoolSize() { @Override @Value.Default public HttpClient getHttpClient() { - HttpClient client = createHttpClient().compress(true) - .secure(this::configureSsl); + HttpClient client = configureHttpClient(createHttpClient().compress(true) + .secure(this::configureSsl)); - return getAdditionalHttpClientConfiguration().map(configuration -> configuration.apply(configureHttpClient(client))) + return getAdditionalHttpClientConfiguration().map(configuration -> configuration.apply(client)) .orElse(client); } diff --git a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/DefaultConnectionContextTest.java b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/DefaultConnectionContextTest.java index b9be786fb4..83f287b79f 100644 --- a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/DefaultConnectionContextTest.java +++ b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/DefaultConnectionContextTest.java @@ -16,14 +16,21 @@ package org.cloudfoundry.reactor; +import io.netty.handler.logging.ByteBufFormat; +import io.netty.handler.logging.LogLevel; import org.junit.After; import org.junit.Test; +import reactor.netty.http.client.HttpClient; +import reactor.netty.transport.ProxyProvider; import reactor.test.StepVerifier; +import java.net.InetSocketAddress; import java.time.Duration; +import java.util.Optional; import static io.netty.handler.codec.http.HttpMethod.GET; import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static org.assertj.core.api.Assertions.assertThat; public final class DefaultConnectionContextTest extends AbstractRestTest { @@ -85,4 +92,35 @@ public void multipleInstances() { second.dispose(); } + @Test + public void configurationAlwaysApplied() { + DefaultConnectionContext ctx = DefaultConnectionContext.builder() + .apiHost("api.example.com") + .keepAlive(true) + .proxyConfiguration( + ProxyConfiguration.builder() + .host("proxy.example.com") + .port(8080) + .username("foo") + .password("bar") + .build()) + .skipSslValidation(true) + .build(); + + assertThat(ctx.getConnectionPoolSize()).isEqualTo(24); + assertThat(ctx.getApiHost()).isEqualTo("api.example.com"); + assertThat(ctx.getSkipSslValidation()).isEqualTo(Optional.of(true)); + + HttpClient client = ctx.getHttpClient(); + assertThat(client.configuration().isSecure()).isEqualTo(true); + + InetSocketAddress addr = client.configuration().proxyProvider().getAddress().get(); + assertThat(addr.getHostName()).isEqualTo("proxy.example.com"); + assertThat(addr.getPort()).isEqualTo(8080); + assertThat(client.configuration().proxyProvider().getType()).isEqualTo(ProxyProvider.Proxy.HTTP); + + assertThat(client.configuration().loggingHandler().level()).isEqualTo(LogLevel.TRACE); + assertThat(client.configuration().loggingHandler().byteBufFormat()).isEqualTo(ByteBufFormat.HEX_DUMP); + } + }