Author: mduerig
Date: Mon Oct 6 15:18:42 2014
New Revision: 1629676
URL: http://svn.apache.org/r1629676
Log:
OAK-2165: Sporadic test failure of JackrabbitNodeTest#testRenameEventHandling
on Windows CI
Avoid using org.apache.jackrabbit.test.api.observation.EventResult, which smells
Modified:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java?rev=1629676&r1=1629675&r2=1629676&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
Mon Oct 6 15:18:42 2014
@@ -16,20 +16,27 @@
*/
package org.apache.jackrabbit.oak.jcr;
+import static com.google.common.collect.Lists.newArrayList;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
import java.io.InputStreamReader;
import java.io.Reader;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.JackrabbitNode;
import org.apache.jackrabbit.commons.cnd.CndImporter;
import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.apache.jackrabbit.test.api.observation.EventResult;
/**
* JackrabbitNodeTest: Copied and slightly adjusted from
org.apache.jackrabbit.api.JackrabbitNodeTest,
@@ -86,13 +93,27 @@ public class JackrabbitNodeTest extends
}
}
- public void testRenameEventHandling() throws RepositoryException {
+ public void testRenameEventHandling() throws RepositoryException,
InterruptedException {
Session s = getHelper().getSuperuserSession();
ObservationManager mgr = s.getWorkspace().getObservationManager();
- EventResult result = new EventResult(log);
+ final List<Event> events = newArrayList();
+ final CountDownLatch latch1 = new CountDownLatch(1);
+ final CountDownLatch latch2 = new CountDownLatch(1);
try {
- mgr.addEventListener(result,
Event.PERSIST|Event.NODE_ADDED|Event.NODE_MOVED|Event.NODE_REMOVED,
testRootNode.getPath(), true, null, null, false);
+ mgr.addEventListener(new EventListener() {
+ CountDownLatch latch = latch1;
+ @Override
+ public void onEvent(EventIterator eventIterator) {
+ synchronized (events) {
+ while (eventIterator.hasNext()) {
+ events.add(eventIterator.nextEvent());
+ }
+ latch.countDown();
+ latch = latch2;
+ }
+ }
+ },
Event.PERSIST|Event.NODE_ADDED|Event.NODE_MOVED|Event.NODE_REMOVED,
testRootNode.getPath(), true, null, null, false);
NodeIterator it = testRootNode.getNodes();
@@ -102,17 +123,20 @@ public class JackrabbitNodeTest extends
JackrabbitNode node = (JackrabbitNode) n;
node.rename(name + 'X');
superuser.save();
+ latch1.await(5, SECONDS);
boolean foundMove = false;
- StringBuffer diags = new StringBuffer();
- for (Event event : result.getEvents(5000)) {
- if (diags.length() != 0) {
- diags.append(", ");
- }
- diags.append("type " + event.getType() + " " + event.getDate()
+ "ms " + event.getPath());
- if (Event.NODE_MOVED == event.getType()) {
- foundMove = true;
- break;
+ StringBuilder diags = new StringBuilder();
+ synchronized (events) {
+ for (Event event : events) {
+ if (diags.length() != 0) {
+ diags.append(", ");
+ }
+ diags.append("type " + event.getType() + " " +
event.getDate() + "ms " + event.getPath());
+ if (Event.NODE_MOVED == event.getType()) {
+ foundMove = true;
+ break;
+ }
}
}
if (diags.length() == 0) {
@@ -123,13 +147,16 @@ public class JackrabbitNodeTest extends
// force another event, wait some more
testRootNode.addNode(name + "XYZ");
superuser.save();
+ latch2.await(60, SECONDS);
StringBuffer addDiags = new StringBuffer();
- for (Event event : result.getEvents(60000)) {
- if (addDiags.length() != 0) {
- addDiags.append(", ");
+ synchronized (events) {
+ for (Event event : events) {
+ if (addDiags.length() != 0) {
+ addDiags.append(", ");
+ }
+ addDiags.append("type " + event.getType() + " " +
event.getDate() + "ms " + event.getPath());
}
- addDiags.append("type " + event.getType() + " " +
event.getDate() + "ms " + event.getPath());
}
if (addDiags.length() > 0) {
@@ -141,7 +168,6 @@ public class JackrabbitNodeTest extends
fail("Expected NODE_MOVED event upon renaming a node
(received: " + diags + ")");
}
} finally {
- mgr.removeEventListener(result);
s.logout();
}
}