Repository: curator
Updated Branches:
  refs/heads/persistent-watch 6cfd38c25 -> 40a985243


finished porting TreeCache tests


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

Branch: refs/heads/persistent-watch
Commit: 40a985243d2959a2fff397eeebb9ff844f6a154c
Parents: 6cfd38c
Author: randgalt <randg...@apache.org>
Authored: Sat Dec 31 19:48:10 2016 -0500
Committer: randgalt <randg...@apache.org>
Committed: Sat Dec 31 19:48:10 2016 -0500

----------------------------------------------------------------------
 .../framework/recipes/watch/TestTreeCache.java  | 140 +++++++++++++++++++
 1 file changed, 140 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/40a98524/curator-recipes/src/test/java/org/apache/curator/framework/recipes/watch/TestTreeCache.java
----------------------------------------------------------------------
diff --git 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/watch/TestTreeCache.java
 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/watch/TestTreeCache.java
index fe3a681..fb05bd3 100644
--- 
a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/watch/TestTreeCache.java
+++ 
b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/watch/TestTreeCache.java
@@ -19,9 +19,11 @@
 package org.apache.curator.framework.recipes.watch;
 
 import org.apache.curator.test.KillServerSession;
+import org.apache.curator.utils.CloseableUtils;
 import org.apache.zookeeper.CreateMode;
 import org.testng.Assert;
 import org.testng.annotations.Test;
+import java.util.concurrent.Semaphore;
 
 public class TestTreeCache extends BaseTestTreeCache
 {
@@ -409,4 +411,142 @@ public class TestTreeCache extends BaseTestTreeCache
 
         assertNoMoreEvents();
     }
+
+    @Test
+    public void testBasics() throws Exception
+    {
+        client.create().forPath("/test");
+
+        cache = newTreeCacheWithListeners(client, "/test");
+        cache.start();
+        assertEvent(CacheEvent.NODE_CREATED, "/test");
+        assertEvent(CacheEvent.CACHE_REFRESHED);
+        assertChildNodeNames("/test");
+        Assert.assertNull(cache.get("/t"));
+        Assert.assertNull(cache.get("/testing"));
+
+        client.create().forPath("/test/one", "hey there".getBytes());
+        assertEvent(CacheEvent.NODE_CREATED, "/test/one");
+        assertChildNodeNames("/test", "one");
+        Assert.assertEquals(new String(cache.get("/test/one").getData()), "hey 
there");
+        assertChildNodeNames("/test/one");
+        Assert.assertNull(cache.get("/test/o"));
+        Assert.assertNull(cache.get("/test/onely"));
+
+        client.setData().forPath("/test/one", "sup!".getBytes());
+        assertEvent(CacheEvent.NODE_CHANGED, "/test/one");
+        assertChildNodeNames("/test", "one");
+        Assert.assertEquals(new String(cache.get("/test/one").getData()), 
"sup!");
+
+        client.delete().forPath("/test/one");
+        assertEvent(CacheEvent.NODE_DELETED, "/test/one", "sup!".getBytes());
+        assertChildNodeNames("/test");
+
+        assertNoMoreEvents();
+    }
+
+    @Test
+    public void testBasicsOnTwoCaches() throws Exception
+    {
+        CuratorCache cache2 = newTreeCacheWithListeners(client, "/test");
+        cache2.getListenable().removeListener(eventListener);  // Don't listen 
on the second cache.
+
+        // Just ensures the same event count; enables test flow control on 
cache2.
+        final Semaphore semaphore = new Semaphore(0);
+        cache2.getListenable().addListener(new CacheListener()
+        {
+            @Override
+            public void process(CacheEvent event, String path, CachedNode 
affectedNode)
+            {
+                semaphore.release();
+            }
+        });
+
+        try
+        {
+            client.create().forPath("/test");
+
+            cache = newTreeCacheWithListeners(client, "/test");
+            cache.start();
+            cache2.start();
+
+            assertEvent(CacheEvent.NODE_CREATED, "/test");
+            assertEvent(CacheEvent.CACHE_REFRESHED);
+            semaphore.acquire(2);
+
+            client.create().forPath("/test/one", "hey there".getBytes());
+            assertEvent(CacheEvent.NODE_CREATED, "/test/one");
+            Assert.assertEquals(new String(cache.get("/test/one").getData()), 
"hey there");
+            semaphore.acquire();
+            Assert.assertEquals(new String(cache2.get("/test/one").getData()), 
"hey there");
+
+            client.setData().forPath("/test/one", "sup!".getBytes());
+            assertEvent(CacheEvent.NODE_CHANGED, "/test/one");
+            Assert.assertEquals(new String(cache.get("/test/one").getData()), 
"sup!");
+            semaphore.acquire();
+            Assert.assertEquals(new String(cache2.get("/test/one").getData()), 
"sup!");
+
+            client.delete().forPath("/test/one");
+            assertEvent(CacheEvent.NODE_DELETED, "/test/one", 
"sup!".getBytes());
+            Assert.assertNull(cache.get("/test/one"));
+            semaphore.acquire();
+            Assert.assertNull(cache2.get("/test/one"));
+
+            assertNoMoreEvents();
+            Assert.assertEquals(semaphore.availablePermits(), 0);
+        }
+        finally
+        {
+            CloseableUtils.closeQuietly(cache2);
+        }
+    }
+
+    @Test
+    public void testDeleteNodeAfterCloseDoesntCallExecutor() throws Exception
+    {
+        client.create().forPath("/test");
+
+        cache = newTreeCacheWithListeners(client, "/test");
+        cache.start();
+        assertEvent(CacheEvent.NODE_CREATED, "/test");
+        assertEvent(CacheEvent.CACHE_REFRESHED);
+
+        client.create().forPath("/test/one", "hey there".getBytes());
+        assertEvent(CacheEvent.NODE_CREATED, "/test/one");
+        Assert.assertEquals(new String(cache.get("/test/one").getData()), "hey 
there");
+
+        cache.close();
+        assertNoMoreEvents();
+
+        client.delete().forPath("/test/one");
+        assertNoMoreEvents();
+    }
+
+    /**
+     * Make sure TreeCache gets to a sane state when we can't initially 
connect to server.
+     */
+    @Test
+    public void testServerNotStartedYet() throws Exception
+    {
+        // Stop the existing server.
+        server.stop();
+
+        // Shutdown the existing client and re-create it started.
+        client.close();
+        initCuratorFramework();
+
+        // Start the client disconnected.
+        cache = newTreeCacheWithListeners(client, "/test");
+        cache.start();
+        assertNoMoreEvents();
+
+        // Now restart the server.
+        server.restart();
+        assertEvent(CacheEvent.CACHE_REFRESHED);
+
+        client.create().forPath("/test");
+
+        assertEvent(CacheEvent.NODE_CREATED, "/test");
+        assertNoMoreEvents();
+    }
 }

Reply via email to