From ea0565fc8ddc3fb7f10df3f2707d0f9a0a98a86b Mon Sep 17 00:00:00 2001 From: Seu Nome Date: Thu, 25 Sep 2025 03:14:15 -0300 Subject: [PATCH] Make PulsarStandaloneBuilder a public API (#10473) - Added convenience methods to build PulsarClient and PulsarAdmin - Enabled starting the server without creating real files on disk - Added unit tests to ensure usage via Java program --- .../pulsar/PulsarStandaloneBuilder.java | 29 ++++++++++++++++++ .../pulsar/PulsarStandaloneBuilderTest.java | 30 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 pulsar-broker/src/test/java/org/apache/pulsar/PulsarStandaloneBuilderTest.java diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandaloneBuilder.java b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandaloneBuilder.java index 5469d24782958..7e0c16c298066 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandaloneBuilder.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandaloneBuilder.java @@ -21,6 +21,10 @@ import static org.apache.commons.lang3.StringUtils.isBlank; import org.apache.pulsar.broker.ServiceConfiguration; import org.apache.pulsar.broker.ServiceConfigurationUtils; +import org.apache.pulsar.client.api.PulsarClient; +import org.apache.pulsar.client.admin.PulsarAdmin; +import java.nio.file.Files; +import java.nio.file.Path; public final class PulsarStandaloneBuilder { @@ -96,6 +100,31 @@ public PulsarStandaloneBuilder withAdvertisedAddress(String advertisedAddress) { return this; } + public PulsarClient buildClient () throws Exception { + return PulsarClient.builder() + .serviceUrl(pulsarStandalone.getConfig().getBrokerServiceUrl()) + .build(); + } + + public PulsarAdmin buildAdmin() throws Exception { + return PulsarAdmin.builder() + .serviceHttpUrl(pulsarStandalone.getConfig().getWebServiceAddress()) + .build(); + } + + private PulsarStandaloneBuilder() throws IOException { + pulsarStandalone = new PulsarStandalone(); + pulsarStandalone.setWipeData(true); + pulsarStandalone.setNoFunctionsWorker(true); + + Path tempZkDir = Files.createTempDirectory("zk"); + Path tempBkDir = Files.createTempDirectory("bk"); + + pulsarStandalone.setZkDir(tempZkDir.toString()); + pulsarStandalone.setBkDir(tempBkDir.toString()); + } + + public PulsarStandalone build() { ServiceConfiguration config = new ServiceConfiguration(); config.setClusterName("standalone"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarStandaloneBuilderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarStandaloneBuilderTest.java new file mode 100644 index 0000000000000..b8c795bb66f5c --- /dev/null +++ b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarStandaloneBuilderTest.java @@ -0,0 +1,30 @@ +package org.apache.pulsar; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.apache.pulsar.client.api.PulsarClient; +import org.apache.pulsar.client.admin.PulsarAdmin; +import org.junit.jupiter.api.Test; + +public class PulsarStandaloneBuilderTest { + + @Test + public void testStandaloneBuilder() throws Exception { + + PulsarStandaloneBuilder builder = PulsarStandaloneBuilder.instance(); + + PulsarStandalone standalone = builder.build(); + standalone.start(); + + PulsarClient client = builder.buildClient(); + PulsarAdmin admin = builder.buildAdmin(); + + assertNotNull(client); + assertNotNull(admin); + + client.close(); + admin.close(); + standalone.stop(); + } + +}