This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 2c2ac1af68d [improve][test] Improve NamespacesTest to reduce the
execution time (#17875)
2c2ac1af68d is described below
commit 2c2ac1af68d1e662f9c8cea62868c215bd272eea
Author: fengyubiao <[email protected]>
AuthorDate: Wed Nov 2 09:43:01 2022 +0800
[improve][test] Improve NamespacesTest to reduce the execution time (#17875)
---
.../apache/pulsar/broker/admin/NamespacesTest.java | 118 ++++++++++++++++++---
1 file changed, 101 insertions(+), 17 deletions(-)
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
index 4f9c3b27766..307c8447674 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java
@@ -39,16 +39,21 @@ import java.net.URL;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.ClientErrorException;
import javax.ws.rs.WebApplicationException;
@@ -61,6 +66,7 @@ import org.apache.bookkeeper.client.api.ReadHandle;
import org.apache.bookkeeper.mledger.LedgerOffloader;
import org.apache.bookkeeper.mledger.ManagedLedgerConfig;
import org.apache.bookkeeper.util.ZkUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.pulsar.broker.BrokerTestUtil;
import org.apache.pulsar.broker.admin.v1.Namespaces;
import org.apache.pulsar.broker.admin.v1.PersistentTopics;
@@ -76,6 +82,7 @@ import org.apache.pulsar.broker.web.RestException;
import org.apache.pulsar.client.admin.PulsarAdminException;
import org.apache.pulsar.client.admin.PulsarAdminException.NotFoundException;
import org.apache.pulsar.client.admin.internal.BaseResource;
+import org.apache.pulsar.client.api.ClientBuilder;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.ConsumerBuilder;
import org.apache.pulsar.client.api.Producer;
@@ -112,9 +119,9 @@ import org.mockito.ArgumentMatcher;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@Test(groups = "broker-admin")
@@ -139,8 +146,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
super();
}
+ @Override
@BeforeClass
- public void initNamespace() throws Exception {
+ public void setup() throws Exception {
testLocalNamespaces = new ArrayList<>();
testGlobalNamespaces = new ArrayList<>();
@@ -154,11 +162,37 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
uriField = PulsarWebResource.class.getDeclaredField("uri");
uriField.setAccessible(true);
uriInfo = mock(UriInfo.class);
+
+ initAndStartBroker();
}
@Override
- @BeforeMethod
- public void setup() throws Exception {
+ @AfterClass(alwaysRun = true)
+ public void cleanup() throws Exception {
+ super.internalCleanup();
+ conf.setClusterName(testLocalCluster);
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void cleanupAfterMethod() throws Exception{
+ // cleanup.
+ Set<String> existsNsSetAferSetup =
Stream.concat(testLocalNamespaces.stream(), testGlobalNamespaces.stream())
+ .map(Objects::toString).collect(Collectors.toSet());
+ cleanupNamespaceByPredicate(this.testTenant, v ->
!existsNsSetAferSetup.contains(v));
+ cleanupNamespaceByPredicate(this.testOtherTenant, v ->
!existsNsSetAferSetup.contains(v));
+ }
+
+ protected void customizeNewPulsarClientBuilder(ClientBuilder
clientBuilder) {
+ // Make method "testMaxTopicsPerNamespace" run faster.
+ clientBuilder.operationTimeout(1, TimeUnit.SECONDS);
+ }
+
+ private void resetBroker() throws Exception {
+ cleanup();
+ initAndStartBroker();
+ }
+
+ private void initAndStartBroker() throws Exception {
conf.setTopicLevelPoliciesEnabled(false);
conf.setSystemTopicEnabled(false);
conf.setClusterName(testLocalCluster);
@@ -207,13 +241,6 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
nsSvc = pulsar.getNamespaceService();
}
- @Override
- @AfterMethod(alwaysRun = true)
- public void cleanup() throws Exception {
- super.internalCleanup();
- conf.setClusterName(testLocalCluster);
- }
-
@Test
public void testCreateNamespaces() throws Exception {
try {
@@ -646,6 +673,8 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
assertEquals(e.getResponse().getStatus(),
Status.PRECONDITION_FAILED.getStatusCode());
}
+ // cleanup
+ resetBroker();
}
@Test
@@ -723,6 +752,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
assertEquals(captor.getValue().getResponse().getStatus(),
Status.TEMPORARY_REDIRECT.getStatusCode());
assertEquals(captor.getValue().getResponse().getLocation().toString(),
UriBuilder.fromUri(uri).host("broker-usc.com").port(8080).toString());
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -802,6 +834,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
responseCaptor = ArgumentCaptor.forClass(Response.class);
verify(response,
timeout(5000).times(1)).resume(responseCaptor.capture());
assertEquals(responseCaptor.getValue().getStatus(),
Status.NO_CONTENT.getStatusCode());
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -882,6 +917,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
ArgumentCaptor<Response> captor2 =
ArgumentCaptor.forClass(Response.class);
verify(response, timeout(5000).times(1)).resume(captor2.capture());
assertEquals(captor2.getValue().getStatus(),
Status.NO_CONTENT.getStatusCode());
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -901,6 +939,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
ArgumentCaptor<Response> captor =
ArgumentCaptor.forClass(Response.class);
verify(response, timeout(5000).times(1)).resume(captor.capture());
assertEquals(captor.getValue().getStatus(),
Status.NO_CONTENT.getStatusCode());
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -940,6 +981,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
} catch (RestException re) {
assertEquals(re.getResponse().getStatus(),
Status.PRECONDITION_FAILED.getStatusCode());
}
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -967,6 +1011,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
"0x08375b1a_0x08375b1b", false, false, null);
ArgumentCaptor<Response> captor =
ArgumentCaptor.forClass(Response.class);
verify(response,
timeout(5000).times(1)).resume(any(RestException.class));
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -998,6 +1045,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
namespaces.unloadNamespaceBundle(response, testTenant,
testLocalCluster, bundledNsLocal, "0x00000000_0x80000000",
false);
verify(response,
timeout(5000).times(1)).resume(any(RestException.class));
+
+ // cleanup
+ resetBroker();
}
private void createBundledTestNamespaces(String property, String cluster,
String namespace, BundlesData bundle)
@@ -1061,6 +1111,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
} catch (RestException e) {
fail("ValidateNamespaceOwnershipWithBundles failed");
}
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -1133,6 +1186,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
topics.validateTopicName(topicName.getTenant(), topicName.getCluster(),
topicName.getNamespacePortion(),
topicName.getEncodedLocalName());
topics.validateAdminOperationOnTopic(false);
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -1566,7 +1622,7 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
public void testMaxTopicsPerNamespace() throws Exception {
cleanup();
conf.setMaxTopicsPerNamespace(15);
- setup();
+ initAndStartBroker();
String namespace = BrokerTestUtil.newUniqueName("testTenant/ns1");
TenantInfoImpl tenantInfo = new TenantInfoImpl(Set.of("role1",
"role2"),
@@ -1618,7 +1674,7 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
conf.setMaxTopicsPerNamespace(0);
conf.setDefaultNumPartitions(3);
conf.setAllowAutoTopicCreationType("partitioned");
- setup();
+ initAndStartBroker();
admin.tenants().createTenant("testTenant", tenantInfo);
admin.namespaces().createNamespace(namespace, Set.of("use"));
@@ -1647,7 +1703,7 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
conf.setMaxTopicsPerNamespace(0);
conf.setDefaultNumPartitions(1);
conf.setAllowAutoTopicCreationType("non-partitioned");
- setup();
+ initAndStartBroker();
admin.tenants().createTenant("testTenant", tenantInfo);
admin.namespaces().createNamespace(namespace, Set.of("use"));
@@ -1682,9 +1738,8 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
pulsarClient.newConsumer().topic(topic + "_c" +
i).subscriptionName("test_sub").subscribe().close();
}
- conf.setMaxTopicsPerNamespace(0);
- conf.setDefaultNumPartitions(1);
- conf.setAllowAutoTopicCreationType("non-partitioned");
+ // cleanup
+ resetBroker();
}
private void assertInvalidRetentionPolicy(String namespace, int
retentionTimeInMinutes, int retentionSizeInMB) {
@@ -1876,6 +1931,9 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
}
BundlesData bundles = admin.namespaces().getBundles(namespace);
assertEquals(bundles.getNumBundles(), 14);
+
+ // cleanup
+ resetBroker();
}
@Test
@@ -1913,5 +1971,31 @@ public class NamespacesTest extends
MockedPulsarServiceBaseTest {
assertEquals(e.getResponse().getStatus(),
Status.NOT_FOUND.getStatusCode());
}
}
+ /**
+ * see {@link #cleanupNamespaceByNsCollection(Collection)}
+ */
+ private void cleanupNamespaceByPredicate(String tenant, Predicate<String>
predicate) throws Exception{
+
cleanupNamespaceByNsCollection(admin.namespaces().getNamespaces(tenant).stream()
+ .filter(predicate).collect(Collectors.toSet()));
+ }
+
+ /**
+ * Remove namespaces.
+ */
+ private void cleanupNamespaceByNsCollection(Collection<String> namespaces)
+ throws Exception{
+ if (namespaces == null){
+ return;
+ }
+ boolean forceDeleteNamespaceAllowedOriginalValue =
pulsar.getConfiguration().isForceDeleteNamespaceAllowed();
+ pulsar.getConfiguration().setForceDeleteNamespaceAllowed(true);
+ for (String ns : namespaces){
+ if (StringUtils.isEmpty(ns)){
+ continue;
+ }
+ deleteNamespaceGraceFully(ns, true);
+ }
+
pulsar.getConfiguration().setForceDeleteNamespaceAllowed(forceDeleteNamespaceAllowedOriginalValue);
+ }
}