Repository: curator
Updated Branches:
  refs/heads/CURATOR-397 8418c5604 -> b58d1ccba


resurrected TestCachedModeledCuratorFramework


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

Branch: refs/heads/CURATOR-397
Commit: b58d1ccba2878c0b2f12928b4e957f536c24fed8
Parents: 8418c56
Author: randgalt <[email protected]>
Authored: Sun Apr 30 15:43:03 2017 -0500
Committer: randgalt <[email protected]>
Committed: Sun Apr 30 15:43:03 2017 -0500

----------------------------------------------------------------------
 .../CachedModeledCuratorFrameworkImpl.java      | 22 ++++-
 .../details/ModeledCuratorFrameworkImpl.java    |  5 -
 .../TestCachedModeledCuratorFramework.java      | 96 ++++++++++++++++++++
 3 files changed, 117 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/b58d1ccb/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledCuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledCuratorFrameworkImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledCuratorFrameworkImpl.java
index c17dc9f..47ad72d 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledCuratorFrameworkImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledCuratorFrameworkImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.curator.x.async.modeled.details;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.api.transaction.CuratorOp;
 import org.apache.curator.framework.api.transaction.CuratorTransactionResult;
@@ -34,6 +35,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -50,6 +52,9 @@ class CachedModeledCuratorFrameworkImpl<T> implements 
CachedModeledCuratorFramew
         this.path = Objects.requireNonNull(path, "path cannot be null");
     }
 
+    @VisibleForTesting
+    volatile AtomicInteger debugCachedReadCount = null;
+
     @Override
     public ModeledCache<T> getCache()
     {
@@ -130,6 +135,10 @@ class CachedModeledCuratorFrameworkImpl<T> implements 
CachedModeledCuratorFramew
                 {
                     DataTree.copyStat(localData.getStat(), storingStatIn);
                 }
+                if ( debugCachedReadCount != null )
+                {
+                    debugCachedReadCount.incrementAndGet();
+                }
                 return new ModelStage<>(model);
             }
         }
@@ -164,7 +173,14 @@ class CachedModeledCuratorFrameworkImpl<T> implements 
CachedModeledCuratorFramew
     public AsyncStage<Stat> checkExists()
     {
         Optional<ModeledCachedNode<T>> data = cache.getCurrentData(path);
-        return data.map(node -> (AsyncStage<Stat>)new 
ModelStage<>(node.getStat())).orElseGet(client::checkExists);
+        return data.map(node -> {
+            AsyncStage<Stat> stage = new ModelStage<>(node.getStat());
+            if ( debugCachedReadCount != null )
+            {
+                debugCachedReadCount.incrementAndGet();
+            }
+            return stage;
+        }).orElseGet(client::checkExists);
     }
 
     @Override
@@ -184,6 +200,10 @@ class CachedModeledCuratorFrameworkImpl<T> implements 
CachedModeledCuratorFramew
             }
             else
             {
+                if ( debugCachedReadCount != null )
+                {
+                    debugCachedReadCount.incrementAndGet();
+                }
                 Map<ZPath, AsyncStage<T>> map = 
children.stream().collect(Collectors.toMap(Function.identity(), path1 -> 
at(path1.nodeName()).read()));
                 modelStage.complete(map);
             }

http://git-wip-us.apache.org/repos/asf/curator/blob/b58d1ccb/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
index c7ab3fc..6ed0649 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.curator.x.async.modeled.details;
 
-import com.google.common.annotations.VisibleForTesting;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.api.CuratorEvent;
 import org.apache.curator.framework.api.UnhandledErrorListener;
@@ -47,7 +46,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.UnaryOperator;
 import java.util.stream.Collectors;
 
@@ -168,9 +166,6 @@ public class ModeledCuratorFrameworkImpl<T> implements 
ModeledCuratorFramework<T
         return read(null);
     }
 
-    @VisibleForTesting
-    volatile AtomicInteger debugCachedReadCount = null;
-
     @Override
     public AsyncStage<T> read(Stat storingStatIn)
     {

http://git-wip-us.apache.org/repos/asf/curator/blob/b58d1ccb/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/details/TestCachedModeledCuratorFramework.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/details/TestCachedModeledCuratorFramework.java
 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/details/TestCachedModeledCuratorFramework.java
new file mode 100644
index 0000000..4a0bed1
--- /dev/null
+++ 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/details/TestCachedModeledCuratorFramework.java
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.curator.x.async.modeled.details;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.utils.CloseableUtils;
+import org.apache.curator.x.async.CompletableBaseClassForTests;
+import org.apache.curator.x.async.modeled.CachedModeledCuratorFramework;
+import org.apache.curator.x.async.modeled.CuratorModelSpec;
+import org.apache.curator.x.async.modeled.JacksonModelSerializer;
+import org.apache.curator.x.async.modeled.ModelSerializer;
+import org.apache.curator.x.async.modeled.ModeledCuratorFramework;
+import org.apache.curator.x.async.modeled.ZPath;
+import org.apache.curator.x.async.modeled.models.TestSimpleModel;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class TestCachedModeledCuratorFramework extends 
CompletableBaseClassForTests
+{
+    private static final ZPath path = ZPath.parse("/test/path");
+    private CuratorFramework rawClient;
+    private CachedModeledCuratorFramework<TestSimpleModel> client;
+
+    @BeforeMethod
+    @Override
+    public void setup() throws Exception
+    {
+        super.setup();
+
+        rawClient = 
CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), 
timing.connection(), new RetryOneTime(1));
+        rawClient.start();
+
+        ModelSerializer<TestSimpleModel> serializer = new 
JacksonModelSerializer<>(TestSimpleModel.class);
+        client = ModeledCuratorFramework.builder(rawClient, 
CuratorModelSpec.builder(path, serializer).build()).build().cached();
+    }
+
+    @AfterMethod
+    @Override
+    public void teardown() throws Exception
+    {
+        CloseableUtils.closeQuietly(rawClient);
+        super.teardown();
+    }
+
+    @Test
+    public void testBasic() throws InterruptedException
+    {
+        client.start();
+
+        AtomicInteger counter = new AtomicInteger();
+        ((CachedModeledCuratorFrameworkImpl)client).debugCachedReadCount = 
counter;
+
+        complete(client.read());
+        Assert.assertEquals(counter.get(), 0);
+
+        complete(client.set(new TestSimpleModel("test", 10)));
+        Assert.assertEquals(counter.get(), 0);
+
+        timing.sleepABit();
+
+        complete(client.read());
+        Assert.assertEquals(counter.get(), 1);
+        counter.set(0);
+
+        complete(client.set(new TestSimpleModel("test2", 20)));
+        Assert.assertEquals(counter.get(), 0);
+
+        timing.sleepABit();
+
+        complete(client.read(), (model, e) -> Assert.assertEquals(model, new 
TestSimpleModel("test2", 20)));
+        Assert.assertEquals(counter.get(), 1);
+
+        client.close();
+    }
+}

Reply via email to