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())); + } + }); + } + } }