You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2013/07/16 13:56:22 UTC

svn commit: r1503670 - /jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java

Author: mduerig
Date: Tue Jul 16 11:56:22 2013
New Revision: 1503670

URL: http://svn.apache.org/r1503670
Log:
JCR-3621: Race condition in MixinTest between event delivery and unregistering the observation listener
Move observation listener deregistration to a finally block

Modified:
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java?rev=1503670&r1=1503669&r2=1503670&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/observation/MixinTest.java Tue Jul 16 11:56:22 2013
@@ -40,16 +40,18 @@ public class MixinTest extends AbstractO
 
         EventResult propertyAddedListener = new EventResult(log);
         addEventListener(propertyAddedListener, new String[]{mixReferenceable}, Event.PROPERTY_ADDED);
-
-        testRootNode.getNode(nodeName1).setProperty(propertyName1, "test");
-        testRootNode.getNode(nodeName2).setProperty(propertyName1, "test");
-        testRootNode.getNode(nodeName3).setProperty(propertyName1, "test");
-        testRootNode.save();
-
-        removeEventListener(propertyAddedListener);
-        Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
-        checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
-                                               nodeName3 + "/" + propertyName1});
+        try {
+            testRootNode.getNode(nodeName1).setProperty(propertyName1, "test");
+            testRootNode.getNode(nodeName2).setProperty(propertyName1, "test");
+            testRootNode.getNode(nodeName3).setProperty(propertyName1, "test");
+            testRootNode.save();
+
+            Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
+            checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
+                                                   nodeName3 + "/" + propertyName1});
+        } finally {
+            removeEventListener(propertyAddedListener);
+        }
     }
 
     /**
@@ -63,17 +65,19 @@ public class MixinTest extends AbstractO
 
         EventResult propertyAddedListener = new EventResult(log);
         addEventListener(propertyAddedListener, new String[]{mixReferenceable, mixLockable}, Event.PROPERTY_ADDED);
-
-        testRootNode.getNode(nodeName1).setProperty(propertyName1, "test");
-        testRootNode.getNode(nodeName2).setProperty(propertyName1, "test");
-        testRootNode.getNode(nodeName3).setProperty(propertyName1, "test");
-        testRootNode.save();
-
-        removeEventListener(propertyAddedListener);
-        Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
-        checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
-                                               nodeName2 + "/" + propertyName1,
-                                               nodeName3 + "/" + propertyName1});
+        try {
+            testRootNode.getNode(nodeName1).setProperty(propertyName1, "test");
+            testRootNode.getNode(nodeName2).setProperty(propertyName1, "test");
+            testRootNode.getNode(nodeName3).setProperty(propertyName1, "test");
+            testRootNode.save();
+
+            Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
+            checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
+                                                   nodeName2 + "/" + propertyName1,
+                                                   nodeName3 + "/" + propertyName1});
+        } finally {
+            removeEventListener(propertyAddedListener);
+        }
     }
 
     /**
@@ -91,16 +95,18 @@ public class MixinTest extends AbstractO
 
         EventResult propertyAddedListener = new EventResult(log);
         addEventListener(propertyAddedListener, new String[]{mixReferenceable}, Event.PROPERTY_ADDED);
-
-        node1.setProperty(propertyName1, "test");
-        node2.setProperty(propertyName1, "test");
-        node3.setProperty(propertyName1, "test");
-        testRootNode.save();
-
-        removeEventListener(propertyAddedListener);
-        Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
-        checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
-                                               nodeName3 + "/" + propertyName1});
+        try {
+            node1.setProperty(propertyName1, "test");
+            node2.setProperty(propertyName1, "test");
+            node3.setProperty(propertyName1, "test");
+            testRootNode.save();
+
+            Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
+            checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1,
+                                                   nodeName3 + "/" + propertyName1});
+        } finally {
+            removeEventListener(propertyAddedListener);
+        }
     }
 
     /**
@@ -117,13 +123,15 @@ public class MixinTest extends AbstractO
         EventResult propertyAddedListener = new EventResult(log);
         // mix:versionable is derived from mix:referenceable
         addEventListener(propertyAddedListener, new String[]{mixReferenceable}, Event.PROPERTY_ADDED);
-
-        node1.setProperty(propertyName1, "test");
-        testRootNode.save();
-
-        removeEventListener(propertyAddedListener);
-        Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
-        checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1});
+        try {
+            node1.setProperty(propertyName1, "test");
+            testRootNode.save();
+
+            Event[] added = propertyAddedListener.getEvents(DEFAULT_WAIT_TIMEOUT);
+            checkPropertyAdded(added, new String[]{nodeName1 + "/" + propertyName1});
+        } finally {
+            removeEventListener(propertyAddedListener);
+        }
     }
 
     /**