You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ti...@apache.org on 2023/03/10 12:16:04 UTC
[curator] branch master updated: CURATOR-600: ModeledFramework.delete should use DeleteOptions (#449)
This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/curator.git
The following commit(s) were added to refs/heads/master by this push:
new 5e22c96e CURATOR-600: ModeledFramework.delete should use DeleteOptions (#449)
5e22c96e is described below
commit 5e22c96e94a1a47695af474ee6d11e6d5274fd49
Author: Kezhu Wang <ke...@gmail.com>
AuthorDate: Fri Mar 10 20:15:55 2023 +0800
CURATOR-600: ModeledFramework.delete should use DeleteOptions (#449)
---
.../modeled/details/ModeledFrameworkImpl.java | 2 +-
.../x/async/CompletableBaseClassForTests.java | 15 ++++++++++
.../x/async/modeled/TestModeledFramework.java | 35 ++++++++++++++++++++++
3 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
index 99568ac4..82f2ad5c 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
@@ -231,7 +231,7 @@ public class ModeledFrameworkImpl<T> implements ModeledFramework<T>
@Override
public AsyncStage<Void> delete(int version)
{
- return dslClient.delete().withVersion(version).forPath(modelSpec.path().fullPath());
+ return dslClient.delete().withOptionsAndVersion(modelSpec.deleteOptions(), version).forPath(modelSpec.path().fullPath());
}
@Override
diff --git a/curator-x-async/src/test/java/org/apache/curator/x/async/CompletableBaseClassForTests.java b/curator-x-async/src/test/java/org/apache/curator/x/async/CompletableBaseClassForTests.java
index 1b587fb6..074eb2d5 100644
--- a/curator-x-async/src/test/java/org/apache/curator/x/async/CompletableBaseClassForTests.java
+++ b/curator-x-async/src/test/java/org/apache/curator/x/async/CompletableBaseClassForTests.java
@@ -18,6 +18,7 @@
*/
package org.apache.curator.x.async;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.fail;
import com.google.common.base.Throwables;
import org.apache.curator.test.BaseClassForTests;
@@ -32,6 +33,20 @@ public abstract class CompletableBaseClassForTests extends BaseClassForTests
{
protected static final Timing2 timing = new Timing2();
+ protected void joinThrowable(CompletionStage<?> stage) throws Throwable {
+ try {
+ stage.toCompletableFuture().get();
+ } catch (Exception ex) {
+ throw Throwables.getRootCause(ex);
+ }
+ }
+
+ protected void exceptional(CompletionStage<?> stage, Class<? extends Throwable> throwable) {
+ assertThrows(throwable, () -> {
+ joinThrowable(stage);
+ });
+ }
+
protected <T, U> void complete(CompletionStage<T> stage)
{
complete(stage, (v, e) -> {
diff --git a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
index 6daca592..dea41b7f 100644
--- a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
+++ b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
@@ -33,6 +33,7 @@ import org.apache.curator.framework.schema.SchemaViolation;
import org.apache.curator.retry.RetryOneTime;
import org.apache.curator.x.async.AsyncCuratorFramework;
import org.apache.curator.x.async.AsyncStage;
+import org.apache.curator.x.async.api.DeleteOption;
import org.apache.curator.x.async.modeled.models.TestModel;
import org.apache.curator.x.async.modeled.models.TestNewerModel;
import org.apache.curator.x.async.modeled.versioned.Versioned;
@@ -106,6 +107,40 @@ public class TestModeledFramework extends TestModeledFrameworkBase
complete(client.children(), (children, e) -> assertEquals(Sets.newHashSet(children), expected));
}
+ @Test
+ public void testDelete()
+ {
+ ModeledFramework<TestModel> client = ModeledFramework.wrap(async, modelSpec);
+ complete(client.set(new TestModel()));
+
+ Stat stat = new Stat();
+ client.child("a").set(new TestModel(), stat);
+ exceptional(client.child("a").delete(stat.getVersion() + 1), KeeperException.BadVersionException.class);
+ complete(client.child("a").delete(stat.getVersion()));
+
+ client.child("b").set(new TestModel());
+ complete(client.child("b").delete(-1));
+
+ client.child("c").set(new TestModel());
+
+ exceptional(client.delete(), KeeperException.NotEmptyException.class);
+
+ ModelSpec<TestModel> deleteChildren = ModelSpec
+ .builder(modelSpec.path(), modelSpec.serializer())
+ .withDeleteOptions(Collections.singleton(DeleteOption.deletingChildrenIfNeeded))
+ .build();
+
+ complete(ModeledFramework.wrap(async, deleteChildren).delete());
+ exceptional(ModeledFramework.wrap(async, deleteChildren).delete(), KeeperException.NoNodeException.class);
+ exceptional(client.read(), KeeperException.NoNodeException.class);
+
+ ModelSpec<TestModel> quietly = ModelSpec
+ .builder(modelSpec.path(), modelSpec.serializer())
+ .withDeleteOptions(Collections.singleton(DeleteOption.quietly))
+ .build();
+ complete(ModeledFramework.wrap(async, quietly).delete());
+ }
+
@Test
public void testBadNode()
{