Repository: curator
Updated Branches:
  refs/heads/CURATOR-479 [created] 818783391


fixed CachedModeledFrameworkImpl children queries, 
https://issues.apache.org/jira/browse/CURATOR-479


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/1429676e
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/1429676e
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/1429676e

Branch: refs/heads/CURATOR-479
Commit: 1429676ea43ecfbfe3dd7f28f222d58105e41d3f
Parents: d13a12f
Author: Hendrik Haddorp <hendrik.hadd...@gmx.net>
Authored: Sat Dec 8 21:42:11 2018 +0100
Committer: Hendrik Haddorp <hendrik.hadd...@gmx.net>
Committed: Sat Dec 8 21:42:11 2018 +0100

----------------------------------------------------------------------
 .../details/CachedModeledFrameworkImpl.java     |  4 +-
 .../modeled/TestCachedModeledFramework.java     | 48 +++++++++++++++++++-
 2 files changed, 49 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/1429676e/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
index f701ab3..10d7379 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
@@ -248,7 +248,7 @@ class CachedModeledFrameworkImpl<T> implements 
CachedModeledFramework<T>
         List<ZPath> paths = cache.currentChildren(client.modelSpec().path())
             .keySet()
             .stream()
-            .filter(path -> path.equals(cache.basePath()))
+            .filter(path -> path.startsWith(client.modelSpec().path()) && 
!path.equals(client.modelSpec().path()))
             .collect(Collectors.toList());
         return completed(paths);
     }
@@ -259,7 +259,7 @@ class CachedModeledFrameworkImpl<T> implements 
CachedModeledFramework<T>
         List<ZNode<T>> nodes = cache.currentChildren(client.modelSpec().path())
             .entrySet()
             .stream()
-            .filter(e -> e.getKey().equals(cache.basePath()))
+            .filter(e -> e.getKey().startsWith(client.modelSpec().path()) && 
!e.getKey().equals(client.modelSpec().path()))
             .map(Map.Entry::getValue)
             .collect(Collectors.toList());
         return completed(nodes);

http://git-wip-us.apache.org/repos/asf/curator/blob/1429676e/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
index 80c1f8b..73dc017 100644
--- 
a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
+++ 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
@@ -27,6 +27,8 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 import java.io.IOException;
 import java.math.BigInteger;
+import java.util.HashSet;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Semaphore;
 
@@ -73,7 +75,7 @@ public class TestCachedModeledFramework extends 
TestModeledFrameworkBase
     public void testPostInitializedFilter()
     {
         TestModel model1 = new TestModel("a", "b", "c", 1, BigInteger.ONE);
-        TestModel model2 = new TestModel("d", "e", "e", 1, BigInteger.ONE);
+        TestModel model2 = new TestModel("d", "e", "f", 1, BigInteger.ONE);
         CachedModeledFramework<TestModel> client = 
ModeledFramework.wrap(async, modelSpec).cached();
         Semaphore semaphore = new Semaphore(0);
         ModeledCacheListener<TestModel> listener = (t, p, s, m) -> 
semaphore.release();
@@ -93,4 +95,48 @@ public class TestCachedModeledFramework extends 
TestModeledFrameworkBase
             client.close();
         }
     }
+
+    @Test
+    public void testChildren() throws Exception
+    {
+        TestModel parent = new TestModel("a", "b", "c", 20, BigInteger.ONE);
+        TestModel child1 = new TestModel("d", "e", "f", 1, BigInteger.ONE);
+        TestModel child2 = new TestModel("g", "h", "i", 1, BigInteger.ONE);
+        try (CachedModeledFramework<TestModel> client = 
ModeledFramework.wrap(async, modelSpec).cached())
+        {
+            Semaphore semaphore = new Semaphore(0);
+            client.listenable().addListener((t, p, s, m) ->
+            {
+                if (m.equals(child2))
+                {
+                    semaphore.release();
+                }
+            });
+
+            client.start();
+            complete(client.child("p").set(parent));
+            complete(client.child("p").child("c1").set(child1));
+            complete(client.child("p").child("c2").set(child2));
+            Assert.assertTrue(timing.forWaiting().acquireSemaphore(semaphore));
+
+            complete(client.child("p").children(), (v, e) ->
+            {
+               Assert.assertEquals(v.size(), 2);
+               
Assert.assertTrue(v.contains(client.child("p").child("c1").modelSpec().path()));
+               
Assert.assertTrue(v.contains(client.child("p").child("c2").modelSpec().path()));
+            });
+
+            complete(client.child("p").childrenAsZNodes(), (v, e) ->
+            {
+               Assert.assertEquals(v.size(), 2);
+               Set<TestModel> children = new HashSet<>();
+               children.add(child1);
+               children.add(child2);
+               for (ZNode<TestModel> node: v)
+               {
+                   Assert.assertTrue(children.contains(node.model()));
+               }
+            });
+        }
+    }
 }

Reply via email to