curator-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From randg...@apache.org
Subject [3/3] git commit: more tests copied from TestInterProcessMutexBase
Date Wed, 05 Mar 2014 12:08:46 GMT
more tests copied from TestInterProcessMutexBase


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

Branch: refs/heads/CURATOR-88
Commit: 6477a2f08d9e88dd3d934d18051e1193e44a1274
Parents: 0dcba0f
Author: randgalt <randgalt@apache.org>
Authored: Tue Mar 4 21:14:46 2014 +0530
Committer: randgalt <randgalt@apache.org>
Committed: Tue Mar 4 21:14:46 2014 +0530

----------------------------------------------------------------------
 .../apache/curator/x/rest/api/TestLocks.java    | 58 ++++++++++++++++++++
 1 file changed, 58 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/6477a2f0/curator-x-rest/src/test/java/org/apache/curator/x/rest/api/TestLocks.java
----------------------------------------------------------------------
diff --git a/curator-x-rest/src/test/java/org/apache/curator/x/rest/api/TestLocks.java b/curator-x-rest/src/test/java/org/apache/curator/x/rest/api/TestLocks.java
index 6625388..7aa4585 100644
--- a/curator-x-rest/src/test/java/org/apache/curator/x/rest/api/TestLocks.java
+++ b/curator-x-rest/src/test/java/org/apache/curator/x/rest/api/TestLocks.java
@@ -19,6 +19,7 @@
 
 package org.apache.curator.x.rest.api;
 
+import com.google.common.collect.Lists;
 import org.apache.curator.framework.recipes.locks.InterProcessLock;
 import org.apache.curator.test.KillSession;
 import org.apache.curator.test.TestingServer;
@@ -266,4 +267,61 @@ public class TestLocks extends BaseClassForTests
         KillSession.kill(getCuratorRestContext().getClient().getZookeeperClient().getZooKeeper(),
server.getConnectString());
         Assert.assertTrue(timing.acquireSemaphore(semaphore, 1));
     }
+
+    @Test
+    public void testThreading() throws Exception
+    {
+        final int THREAD_QTY = 10;
+
+        final AtomicBoolean hasLock = new AtomicBoolean(false);
+        final AtomicBoolean isFirst = new AtomicBoolean(true);
+        final Semaphore semaphore = new Semaphore(1);
+
+        List<Future<Object>> threads = Lists.newArrayList();
+        ExecutorService service = Executors.newCachedThreadPool();
+        for ( int i = 0; i < THREAD_QTY; ++i )
+        {
+            final InterProcessLock mutex = new InterProcessLockBridge(restClient, sessionManager,
uriMaker);
+            Future<Object> t = service.submit
+                (
+                    new Callable<Object>()
+                    {
+                        @Override
+                        public Object call() throws Exception
+                        {
+                            semaphore.acquire();
+                            mutex.acquire();
+                            Assert.assertTrue(hasLock.compareAndSet(false, true));
+                            try
+                            {
+                                if ( isFirst.compareAndSet(true, false) )
+                                {
+                                    semaphore.release(THREAD_QTY - 1);
+                                    while ( semaphore.availablePermits() > 0 )
+                                    {
+                                        Thread.sleep(100);
+                                    }
+                                }
+                                else
+                                {
+                                    Thread.sleep(100);
+                                }
+                            }
+                            finally
+                            {
+                                mutex.release();
+                                hasLock.set(false);
+                            }
+                            return null;
+                        }
+                    }
+                );
+            threads.add(t);
+        }
+
+        for ( Future<Object> t : threads )
+        {
+            t.get();
+        }
+    }
 }


Mime
View raw message