You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2013/03/06 15:13:16 UTC

svn commit: r1453337 - /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java

Author: alexparvulescu
Date: Wed Mar  6 14:13:15 2013
New Revision: 1453337

URL: http://svn.apache.org/r1453337
Log:
OAK-14 Identify and document changes in behaviour wrt. Jackrabbit 2

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java?rev=1453337&r1=1453336&r2=1453337&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CompatibilityIssuesTest.java Wed Mar  6 14:13:15 2013
@@ -20,6 +20,7 @@ import javax.jcr.InvalidItemStateExcepti
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.nodetype.ConstraintViolationException;
 
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -35,7 +36,8 @@ import static org.junit.Assert.fail;
 
 /**
  * This class contains test cases which demonstrate changes in behaviour wrt. to Jackrabbit 2.
- * See OAK-14: Identify and document changes in behaviour wrt. Jackrabbit 2
+ * 
+ * @see <a href="https://issues.apache.org/jira/browse/OAK-14">OAK-14: Identify and document changes in behaviour wrt. Jackrabbit 2</a>
  */
 public class CompatibilityIssuesTest extends AbstractRepositoryTest {
 
@@ -141,4 +143,54 @@ public class CompatibilityIssuesTest ext
         assertEquals("", x.getParent().getName());      // fails on JR2, passes on Oak
     }
 
+    /**
+     * Type checks are deferred to the Session#save call instead of the
+     * Node#addNode method like in Jackrabbit2.
+     * <p>Stacktrace in JR2:</p>
+     * <pre>
+     * {@code
+     * javax.jcr.nodetype.ConstraintViolationException: No child node definition for fail found in node /f1362578560413
+     *     at org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1276)
+     *     at org.apache.jackrabbit.core.session.AddNodeOperation.perform(AddNodeOperation.java:111)
+     *     at org.apache.jackrabbit.core.session.AddNodeOperation.perform(AddNodeOperation.java:1)
+     *     at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
+     *     at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
+     *     at org.apache.jackrabbit.core.NodeImpl.addNodeWithUuid(NodeImpl.java:1814)
+     *     at org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1774)
+     * }
+     * <pre>
+     * <p>Stacktrace in Oak:</p>
+     * <pre>
+     * {@code
+     *javax.jcr.nodetype.ConstraintViolationException
+     *    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+     *    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
+     *    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
+     *    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
+     *    at org.apache.jackrabbit.oak.api.CommitFailedException.throwRepositoryException(CommitFailedException.java:57)
+     *    at org.apache.jackrabbit.oak.jcr.SessionDelegate.save(SessionDelegate.java:258)
+     *    at org.apache.jackrabbit.oak.jcr.SessionImpl.save(SessionImpl.java:277)
+     *    ...
+     *Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: Cannot add node 'f1362578685631' at /
+     *    at org.apache.jackrabbit.oak.plugins.nodetype.TypeValidator.childNodeAdded(TypeValidator.java:128)
+     *    at org.apache.jackrabbit.oak.spi.commit.CompositeValidator.childNodeAdded(CompositeValidator.java:68)
+     *    at org.apache.jackrabbit.oak.spi.commit.ValidatingHook$ValidatorDiff.childNodeAdded(ValidatingHook.java:159)
+     *    at org.apache.jackrabbit.oak.core.RootImpl.commit(RootImpl.java:250)
+     *    at org.apache.jackrabbit.oak.jcr.SessionDelegate.save(SessionDelegate.java:255)
+     *    ...
+     *Caused by: javax.jcr.nodetype.ConstraintViolationException: Node 'jcr:content' in 'nt:file' is mandatory
+     *    at org.apache.jackrabbit.oak.plugins.nodetype.EffectiveNodeTypeImpl.checkMandatoryItems(EffectiveNodeTypeImpl.java:288)
+     *    at org.apache.jackrabbit.oak.plugins.nodetype.TypeValidator.childNodeAdded(TypeValidator.java:125)
+     *    ...
+     * }
+     * <pre>
+     */
+    @Test(expected = ConstraintViolationException.class)
+    public void typeChecksOnSave() throws RepositoryException {
+        Session session = getAdminSession();
+        Node f = session.getNode("/").addNode("f" + System.currentTimeMillis(), "nt:file");
+        f.addNode("fail", "nt:unstructured"); // this is where JR2 throws ConstraintViolationException
+        session.save(); // // this is where OAK throws ConstraintViolationException
+    }
+
 }