Index: src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java (revision 1625962) +++ src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeTest.java (working copy) @@ -21,6 +21,7 @@ import static junit.framework.Assert.fail; import java.util.List; +import java.util.UUID; import javax.jcr.Node; import javax.jcr.Session; @@ -31,6 +32,7 @@ import javax.jcr.nodetype.NodeTypeTemplate; import javax.jcr.nodetype.PropertyDefinitionTemplate; +import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest; import org.apache.jackrabbit.oak.jcr.NodeStoreFixture; import org.junit.Test; @@ -149,4 +151,32 @@ } } + @Test + public void inconsistentMixRef() throws Exception { + Session session = getAdminSession(); + + // works + Node a = session.getNode("/").addNode("a" + System.currentTimeMillis()); + a.setProperty("jcr:uuid", UUID.randomUUID().toString()); + session.save(); + + // doesn't work + try { + Node b = session.getNode("/").addNode( + "b" + System.currentTimeMillis()); + b.addMixin(JcrConstants.MIX_REFERENCEABLE); + b.setProperty("jcr:uuid", UUID.randomUUID().toString()); + session.save(); + fail(); + } catch (ConstraintViolationException expected) { + // javax.jcr.nodetype.ConstraintViolationException: Property is + // protected: jcr:uuid = xxxx + } + + // works again + Node c = session.getNode("/").addNode("c" + System.currentTimeMillis()); + c.setProperty("jcr:uuid", UUID.randomUUID().toString()); + c.addMixin(JcrConstants.MIX_REFERENCEABLE); + session.save(); + } }