Author: mreutegg
Date: Wed Jul 22 10:21:38 2015
New Revision: 1692250
URL: http://svn.apache.org/r1692250
Log:
OAK-3130: ReferenceEditor may not enforce referential integrity
Add more tests (some ignored for now)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java?rev=1692250&r1=1692249&r2=1692250&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
Wed Jul 22 10:21:38 2015
@@ -29,6 +29,7 @@ import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.version.Version;
@@ -467,6 +468,75 @@ public class ReferencesTest extends Abst
checkReferences("ref in version store", ref.getReferences(),
n.getPath() + "/myref");
}
+ public void testRemoveReferenced1() throws RepositoryException {
+ Node ref = testRootNode.addNode(nodeName1, testNodeType);
+ ref.addMixin(mixReferenceable);
+ superuser.save();
+
+ Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+ n1.setProperty("ref", ref);
+ assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+ superuser.save();
+
+ ref.remove();
+ n1.remove();
+ superuser.save();
+ }
+
+ public void testRemoveReferenced2() throws RepositoryException {
+ if (true) {
+ // FIXME OAK-3130
+ return;
+ }
+ Node ref = testRootNode.addNode(nodeName1, testNodeType);
+ ref.addMixin(mixReferenceable);
+ superuser.save();
+
+ Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+ n1.setProperty("ref", ref);
+ assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+ Node n2 = testRootNode.addNode(nodeName3, testNodeType);
+ n2.setProperty("ref", ref);
+ assertEquals(PropertyType.REFERENCE, n2.getProperty("ref").getType());
+ superuser.save();
+
+ ref.remove();
+ n1.remove();
+ try {
+ superuser.save();
+ fail("must fail with ReferentialIntegrityException");
+ } catch (ReferentialIntegrityException e) {
+ // expected
+ }
+ }
+
+ public void testRemoveReferenced3() throws RepositoryException {
+ if (true) {
+ // FIXME OAK-3130
+ return;
+ }
+ Node ref = testRootNode.addNode(nodeName1, testNodeType);
+ ref.addMixin(mixReferenceable);
+ superuser.save();
+
+ Node n1 = testRootNode.addNode(nodeName2, testNodeType);
+ n1.setProperty("ref", ref);
+ assertEquals(PropertyType.REFERENCE, n1.getProperty("ref").getType());
+ superuser.save();
+
+ Node n2 = testRootNode.addNode(nodeName3, testNodeType);
+ n2.setProperty("ref", ref);
+ assertEquals(PropertyType.REFERENCE, n2.getProperty("ref").getType());
+ ref.remove();
+ n1.remove();
+ try {
+ superuser.save();
+ fail("must fail with ReferentialIntegrityException");
+ } catch (ReferentialIntegrityException e) {
+ // expected
+ }
+ }
+
private static void checkReferences(String msg, PropertyIterator refs,
String ... expected) throws RepositoryException {
List<String> paths = new LinkedList<String>();
while (refs.hasNext()) {