Removing peer nodes throws RepositoryException
----------------------------------------------
Key: JCR-1807
URL: https://issues.apache.org/jira/browse/JCR-1807
Project: Jackrabbit
Issue Type: Bug
Components: jackrabbit-core
Affects Versions: core 1.4.6
Reporter: Brian Whipple
The following UnitTest will reproduce the error. Note that 3 peer nodes must
be removed to produce the exception. Additional testing shows that the paths
are corrupted after the second remove.
Also note that Node.getPath (per the comment in the test) must be invoked to
produce the path corruption.
This unit test is based on the jackrabbit-jcr-tests test framework. I will
attach the java file too. Here is the test:
package org.apache.jackrabbit.test.api;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.test.AbstractJCRTest;
/**
* <code>RemoveNodeTest</code> contains the test cases for the method
* <code>Node.remove()</code>.
*
* @test
* @sources RemoveNodeTest.java
* @executeClass org.apache.jackrabbit.test.api.RemoveNodeTest
* @keywords level2
*/
public class RemoveNodeTest extends AbstractJCRTest
{
private static final String CHILD_NAME = "child";
public void testAddThenRemovePeerNodes() throws Exception
{
// Must remove at least three peers so need to add three peer nodes
long NUM_SIB_NODES = 3;
for (long i = 0; i < NUM_SIB_NODES; i++)
{
testRootNode.addNode(CHILD_NAME);
}
// If this method is not invoked the test will pass
// Getting the child node paths contributes to the error
getPaths();
// Remove all nodes
removeNodes();
testRootNode.save();
// Validate that all nodes have been removed.
long numChildren = testRootNode.getNodes(CHILD_NAME).getSize();
assertEquals("Invalid number of child nodes", 0, numChildren);
}
private void getPaths() throws RepositoryException
{
NodeIterator childNodes = testRootNode.getNodes(CHILD_NAME);
while (childNodes.hasNext())
{
Node child = childNodes.nextNode();
child.getPath();
}
}
private void removeNodes() throws RepositoryException
{
NodeIterator childNodes = testRootNode.getNodes(CHILD_NAME);
while (childNodes.hasNext())
{
Node child = childNodes.nextNode();
child.remove();
}
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.