Return-Path: X-Original-To: apmail-jackrabbit-commits-archive@www.apache.org Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D82124460 for ; Mon, 11 Jul 2011 16:11:55 +0000 (UTC) Received: (qmail 22346 invoked by uid 500); 11 Jul 2011 16:11:55 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 22299 invoked by uid 500); 11 Jul 2011 16:11:55 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 22290 invoked by uid 99); 11 Jul 2011 16:11:54 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Jul 2011 16:11:54 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Jul 2011 16:11:52 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id AE38A23888C2; Mon, 11 Jul 2011 16:11:30 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1145226 - in /jackrabbit/trunk/jackrabbit-core: pom.xml src/test/java/org/apache/jackrabbit/core/NodeImplTest.java Date: Mon, 11 Jul 2011 16:11:30 -0000 To: commits@jackrabbit.apache.org From: reschke@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110711161130.AE38A23888C2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: reschke Date: Mon Jul 11 16:11:30 2011 New Revision: 1145226 URL: http://svn.apache.org/viewvc?rev=1145226&view=rev Log: JCR-3018 - add test case demonstrating transient space corruption after sequence of failed/successful save() operations Modified: jackrabbit/trunk/jackrabbit-core/pom.xml jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java Modified: jackrabbit/trunk/jackrabbit-core/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/pom.xml?rev=1145226&r1=1145225&r2=1145226&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/pom.xml (original) +++ jackrabbit/trunk/jackrabbit-core/pom.xml Mon Jul 11 16:11:30 2011 @@ -101,11 +101,13 @@ org.apache.jackrabbit.core.xml.DocumentViewTest#testMultiValue org.apache.jackrabbit.core.ConcurrentImportTest +org.apache.jackrabbit.core.NodeImplTest#testReferentialIntegrityCorruptionGetPath org.apache.jackrabbit.core.integration.ConcurrentQueryTest#testConcurrentQueryWithDeletes org.apache.jackrabbit.test.api.ShareableNodeTest#testGetName org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNode org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNodes org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNodesByPattern +org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNodesByPattern Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java?rev=1145226&r1=1145225&r2=1145226&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java Mon Jul 11 16:11:30 2011 @@ -335,4 +335,66 @@ public class NodeImplTest extends Abstra session.save(); } + /** + * Test corruption in session / persistence state after + * {@link ReferentialIntegrityException}. + *

+ * This is a variant of {@link #testReferentialIntegrityCorruption()} + * that checks that {@link Node#getPath()} works after the save operation. + * + * @see JCR-3018 + */ + public void testReferentialIntegrityCorruptionGetPath() throws Exception { + Session session = testRootNode.getSession(); + Node root = testRootNode.addNode("testReferentialIntegrityCorruption"); + + // Create test nodes P1 and P2 + Node nodeP1 = root.addNode("P1"); + nodeP1.addMixin("mix:referenceable"); + Node nodeP2 = root.addNode("P2"); + nodeP2.addMixin("mix:referenceable"); + session.save(); + + // Create reference from P2 to P1 and save + nodeP2.setProperty("referencetoP1", nodeP1); + session.save(); + + // Add node P3 + Node nodeP3 = root.addNode("P3"); + nodeP3.addMixin("mix:referenceable"); + + String nodeP3path = nodeP3.getPath(); + + // And try to remove P1 while P2 still references P1 + nodeP1.remove(); + try { + session.save(); + } catch (ReferentialIntegrityException expected) { + // Got ReferentialIntegrityException as expected + } + + // Remove P2 and save again, this will succeed. As P1, P2 + // should be removed and P3 should exist + try { + nodeP2.remove(); + session.save(); + } catch (Exception e) { + String msg = "JCR-3018: Saving delete after" + + " ReferentialIntegrityException failed"; + log.error(msg, e); + fail(msg); + } + + try { + assertEquals(nodeP3path, nodeP3.getPath()); + nodeP3 = session.getNodeByIdentifier(nodeP3.getIdentifier()); + } catch (Exception e) { + String msg = "JCR-3018: getting path of P3 failed. Corrupt session?"; + log.error(msg, e); + fail(msg); + } + + root.remove(); + session.save(); + } }