This is an automated email from the ASF dual-hosted git repository.
yubiao 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 113d70d9299 [improve][test] Add unit test for metadata cache #20363
(#20436)
113d70d9299 is described below
commit 113d70d9299d5bc893cee9b524c7b1623dee5892
Author: 萧易客 <[email protected]>
AuthorDate: Tue May 30 18:46:56 2023 +0800
[improve][test] Add unit test for metadata cache #20363 (#20436)
- Add `MetadataStoreTest#testExistsDistributed` for distributed metaStore
implementations only
- Add `MetadataStoreTest#testGetChildrenDistributed` for distributed
metaStore implementations only
---
.../pulsar/metadata/BaseMetadataStoreTest.java | 8 ++++
.../apache/pulsar/metadata/MetadataStoreTest.java | 52 ++++++++++++++++++++++
2 files changed, 60 insertions(+)
diff --git
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
index ec6e6e03eae..411ee038c48 100644
---
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
+++
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
@@ -82,6 +82,14 @@ public abstract class BaseMetadataStoreTest extends
TestRetrySupport {
};
}
+ @DataProvider(name = "distributedImpl")
+ public Object[][] distributedImplementations() {
+ return new Object[][]{
+ {"ZooKeeper", stringSupplier(() -> zks.getConnectionString())},
+ {"Etcd", stringSupplier(() -> "etcd:" +
getEtcdClusterConnectString())},
+ };
+ }
+
private synchronized String getEtcdClusterConnectString() {
if (etcdCluster == null) {
etcdCluster =
EtcdClusterExtension.builder().withClusterName("test").withNodes(1).withSsl(false).build()
diff --git
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java
index c87e9bda436..246661edc43 100644
---
a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java
+++
b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java
@@ -663,4 +663,56 @@ public class MetadataStoreTest extends
BaseMetadataStoreTest {
assertTrue(e.getCause() instanceof
MetadataStoreException.AlreadyClosedException);
}
}
+
+ @Test(dataProvider = "distributedImpl")
+ public void testGetChildrenDistributed(String provider, Supplier<String>
urlSupplier) throws Exception {
+ @Cleanup
+ MetadataStore store1 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+ @Cleanup
+ MetadataStore store2 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+
+ String parent = newKey();
+ byte[] value = "value1".getBytes(StandardCharsets.UTF_8);
+ store1.put(parent, value, Optional.empty()).get();
+ store1.put(parent + "/a", value, Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(), List.of("a"));
+ store1.delete(parent + "/a", Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(),
Collections.emptyList());
+ store1.delete(parent, Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(),
Collections.emptyList());
+ store2.put(parent + "/b", value, Optional.empty()).get();
+ // There is a chance watcher event is not triggered before the
store1.getChildren() call.
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() ->
assertEquals(store1.getChildren(parent).get(), List.of("b")));
+ store2.put(parent + "/c", value, Optional.empty()).get();
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() ->
assertEquals(store1.getChildren(parent).get(), List.of("b", "c")));
+ }
+
+ @Test(dataProvider = "distributedImpl")
+ public void testExistsDistributed(String provider, Supplier<String>
urlSupplier) throws Exception {
+ @Cleanup
+ MetadataStore store1 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+ @Cleanup
+ MetadataStore store2 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+
+ String parent = newKey();
+ byte[] value = "value1".getBytes(StandardCharsets.UTF_8);
+ assertFalse(store1.exists(parent).get());
+ store1.put(parent, value, Optional.empty()).get();
+ assertTrue(store1.exists(parent).get());
+ assertFalse(store1.exists(parent + "/a").get());
+ store2.put(parent + "/a", value, Optional.empty()).get();
+ assertTrue(store1.exists(parent + "/a").get());
+ // There is a chance watcher event is not triggered before the
store1.exists() call.
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> assertFalse(store1.exists(parent +
"/b").get()));
+ }
}