You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2011/07/08 16:29:35 UTC
svn commit: r1144332 -
/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java
Author: reschke
Date: Fri Jul 8 14:29:35 2011
New Revision: 1144332
URL: http://svn.apache.org/viewvc?rev=1144332&view=rev
Log:
JCR-3016 - add a test that shows that save() can leave the transient state in a broken state (not attached to TestAll because it may cause a repository inconsistency)
Added:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java (with props)
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java?rev=1144332&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java Fri Jul 8 14:29:35 2011
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core;
+
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.jackrabbit.test.AbstractJCRTest;
+
+public class OverlappingNodeAddTest extends AbstractJCRTest {
+
+ private Node testfolder;
+ private Session s1;
+ private Session s2;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ testfolder = testRootNode.addNode("container", "nt:folder");
+ s1 = testfolder.getSession();
+ s2 = getHelper().getReadWriteSession();
+ s1.save();
+ }
+
+ /**
+ * Performs add operations on a single node (no SNS) through 2 sessions
+ */
+ public void testWith2Folders() throws Exception {
+
+ boolean bWasSaved = false;
+
+ String testpath = testfolder.getPath();
+
+ Node f1 = s1.getNode(testpath).addNode("folder", "nt:folder");
+ Node c1 = f1.addNode("a", "nt:file");
+ Node r1 = c1.addNode("jcr:content", "nt:resource");
+ r1.setProperty("jcr:data", "foo");
+
+ Node f2 = s2.getNode(testpath).addNode("folder", "nt:folder");
+ Node c2 = f2.addNode("b", "nt:file");
+ Node r2 = c2.addNode("jcr:content", "nt:resource");
+ r2.setProperty("jcr:data", "bar");
+
+ s1.save();
+
+ String s1FolderId = f1.getIdentifier();
+
+ try {
+ s2.save();
+ bWasSaved = true;
+ } catch (InvalidItemStateException ex) {
+ // expected
+
+ // retry; adding refresh doesn't change anything here
+ try {
+ s2.save();
+
+ bWasSaved = true;
+
+ } catch (InvalidItemStateException ex2) {
+ // we would be cool with this
+ }
+ }
+
+ // we don't have changes in s1, so the keepChanges flag should be irrelevant
+ s1.refresh(false);
+
+ // be nice and get a new Node instance
+ Node newf1 = s1.getNode(testpath + "/folder");
+
+ // if bWasSaved it should now be visible to Session 1
+ assertEquals("'b' was saved, so session 1 should see it", bWasSaved,
+ newf1.hasNode("b"));
+
+ // 'a' was saved by Session 1 earlier on
+ if (!newf1.hasNode("a")) {
+ String message = "child node 'a' not present";
+
+ if (bWasSaved && !s1FolderId.equals(newf1.getIdentifier())) {
+ message += ", and also the folder's identifier changed from "
+ + s1FolderId + " to " + newf1.getIdentifier();
+ }
+
+ Node oldf1 = null;
+
+ try {
+ oldf1 = s1.getNodeByIdentifier(s1FolderId);
+ } catch (ItemNotFoundException ex) {
+ message += "; node with id "
+ + s1FolderId
+ + " can't be retrieved using getNodeByIdentifier either";
+ }
+
+ if (oldf1 != null) {
+ try {
+ oldf1.getPath();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ message += "; node with id "
+ + s1FolderId
+ + " can be retrieved using getNodeByIdentifier, but getPath() fails with: "
+ + ex.getMessage();
+ }
+ }
+
+ fail(message);
+ }
+ }
+
+ protected void tearDown() throws Exception {
+ if (s2 != null) {
+ s2.logout();
+ s2 = null;
+ }
+ super.tearDown();
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/OverlappingNodeAddTest.java
------------------------------------------------------------------------------
svn:executable = *