From b4029c586f8103c5be627b977df22ea9c9c95a09 Mon Sep 17 00:00:00 2001 From: fengyubiao Date: Fri, 16 Sep 2022 09:32:24 +0800 Subject: [PATCH] [fix][broker]add test case for deleting namespace fail when has partitioned system topic (#17338) (cherry picked from commit bfbe3811ab1120dd602d2548422f934c7358b5b5) --- .../pulsar/broker/admin/AdminApi2Test.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java index 9f6a10894c968..4de7c78b6bcd0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java @@ -49,7 +49,9 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import javax.ws.rs.core.Response.Status; +import lombok.AllArgsConstructor; import lombok.Cleanup; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.mledger.ManagedLedger; import org.apache.bookkeeper.mledger.impl.ManagedCursorImpl; @@ -1326,9 +1328,43 @@ public void testDeleteTenant() throws Exception { assertFalse(pulsar.getLocalMetadataStore().exists(localPoliciesPath).join()); } - @Test - public void testDeleteNamespace() throws Exception { - pulsar.getConfiguration().setForceDeleteNamespaceAllowed(false); + @Data + @AllArgsConstructor + private static class NamespaceAttr { + private boolean systemTopicEnabled; + private String autoTopicCreationType; + private int defaultNumPartitions; + private boolean forceDeleteNamespaceAllowed; + } + + @DataProvider(name = "namespaceAttrs") + public Object[][] namespaceAttributes(){ + return new Object[][]{ + {new NamespaceAttr(false, "non-partitioned", 0, false)}, + {new NamespaceAttr(true, "non-partitioned", 0, false)}, + {new NamespaceAttr(true, "partitioned", 3, false)} + }; + } + + private NamespaceAttr markOriginalNamespaceAttr(){ + return new NamespaceAttr(conf.isSystemTopicEnabled(), conf.getAllowAutoTopicCreationType(), + conf.getDefaultNumPartitions(), conf.isForceDeleteNamespaceAllowed()); + } + + private void setNamespaceAttr(NamespaceAttr namespaceAttr){ + conf.setSystemTopicEnabled(namespaceAttr.systemTopicEnabled); + conf.setAllowAutoTopicCreationType(namespaceAttr.autoTopicCreationType); + conf.setDefaultNumPartitions(namespaceAttr.defaultNumPartitions); + conf.setForceDeleteNamespaceAllowed(namespaceAttr.forceDeleteNamespaceAllowed); + } + + @Test(dataProvider = "namespaceAttrs") + public void testDeleteNamespace(NamespaceAttr namespaceAttr) throws Exception { + // Set conf. + internalCleanup(); + NamespaceAttr originalNamespaceAttr = markOriginalNamespaceAttr(); + setNamespaceAttr(namespaceAttr); + setup(); String tenant = "test-tenant"; assertFalse(admin.tenants().getTenants().contains(tenant)); @@ -1373,6 +1409,11 @@ public void testDeleteNamespace() throws Exception { final String bundleDataPath = "/loadbalance/bundle-data/" + namespace; assertFalse(pulsar.getLocalMetadataStore().exists(bundleDataPath).join()); + + // Reset config + internalCleanup(); + setNamespaceAttr(originalNamespaceAttr); + setup(); } private void awaitChangeEventTopicAndCompactionCreateFinish(String ns, String topic) throws Exception {