Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java (revision 1549886) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java (working copy) @@ -17,13 +17,14 @@ package org.apache.jackrabbit.oak.jcr.version; import javax.jcr.Node; +import javax.jcr.NodeIterator; import javax.jcr.Property; +import javax.jcr.PropertyIterator; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.version.Version; import javax.jcr.version.VersionException; import javax.jcr.version.VersionManager; - import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.test.AbstractJCRTest; @@ -69,7 +70,7 @@ /** * Test from Jackrabbit: JCR-3635 (OAK-940) - * + *

* Tests the case when a node already has a manual set * JcrConstants.JCR_FROZENUUID property and is versioned. The manual set * frozenUuid will overwrite the one that is automatically assigned by the @@ -113,4 +114,34 @@ assertTrue(node.isCheckedOut()); assertTrue(newNode.isNew()); } + + public void testRemoveAndCreateSameVersionableChildNode() throws Exception { + // create parent + Node parentNode = testRootNode.addNode("parent"); + parentNode.setPrimaryType("nt:unstructured"); + parentNode.setProperty("name", "sample"); + // crete a versionable child + Node createdNode = parentNode.addNode("versionablechild", "nt:unstructured"); + createdNode.addMixin(JcrConstants.MIX_VERSIONABLE); + superuser.save(); + + VersionManager vm = superuser.getWorkspace().getVersionManager(); + vm.checkin(testRootNode.getPath()+"/parent/versionablechild"); + + // delete and create exact same node + Node parent = testRootNode.getNode("parent"); + + // remove children + NodeIterator nodes = parent.getNodes(); + while (nodes.hasNext()) { + Node childNode = nodes.nextNode(); + childNode.remove(); + } +// superuser.save(); // <-- enabling this makes the test pass + + // create again versionable child node + Node recreatedNode = parent.addNode("versionablechild", "nt:unstructured"); + recreatedNode.addMixin(JcrConstants.MIX_VERSIONABLE); + superuser.save(); + } }