Author: mreutegg
Date: Wed Dec 16 12:40:39 2015
New Revision: 1720350
URL: http://svn.apache.org/viewvc?rev=1720350&view=rev
Log:
JCR-3733: Sometimes hierarchy conflict between concurrent add/delete isn't
detected
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java?rev=1720350&r1=1720349&r2=1720350&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
Wed Dec 16 12:40:39 2015
@@ -19,12 +19,20 @@
package org.apache.jackrabbit.oak.plugins.document;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.junit.Ignore;
+import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CommitTest {
+ @Rule
+ public DocumentMKBuilderProvider builderProvider = new
DocumentMKBuilderProvider();
+
@Test
public void testModifiedTime(){
assertEquals(10, NodeDocument.getModifiedInSecs(10000));
@@ -33,4 +41,40 @@ public class CommitTest {
assertEquals(15, NodeDocument.getModifiedInSecs(15000));
assertEquals(15, NodeDocument.getModifiedInSecs(15006));
}
+
+ // OAK-3733
+ @Ignore("OAK-3733")
+ @Test
+ public void detectConflict() throws Exception {
+ // prepare node store
+ DocumentNodeStore ns = builderProvider.newBuilder().getNodeStore();
+ NodeBuilder b = ns.getRoot().builder();
+ b.child("foo");
+ b.child("bar");
+ ns.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+ b = ns.getRoot().builder();
+ b.child("foo").remove();
+ ns.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+ // this commit should fail
+ Commit c = ns.newCommit(ns.getHeadRevision(), null);
+ try {
+ c.addNode(new DocumentNodeState(ns, "/foo/baz", c.getRevision()));
+ UpdateOp op = c.getUpdateOperationForNode("/bar");
+ op.setMapEntry("p", c.getRevision(), "v");
+ try {
+ c.apply();
+ ns.done(c, false, null);
+ } catch (DocumentStoreException e) {
+ // expected
+ }
+ } finally {
+ ns.canceled(c);
+ }
+
+ // try to re-create /foo
+ b = ns.getRoot().builder();
+ b.child("foo");
+ ns.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+ }
}