You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ca...@apache.org on 2014/08/20 02:34:38 UTC

git commit: CURATOR-134 - Added unit test to reproduce the issue. Modification to the testing cluster to allow restarting.

Repository: curator
Updated Branches:
  refs/heads/CURATOR-134 [created] ddcdc844b


CURATOR-134 - Added unit test to reproduce the issue. Modification to
the testing cluster to allow restarting.

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

Branch: refs/heads/CURATOR-134
Commit: ddcdc844b93f5bea19574d92ca1855b67e12d57b
Parents: d2c37d0
Author: Cameron McKenzie <ca...@unico.com.au>
Authored: Wed Aug 20 10:34:04 2014 +1000
Committer: Cameron McKenzie <ca...@unico.com.au>
Committed: Wed Aug 20 10:34:04 2014 +1000

----------------------------------------------------------------------
 .../framework/imps/TestConnectionState.java     | 90 ++++++++++++++++++++
 .../org/apache/curator/test/TestingCluster.java | 12 +++
 2 files changed, 102 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/ddcdc844/curator-framework/src/test/java/org/apache/curator/framework/imps/TestConnectionState.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestConnectionState.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestConnectionState.java
new file mode 100644
index 0000000..33a9ee7
--- /dev/null
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestConnectionState.java
@@ -0,0 +1,90 @@
+package org.apache.curator.framework.imps;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.state.ConnectionState;
+import org.apache.curator.framework.state.ConnectionStateListener;
+import org.apache.curator.retry.RetryNTimes;
+import org.apache.curator.test.BaseClassForTests;
+import org.apache.curator.test.TestingCluster;
+import org.apache.curator.utils.CloseableUtils;
+import org.testng.Assert;
+import org.testng.ITestContext;
+import org.testng.annotations.Test;
+
+public class TestConnectionState extends BaseClassForTests
+{
+    public void beforeSuite(ITestContext context) {
+        
+    }
+    
+    @Test
+    public void testLostConnectionState() throws Exception
+    {
+        server.close();
+        
+        int sessionTimeout = 30000;
+        int numRetries = 3;
+        int msBetweenRetries = 10000;
+        int connectionTimeoutSeconds = 10000;
+        
+        TestingCluster cluster = new TestingCluster(3);
+        CuratorFramework client = null;
+        
+        try {
+            cluster.start();
+                   
+            client = CuratorFrameworkFactory
+                    .builder()
+                    .connectString(cluster.getConnectString())
+                    .sessionTimeoutMs(sessionTimeout)
+                    .connectionTimeoutMs(connectionTimeoutSeconds)
+                    .retryPolicy(new RetryNTimes(numRetries, msBetweenRetries))
+                    .canBeReadOnly(true).build();
+    
+            final CountDownLatch lostLatch = new CountDownLatch(1);
+            client.getConnectionStateListenable().addListener(
+                    new ConnectionStateListener()
+                    {
+                        
+                        @Override
+                        public void stateChanged(CuratorFramework client, ConnectionState newState)
+                        {
+                            if(newState == ConnectionState.LOST) {
+                                lostLatch.countDown();
+                            }
+                        }
+                    });
+    
+            client.start();
+            
+            Assert.assertTrue(client.blockUntilConnected(5, TimeUnit.SECONDS), "Failed to establish connection");
+            
+            //Restart the server        
+            cluster.restart();
+                        
+            //Wait for reconnection
+            Assert.assertTrue(client.blockUntilConnected(5, TimeUnit.SECONDS), "Failed to reestablish connection");
+            
+            cluster.stop();
+                        
+            long stopTime = System.currentTimeMillis();
+
+            long maxWaitTimeMS = ((numRetries + 2) * (msBetweenRetries + connectionTimeoutSeconds));
+            boolean lost = lostLatch.await(maxWaitTimeMS, TimeUnit.MILLISECONDS);
+            long lostTime = System.currentTimeMillis();
+            Assert.assertTrue(lost, "LOST state was not achieved");
+            
+            //Make sure that the lost event occurred after the right amount of time
+            Assert.assertTrue(lostTime - stopTime > numRetries * msBetweenRetries, "LOST state was achieved too early");
+            
+            
+        } finally {       
+            CloseableUtils.closeQuietly(client);
+            CloseableUtils.closeQuietly(cluster);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/ddcdc844/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java b/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
index cd86b72..a189342 100644
--- a/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
+++ b/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
@@ -154,6 +154,18 @@ public class TestingCluster implements Closeable
             server.start();
         }
     }
+    
+    /**
+     * Restart the ensemble.
+     * @throws Exception
+     */
+    public void     restart() throws Exception
+    {
+        for ( TestingZooKeeperServer server : servers )
+        {
+            server.restart();
+        }
+    }
 
     /**
      * Shutdown the ensemble WITHOUT freeing resources, etc.