From 00a98aa98e6ebda8bed6f44a69087ca644b8ecdb Mon Sep 17 00:00:00 2001 From: moxiaoying <1159230165@qq.com> Date: Sun, 10 Aug 2025 00:18:47 +0800 Subject: [PATCH] feat: add http client config Signed-off-by: moxiaoying <1159230165@qq.com> --- .../pulsar/admin/api/Configuration.java | 22 +-- .../admin/reactive/InnerReactiveClient.java | 21 +-- .../pulsar/admin/reactive/SslContextUtil.java | 26 ++-- .../pulsar/admin/jdk/InnerHttpClient.java | 23 +-- .../pulsar/admin/jdk/PulsarAdminBuilder.java | 8 +- .../admin/jdk/PulsarAdminBuilderImpl.java | 11 +- .../protocol/pulsar/admin/jdk/BaseTest.java | 15 +- .../pulsar/admin/jdk/BrokersTest.java | 15 +- .../pulsar/admin/jdk/ClustersTest.java | 13 +- .../pulsar/admin/jdk/TlsClientTest.java | 144 ++++++++++-------- .../admin/jdk/TlsClientWrongHostTest.java | 33 ++-- 11 files changed, 166 insertions(+), 165 deletions(-) diff --git a/pulsar-admin-api/src/main/java/io/github/protocol/pulsar/admin/api/Configuration.java b/pulsar-admin-api/src/main/java/io/github/protocol/pulsar/admin/api/Configuration.java index c35e592..3c1312e 100644 --- a/pulsar-admin-api/src/main/java/io/github/protocol/pulsar/admin/api/Configuration.java +++ b/pulsar-admin-api/src/main/java/io/github/protocol/pulsar/admin/api/Configuration.java @@ -1,17 +1,16 @@ package io.github.protocol.pulsar.admin.api; -import io.github.openfacade.http.HttpClientEngine; +import io.github.openfacade.http.HttpClientConfig; +import io.github.openfacade.http.ReactorHttpClientConfig; public class Configuration { public String host = "localhost"; public int port; - public boolean tlsEnabled; + public HttpClientConfig httpClientConfig; - public TlsConfig tlsConfig; - - public HttpClientEngine engine; + public ReactorHttpClientConfig reactorHttpClientConfig; public Configuration() { } @@ -26,18 +25,13 @@ public Configuration port(int port) { return this; } - public Configuration tlsEnabled(boolean tlsEnabled) { - this.tlsEnabled = tlsEnabled; - return this; - } - - public Configuration tlsConfig(TlsConfig tlsConfig) { - this.tlsConfig = tlsConfig; + public Configuration httpClientConfig(HttpClientConfig httpClientConfig) { + this.httpClientConfig = httpClientConfig; return this; } - public Configuration engine(HttpClientEngine engine) { - this.engine = engine; + public Configuration reactorHttpClientConfig(ReactorHttpClientConfig reactorHttpClientConfig) { + this.reactorHttpClientConfig = reactorHttpClientConfig; return this; } } diff --git a/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/InnerReactiveClient.java b/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/InnerReactiveClient.java index 83b9aee..7d20e0c 100644 --- a/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/InnerReactiveClient.java +++ b/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/InnerReactiveClient.java @@ -1,28 +1,17 @@ package io.github.protocol.pulsar.admin.reactive; +import io.github.openfacade.http.ReactorHttpClient; +import io.github.openfacade.http.ReactorHttpClientFactory; import io.github.protocol.pulsar.admin.api.Configuration; -import io.netty.handler.ssl.SslContext; -import reactor.netty.http.client.HttpClient; -import reactor.netty.http.client.HttpClientSecurityUtils; public class InnerReactiveClient { - private final HttpClient httpClient; + private final ReactorHttpClient httpClient; private final String httpPrefix; public InnerReactiveClient(Configuration conf) { - HttpClient client = HttpClient.create(); - - if (conf.tlsEnabled) { - client = client.secure(spec -> { - SslContext context = SslContextUtil.build(conf.tlsConfig); - if (conf.tlsConfig.hostnameVerifyDisabled) { - spec.sslContext(context) - .handlerConfigurator(HttpClientSecurityUtils.HOSTNAME_VERIFICATION_CONFIGURER); - } else { - spec.sslContext(context); - } - }); + ReactorHttpClient client = ReactorHttpClientFactory.createReactorHttpClient(conf.reactorHttpClientConfig); + if (conf.reactorHttpClientConfig == null || conf.reactorHttpClientConfig.tlsConfig() == null) { this.httpPrefix = "https://" + conf.host + ":" + conf.port; } else { this.httpPrefix = "http://" + conf.host + ":" + conf.port; diff --git a/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/SslContextUtil.java b/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/SslContextUtil.java index ccc4362..2ccc445 100644 --- a/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/SslContextUtil.java +++ b/pulsar-admin-reactive/src/main/java/io/github/protocol/pulsar/admin/reactive/SslContextUtil.java @@ -1,6 +1,6 @@ package io.github.protocol.pulsar.admin.reactive; -import io.github.protocol.pulsar.admin.api.TlsConfig; +import io.github.openfacade.http.TlsConfig; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; @@ -17,23 +17,23 @@ public static SslContext build(TlsConfig config) { try { SslContextBuilder sslContextBuilder = SslContextBuilder.forClient(); - if (config.keyStorePath != null && config.keyStorePassword != null) { + if (config.keyStorePath() != null && config.keyStorePassword() != null) { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - try (FileInputStream keyStoreInputStream = new FileInputStream(config.keyStorePath)) { - keyStore.load(keyStoreInputStream, config.keyStorePassword); + try (FileInputStream keyStoreInputStream = new FileInputStream(config.keyStorePath())) { + keyStore.load(keyStoreInputStream, config.keyStorePassword()); } String defaultKeyAlgorithm = KeyManagerFactory.getDefaultAlgorithm(); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(defaultKeyAlgorithm); - keyManagerFactory.init(keyStore, config.keyStorePassword); + keyManagerFactory.init(keyStore, config.keyStorePassword()); sslContextBuilder.keyManager(keyManagerFactory); } - if (config.verifyDisabled) { + if (config.verifyDisabled()) { sslContextBuilder.trustManager(InsecureTrustManagerFactory.INSTANCE); - } else if (config.trustStorePath != null && config.trustStorePassword != null) { + } else if (config.trustStorePath() != null && config.trustStorePassword() != null) { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - try (FileInputStream trustStoreInputStream = new FileInputStream(config.trustStorePath)) { - trustStore.load(trustStoreInputStream, config.trustStorePassword); + try (FileInputStream trustStoreInputStream = new FileInputStream(config.trustStorePath())) { + trustStore.load(trustStoreInputStream, config.trustStorePassword()); } String defaultTrustAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(defaultTrustAlgorithm); @@ -41,12 +41,12 @@ public static SslContext build(TlsConfig config) { sslContextBuilder.trustManager(trustManagerFactory); } - if (config.versions != null) { - sslContextBuilder.protocols(config.versions); + if (config.versions() != null) { + sslContextBuilder.protocols(config.versions()); } - if (config.cipherSuites != null) { - sslContextBuilder.ciphers(Arrays.asList(config.cipherSuites)); + if (config.cipherSuites() != null) { + sslContextBuilder.ciphers(Arrays.asList(config.cipherSuites())); } return sslContextBuilder.build(); diff --git a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/InnerHttpClient.java b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/InnerHttpClient.java index 458a22b..58089e3 100644 --- a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/InnerHttpClient.java +++ b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/InnerHttpClient.java @@ -2,14 +2,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; import io.github.openfacade.http.HttpClient; -import io.github.openfacade.http.HttpClientConfig; -import io.github.openfacade.http.HttpClientEngine; import io.github.openfacade.http.HttpClientFactory; import io.github.openfacade.http.HttpMethod; import io.github.openfacade.http.HttpRequest; import io.github.openfacade.http.HttpResponse; import io.github.openfacade.http.HttpSchema; -import io.github.openfacade.http.TlsConfig; import io.github.openfacade.http.UrlBuilder; import io.github.protocol.pulsar.admin.api.Configuration; import io.github.protocol.pulsar.admin.common.JacksonService; @@ -28,21 +25,15 @@ public class InnerHttpClient { private UrlBuilder templateUrlBuilder; public InnerHttpClient(Configuration conf) { - HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); - clientConfigBuilder.engine(conf.engine == null ? HttpClientEngine.Java : conf.engine); - if (conf.tlsEnabled) { - TlsConfig.Builder tlsConfigBuilder = new TlsConfig.Builder(); - io.github.protocol.pulsar.admin.api.TlsConfig tlsConfig = conf.tlsConfig; - tlsConfigBuilder.cipherSuites(tlsConfig.cipherSuites); - tlsConfigBuilder.hostnameVerifyDisabled(tlsConfig.hostnameVerifyDisabled); - tlsConfigBuilder.keyStore(tlsConfig.keyStorePath, tlsConfig.keyStorePassword); - tlsConfigBuilder.trustStore(tlsConfig.trustStorePath, tlsConfig.trustStorePassword); - tlsConfigBuilder.verifyDisabled(tlsConfig.verifyDisabled); - clientConfigBuilder.tlsConfig(tlsConfigBuilder.build()); + boolean tlsEnable; + if (conf.httpClientConfig == null || conf.httpClientConfig.tlsConfig() == null) { + tlsEnable = false; + } else { + tlsEnable = true; } - this.client = HttpClientFactory.createHttpClient(clientConfigBuilder.build()); + this.client = HttpClientFactory.createHttpClient(conf.httpClientConfig); templateUrlBuilder = new UrlBuilder(); - templateUrlBuilder.setHttpSchema(conf.tlsEnabled ? HttpSchema.HTTPS : HttpSchema.HTTP).setHost(conf.host) + templateUrlBuilder.setHttpSchema(tlsEnable ? HttpSchema.HTTPS : HttpSchema.HTTP).setHost(conf.host) .setPort(conf.port); } diff --git a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilder.java b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilder.java index 116791f..5f1a38f 100644 --- a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilder.java +++ b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilder.java @@ -1,6 +1,7 @@ package io.github.protocol.pulsar.admin.jdk; -import io.github.protocol.pulsar.admin.api.TlsConfig; +import io.github.openfacade.http.HttpClientConfig; +import io.github.openfacade.http.ReactorHttpClientConfig; public interface PulsarAdminBuilder { PulsarAdmin build(); @@ -9,8 +10,7 @@ public interface PulsarAdminBuilder { PulsarAdminBuilder port(int port); - PulsarAdminBuilder tlsEnabled(boolean useSsl); - - PulsarAdminBuilder tlsConfig(TlsConfig tlsConfig); + PulsarAdminBuilder httpClientConfig(HttpClientConfig httpClientConfig); + PulsarAdminBuilder reactorHttpClientConfig(ReactorHttpClientConfig reactorHttpClientConfig); } diff --git a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilderImpl.java b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilderImpl.java index 8126a29..adf9eab 100644 --- a/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilderImpl.java +++ b/pulsar-admin/src/main/java/io/github/protocol/pulsar/admin/jdk/PulsarAdminBuilderImpl.java @@ -1,7 +1,8 @@ package io.github.protocol.pulsar.admin.jdk; +import io.github.openfacade.http.HttpClientConfig; +import io.github.openfacade.http.ReactorHttpClientConfig; import io.github.protocol.pulsar.admin.api.Configuration; -import io.github.protocol.pulsar.admin.api.TlsConfig; public class PulsarAdminBuilderImpl implements PulsarAdminBuilder { private final Configuration conf; @@ -28,14 +29,14 @@ public PulsarAdminBuilder port(int port) { } @Override - public PulsarAdminBuilder tlsEnabled(boolean useSsl) { - this.conf.tlsEnabled(useSsl); + public PulsarAdminBuilder httpClientConfig(HttpClientConfig httpClientConfig) { + this.conf.httpClientConfig(httpClientConfig); return this; } @Override - public PulsarAdminBuilder tlsConfig(TlsConfig tlsConfig) { - this.conf.tlsConfig(tlsConfig); + public PulsarAdminBuilder reactorHttpClientConfig(ReactorHttpClientConfig reactorHttpClientConfig) { + this.conf.reactorHttpClientConfig(reactorHttpClientConfig); return this; } } diff --git a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BaseTest.java b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BaseTest.java index 523f2b6..db21560 100644 --- a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BaseTest.java +++ b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BaseTest.java @@ -1,8 +1,8 @@ package io.github.protocol.pulsar.admin.jdk; import io.github.embedded.pulsar.core.EmbeddedPulsarServer; +import io.github.openfacade.http.HttpClientConfig; import io.github.openfacade.http.HttpClientEngine; -import io.github.protocol.pulsar.admin.api.Configuration; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.TestInstance; @@ -40,12 +40,13 @@ protected List initPulsarAdmins() { if (engine.equals(HttpClientEngine.Async) || engine.equals(HttpClientEngine.Jetty)) { continue; } - Configuration conf = new Configuration(); - conf.host("localhost"); - conf.port(getPort()); - conf.engine(engine); - PulsarAdminImpl pulsarAdmin = new PulsarAdminImpl(conf); - pulsarAdmins.add(pulsarAdmin); + PulsarAdminBuilder pulsarAdminBuilder = PulsarAdmin.builder(); + pulsarAdminBuilder.host("localhost"); + pulsarAdminBuilder.port(getPort()); + HttpClientConfig.Builder clientBuilder = new HttpClientConfig.Builder(); + clientBuilder.engine(engine); + pulsarAdminBuilder.httpClientConfig(clientBuilder.build()); + pulsarAdmins.add(pulsarAdminBuilder.build()); } return pulsarAdmins; } diff --git a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BrokersTest.java b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BrokersTest.java index 2d61f1c..9b36a8a 100644 --- a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BrokersTest.java +++ b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/BrokersTest.java @@ -1,18 +1,19 @@ package io.github.protocol.pulsar.admin.jdk; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class BrokersTest extends BaseTest{ - @Test - public void testHealthCheckV1() throws PulsarAdminException { - PulsarAdmin pulsarAdmin = PulsarAdmin.builder().port(getPort()).build(); + @MethodSource("providePulsarAdmins") + @ParameterizedTest + public void testHealthCheckV1(PulsarAdmin pulsarAdmin) throws PulsarAdminException { pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } - @Test - public void testHealthCheckV2() throws PulsarAdminException { - PulsarAdmin pulsarAdmin = PulsarAdmin.builder().port(getPort()).build(); + @MethodSource("providePulsarAdmins") + @ParameterizedTest + public void testHealthCheckV2(PulsarAdmin pulsarAdmin) throws PulsarAdminException { pulsarAdmin.brokers().healthcheck(TopicVersion.V2); } } diff --git a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/ClustersTest.java b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/ClustersTest.java index f55b7c7..7308230 100644 --- a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/ClustersTest.java +++ b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/ClustersTest.java @@ -1,15 +1,16 @@ package io.github.protocol.pulsar.admin.jdk; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import java.util.Arrays; public class ClustersTest extends BaseTest{ - @Test - public void getClustersTest() throws PulsarAdminException { - Assertions.assertEquals(Arrays.asList("standalone"), - PulsarAdmin.builder().port(getPort()).build().clusters().getClusters()); - } + @MethodSource("providePulsarAdmins") + @ParameterizedTest + public void getClustersTest(PulsarAdmin pulsarAdmin) throws PulsarAdminException { + Assertions.assertEquals(Arrays.asList("standalone"), pulsarAdmin.clusters().getClusters()); + } } diff --git a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientTest.java b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientTest.java index d3fa523..053c435 100644 --- a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientTest.java +++ b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientTest.java @@ -2,7 +2,8 @@ import io.github.embedded.pulsar.core.EmbeddedPulsarConfig; import io.github.embedded.pulsar.core.EmbeddedPulsarServer; -import io.github.protocol.pulsar.admin.api.TlsConfig; +import io.github.openfacade.http.HttpClientConfig; +import io.github.openfacade.http.TlsConfig; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -41,92 +42,113 @@ public void setup() throws Exception { } private PulsarAdmin createPulsarAdmin(TlsConfig tlsConfig) throws PulsarAdminException { + HttpClientConfig.Builder builder = new HttpClientConfig.Builder(); + builder.tlsConfig(tlsConfig); return PulsarAdmin.builder() - .port(getPort()) - .tlsEnabled(true) - .tlsConfig(tlsConfig) - .build(); + .port(getPort()) + .httpClientConfig(builder.build()) + .build(); } @Test public void testTlsNoVerify() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - false, - true, - null, - null - ); - PulsarAdmin pulsarAdmin = createPulsarAdmin(tlsConfig); + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(false); + builder.hostnameVerifyDisabled(true); + builder.versions(null); + builder.cipherSuites(null); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); + PulsarAdmin pulsarAdmin = PulsarAdmin.builder() + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } @Test public void testTlsCustomProtocol() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - false, - true, - new String[]{"TLSv1.2"}, - null - ); - PulsarAdmin pulsarAdmin = createPulsarAdmin(tlsConfig); + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(false); + builder.hostnameVerifyDisabled(true); + builder.versions(new String[]{"TLSv1.2"}); + builder.cipherSuites(null); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); + PulsarAdmin pulsarAdmin = PulsarAdmin.builder() + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } @Test public void testTlsCustomCiphers() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - false, - true, - null, - new String[]{"ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-RSA-AES128-GCM-SHA256", + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(false); + builder.hostnameVerifyDisabled(true); + builder.versions(null); + builder.cipherSuites(new String[]{"ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-RSA-AES128-GCM-SHA256", "ECDHE-ECDSA-AES256-GCM-SHA384", "ECDHE-RSA-AES256-GCM-SHA384", "ECDHE-ECDSA-CHACHA20-POLY1305", - "ECDHE-RSA-CHACHA20-POLY1305", "DHE-RSA-AES128-GCM-SHA256", "DHE-RSA-AES256-GCM-SHA384"} - ); - PulsarAdmin pulsarAdmin = createPulsarAdmin(tlsConfig); + "ECDHE-RSA-CHACHA20-POLY1305", "DHE-RSA-AES128-GCM-SHA256", "DHE-RSA-AES256-GCM-SHA384"}); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); + PulsarAdmin pulsarAdmin = PulsarAdmin.builder() + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } @Test public void testTlsByVerifyAndNoHostnameVerification() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - true, - false, - null, - null - ); - PulsarAdmin pulsarAdmin = createPulsarAdmin(tlsConfig); + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(true); + builder.hostnameVerifyDisabled(false); + builder.versions(null); + builder.cipherSuites(null); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); + PulsarAdmin pulsarAdmin = PulsarAdmin.builder() + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } @Test public void testTlsByVerifyAndHostnameVerification() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - true, - true, - null, - null - ); - PulsarAdmin pulsarAdmin = createPulsarAdmin(tlsConfig); + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(true); + builder.hostnameVerifyDisabled(true); + builder.versions(null); + builder.cipherSuites(null); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); + PulsarAdmin pulsarAdmin = PulsarAdmin.builder() + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); pulsarAdmin.brokers().healthcheck(TopicVersion.V1); } diff --git a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientWrongHostTest.java b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientWrongHostTest.java index b4898cd..7e7808d 100644 --- a/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientWrongHostTest.java +++ b/pulsar-admin/src/test/java/io/github/protocol/pulsar/admin/jdk/TlsClientWrongHostTest.java @@ -2,7 +2,8 @@ import io.github.embedded.pulsar.core.EmbeddedPulsarConfig; import io.github.embedded.pulsar.core.EmbeddedPulsarServer; -import io.github.protocol.pulsar.admin.api.TlsConfig; +import io.github.openfacade.http.HttpClientConfig; +import io.github.openfacade.http.TlsConfig; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -42,22 +43,22 @@ public void setup() throws Exception { } @Test - public void testTlsByVerifyAndNoHostnameVerification() throws PulsarAdminException { - TlsConfig tlsConfig = new TlsConfig( - new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), - CLIENT_CERT_PASSWORD.toCharArray(), - false, - false, - null, - null - ); + public void testTlsByVerifyAndNoHostnameVerification() { + TlsConfig.Builder builder = new TlsConfig.Builder(); + builder.verifyDisabled(true); + builder.hostnameVerifyDisabled(false); + builder.versions(null); + builder.cipherSuites(null); + builder.keyStore(new File(CLIENT_KEYSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + builder.trustStore(new File(CLIENT_TRUSTSTORE_FILE).getAbsolutePath(), + CLIENT_CERT_PASSWORD.toCharArray()); + HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); + clientConfigBuilder.tlsConfig(builder.build()); PulsarAdmin pulsarAdmin = PulsarAdmin.builder() - .port(getPort()) - .tlsEnabled(true) - .tlsConfig(tlsConfig) - .build(); + .port(getPort()) + .httpClientConfig(clientConfigBuilder.build()) + .build(); Assertions.assertThrows(PulsarAdminException.class, () -> pulsarAdmin.brokers().healthcheck(TopicVersion.V1)); }