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()
     {