You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/06/27 11:03:08 UTC

svn commit: r1354377 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Author: mduerig
Date: Wed Jun 27 09:03:07 2012
New Revision: 1354377

URL: http://svn.apache.org/viewvc?rev=1354377&view=rev
Log:
OAK-144: Implement observation
- replace Thread.sleep() with CountdownLatch in test case

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1354377&r1=1354376&r2=1354377&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java Wed Jun 27 09:03:07 2012
@@ -28,11 +28,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.FutureTask;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jcr.Binary;
 import javax.jcr.GuestCredentials;
@@ -1454,7 +1456,7 @@ public class RepositoryTest extends Abst
 
     @Ignore // TODO implement observation
     @Test
-    public void observation() throws RepositoryException {
+    public void observation() throws RepositoryException, InterruptedException {
         final Set<String> addNodes = toSet(
                 TEST_PATH + "/1",
                 TEST_PATH + "/2",
@@ -1481,6 +1483,7 @@ public class RepositoryTest extends Abst
                 TEST_PATH + "/2/jcr:primaryType");
 
         final List<Event> failedEvents = new ArrayList<Event>();
+        final AtomicReference<CountDownLatch> eventCount = new AtomicReference<CountDownLatch>();
 
         ObservationManager obsMgr = getSession().getWorkspace().getObservationManager();
         obsMgr.addEventListener(new EventListener() {
@@ -1522,12 +1525,14 @@ public class RepositoryTest extends Abst
                         catch (RepositoryException e) {
                             failedEvents.add(event);
                         }
+                        eventCount.get().countDown();
                     }
                 }
             },
             Event.NODE_ADDED | Event.NODE_REMOVED | Event.NODE_MOVED | Event.PROPERTY_ADDED |
             Event.PROPERTY_REMOVED | Event.PROPERTY_CHANGED | Event.PERSIST, "/", true, null, null, false);
 
+        eventCount.set(new CountDownLatch(7));
         Node n = getNode(TEST_PATH);
         n.setProperty("prop0", "val0");
         Node n1 = n.addNode("1");
@@ -1535,27 +1540,16 @@ public class RepositoryTest extends Abst
         n1.setProperty("prop2", "val2");
         n.addNode("2");
         getSession().save();
+        assertTrue(eventCount.get().await(1, TimeUnit.SECONDS));
 
-        try {
-            Thread.sleep(1000);
-        }
-        catch (InterruptedException e) {
-            // FIXME wait rather than sleep
-        }
-
+        eventCount.set(new CountDownLatch(8));
         n.setProperty("property", 42);
         n.addNode("3").setProperty("prop3", "val3");
         n1.setProperty("prop1", "val1 new");
         n1.getProperty("prop2").remove();
         n.getNode("2").remove();
         getSession().save();
-
-        try {
-            Thread.sleep(1000);
-        }
-        catch (InterruptedException e) {
-            // FIXME wait rather than sleep
-        }
+        assertTrue(eventCount.get().await(1, TimeUnit.SECONDS));
 
         assertTrue("failedEvents not empty: " + failedEvents, failedEvents.isEmpty());
         assertTrue("addNodes not empty: " + addNodes, addNodes.isEmpty());