From 61c8442a638427c7b8c0fa283639c8545124ca74 Mon Sep 17 00:00:00 2001 From: thetumbled <843221020@qq.com> Date: Wed, 15 May 2024 16:13:13 +0800 Subject: [PATCH 1/3] add test code. --- .../broker/stats/ConsumerStatsTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java index 512a5cfcab661..ed138265373a7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java @@ -74,6 +74,7 @@ import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @Slf4j @@ -269,6 +270,29 @@ public void testConsumerStatsOutput() throws Exception { consumer.close(); } + @DataProvider(name = "topicName") + public static Object[][] topicName() { + return new Object[][]{ + {"persistent://prop/use/ns-abc/testNonExistNamespace"}, + {"persistent://prop/ns-abc/testNonExistNamespace"} + }; + } + + @Test(dataProvider = "topicName") + public void testNonExistNamespace(String topicName) throws Exception { + final String subName = "my-subscription"; + try { + Consumer consumer = pulsarClient.newConsumer() + .topic(topicName) + .subscriptionType(SubscriptionType.Shared) + .subscriptionName(subName) + .subscribe(); + Assert.fail("should have failed"); + } catch (Exception e) { + // ok + } + } + @Test public void testPersistentTopicMessageAckRateMetricTopicLevel() throws Exception { From 8193bfa79c438b69671ba14f3cb327bb884c85a0 Mon Sep 17 00:00:00 2001 From: thetumbled <843221020@qq.com> Date: Fri, 17 May 2024 16:53:11 +0800 Subject: [PATCH 2/3] add code. --- .../apache/pulsar/broker/admin/AdminResource.java | 13 +++++++++++++ .../pulsar/broker/stats/ConsumerStatsTest.java | 11 ++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java index 45455f16d4dc1..c83628a411feb 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java @@ -486,6 +486,7 @@ protected CompletableFuture getPartitionedTopicMetadat return validateTopicOperationAsync(topicName, TopicOperation.LOOKUP) .thenCompose(__ -> validateClusterOwnershipAsync(topicName.getCluster())) .thenCompose(__ -> validateGlobalNamespaceOwnershipAsync(topicName.getNamespaceObject())) + .thenCompose(__ -> validateNamespaceExists(topicName.getNamespaceObject())) .thenCompose(__ -> { if (checkAllowAutoCreation) { return pulsar().getBrokerService() @@ -506,6 +507,18 @@ protected void validateClusterExists(String cluster) { } } + protected CompletableFuture validateNamespaceExists(NamespaceName namespace) { + try { + if (namespaceResources().namespaceExists(namespace)) { + return CompletableFuture.completedFuture(null); + } else { + return FutureUtil.failedFuture(new RestException(Status.NOT_FOUND, "Namespace does not exist")); + } + } catch (Exception e) { + return FutureUtil.failedFuture(e); + } + } + protected Policies getNamespacePolicies(String tenant, String cluster, String namespace) { NamespaceName ns = NamespaceName.get(tenant, cluster, namespace); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java index ed138265373a7..a548e09e628f8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java @@ -270,20 +270,21 @@ public void testConsumerStatsOutput() throws Exception { consumer.close(); } - @DataProvider(name = "topicName") - public static Object[][] topicName() { + @DataProvider(name = "invalidTopicName") + public static Object[][] invalidTopicName() { + // some topic names in non-exist namespace return new Object[][]{ {"persistent://prop/use/ns-abc/testNonExistNamespace"}, {"persistent://prop/ns-abc/testNonExistNamespace"} }; } - @Test(dataProvider = "topicName") - public void testNonExistNamespace(String topicName) throws Exception { + @Test(dataProvider = "invalidTopicName") + public void testNonExistNamespace(String invalidTopicName) throws Exception { final String subName = "my-subscription"; try { Consumer consumer = pulsarClient.newConsumer() - .topic(topicName) + .topic(invalidTopicName) .subscriptionType(SubscriptionType.Shared) .subscriptionName(subName) .subscribe(); From 3538c6b33c05df9a1c84264fc8ae9e1ba3995c0c Mon Sep 17 00:00:00 2001 From: thetumbled <843221020@qq.com> Date: Fri, 17 May 2024 17:01:16 +0800 Subject: [PATCH 3/3] fix test code. --- .../java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java index a548e09e628f8..0032a050564a5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java @@ -246,7 +246,7 @@ public void testConsumerStatsOutput() throws Exception { "connectedSince", "clientVersion"); - final String topicName = "persistent://prop/use/ns-abc/testConsumerStatsOutput"; + final String topicName = "persistent://my-property/my-ns/testConsumerStatsOutput"; final String subName = "my-subscription"; Consumer consumer = pulsarClient.newConsumer()