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 tr...@apache.org on 2013/12/19 23:52:58 UTC

svn commit: r1552450 - in /jackrabbit/oak/trunk/oak-jcr: pom.xml src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java

Author: tripod
Date: Thu Dec 19 22:52:58 2013
New Revision: 1552450

URL: http://svn.apache.org/r1552450
Log:
Adding tests for OAK-1299 and OAK-1300

- OAK-1299 Removing user from group also invalidates other members memberships
- OAK-1300 Removing a reference from a mv property destroys the reverse lookup from the remaining

Modified:
    jackrabbit/oak/trunk/oak-jcr/pom.xml
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1552450&r1=1552449&r2=1552450&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Thu Dec 19 22:52:58 2013
@@ -49,6 +49,7 @@
       org.apache.jackrabbit.test.api.WorkspaceCopyTest#testCopyNodesLocked                             <!-- OAK-118 -->
       org.apache.jackrabbit.test.api.WorkspaceMoveSameNameSibsTest#testMoveNodesOrderingSupportedByParent <!-- OAK-118 -->
       org.apache.jackrabbit.test.api.WorkspaceMoveTest#testMoveNodesLocked                             <!-- OAK-118 -->
+      org.apache.jackrabbit.oak.jcr.ReferencesTest#testMVRemoveReferences                              <!-- OAK-1300 -->
 
       <!-- Locking : not fully implemented -->
       org.apache.jackrabbit.test.api.lock.LockTest#testNodeLocked
@@ -120,6 +121,7 @@
 
       <!-- User Management -->
       org.apache.jackrabbit.oak.jcr.security.user.RefreshTest#testAuthorizableGetProperty            <!-- OAK-1124 -->
+      org.apache.jackrabbit.oak.jcr.security.user.GroupTest#testMoveUserToOtherGroup                 <!-- OAK-1299 -->
 
       <!-- Query -->
       org.apache.jackrabbit.test.api.query.ElementTest#testElementTestNameTestSomeNTWithSNS          <!-- OAK-203 -->

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=1552450&r1=1552449&r2=1552450&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 Thu Dec 19 22:52:58 2013
@@ -245,7 +245,7 @@ public class ReferencesTest extends Abst
     }
 
     // OAK-1257
-    public void testMVReferencesAltering() throws RepositoryException {
+    public void testMVAddAltering() throws RepositoryException {
         Node ref0 = testRootNode.addNode(nodeName2, testNodeType);
         ref0.addMixin(mixReferenceable);
         Node ref1 = testRootNode.addNode(nodeName3, testNodeType);
@@ -283,6 +283,46 @@ public class ReferencesTest extends Abst
         checkReferences("refs", ref2.getReferences(), n.getPath() + "/myref");
     }
 
+    // OAK-1300
+    public void testMVRemoveReferences() throws RepositoryException {
+        Node ref0 = testRootNode.addNode(nodeName2, testNodeType);
+        ref0.addMixin(mixReferenceable);
+        Node ref1 = testRootNode.addNode(nodeName3, testNodeType);
+        ref1.addMixin(mixReferenceable);
+        Node ref2 = testRootNode.addNode(nodeName4, testNodeType);
+        ref2.addMixin(mixReferenceable);
+        superuser.save();
+
+        Node n = testRootNode.addNode(nodeName1, testNodeType);
+        Value[] vs = new Value[]{
+                superuser.getValueFactory().createValue(ref0),
+                superuser.getValueFactory().createValue(ref1),
+                superuser.getValueFactory().createValue(ref2)
+        };
+        n.setProperty("myref", vs);
+        superuser.save();
+
+        assertEquals("ref0", ref0.getIdentifier(), n.getProperty("myref").getValues()[0].getString());
+        assertEquals("ref1", ref1.getIdentifier(), n.getProperty("myref").getValues()[1].getString());
+        assertEquals("ref2", ref2.getIdentifier(), n.getProperty("myref").getValues()[2].getString());
+        checkReferences("refs", ref0.getReferences(), n.getPath() + "/myref");
+        checkReferences("refs", ref1.getReferences(), n.getPath() + "/myref");
+        checkReferences("refs", ref2.getReferences(), n.getPath() + "/myref");
+
+        vs = new Value[]{
+                superuser.getValueFactory().createValue(ref1),
+                superuser.getValueFactory().createValue(ref2)
+        };
+        n.setProperty("myref", vs);
+        superuser.save();
+
+        assertEquals("ref1", ref1.getIdentifier(), n.getProperty("myref").getValues()[0].getString());
+        assertEquals("ref2", ref2.getIdentifier(), n.getProperty("myref").getValues()[1].getString());
+        checkReferences("refs", ref0.getReferences());
+        checkReferences("refs", ref1.getReferences(), n.getPath() + "/myref");
+        checkReferences("refs", ref2.getReferences(), n.getPath() + "/myref");
+    }
+
     public void testVersionReferencesVH() throws RepositoryException {
         Node n = testRootNode.addNode(nodeName1, testNodeType);
         n.addMixin(mixVersionable);

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java?rev=1552450&r1=1552449&r2=1552450&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java Thu Dec 19 22:52:58 2013
@@ -17,10 +17,13 @@
 package org.apache.jackrabbit.oak.jcr.security.user;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
+
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 
@@ -29,6 +32,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.util.Text;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -728,4 +732,64 @@ public class GroupTest extends AbstractU
             assertFalse(groupId.equals(it.next().getID()));
         }
     }
+
+    @Test
+    public void testMoveUserToOtherGroup() throws Exception {
+        User user1  = userMgr.createUser(createUserId(), "p");
+        User user2  = userMgr.createUser(createUserId(), "p");
+        Group grp1 = userMgr.createGroup(createGroupId());
+        Group grp2 = userMgr.createGroup(createGroupId());
+
+        grp1.addMember(user1);
+        grp1.addMember(user2);
+        superuser.save();
+
+        checkDeclaredMembers(grp1, user1.getID(), user2.getID());
+        checkDeclaredMembers(grp2);
+        checkDeclaredMemberOf(user1, grp1.getID());
+        checkDeclaredMemberOf(user2, grp1.getID());
+
+        grp1.removeMember(user1);
+        superuser.save();
+
+        checkDeclaredMembers(grp1, user2.getID());
+        checkDeclaredMembers(grp2);
+        checkDeclaredMemberOf(user1);
+        checkDeclaredMemberOf(user2, grp1.getID());
+
+        grp2.addMember(user1);
+        superuser.save();
+
+        checkDeclaredMembers(grp1, user2.getID());
+        checkDeclaredMembers(grp2, user1.getID());
+        checkDeclaredMemberOf(user1, grp2.getID());
+        checkDeclaredMemberOf(user2, grp1.getID());
+    }
+
+    private void checkDeclaredMembers(Group grp, String ... ids) throws RepositoryException {
+        TreeSet<String> members = new TreeSet<String>();
+        Iterator<Authorizable> iter = grp.getMembers();
+        while (iter.hasNext()) {
+            members.add(iter.next().getID());
+        }
+        Arrays.sort(ids);
+        assertEquals(
+                "Group members",
+                Text.implode(ids, ","),
+                Text.implode(members.toArray(new String[members.size()]), ","));
+    }
+
+    private void checkDeclaredMemberOf(Authorizable auth, String ... ids) throws RepositoryException {
+        TreeSet<String> members = new TreeSet<String>();
+        Iterator<Group> iter = auth.declaredMemberOf();
+        while (iter.hasNext()) {
+            members.add(iter.next().getID());
+        }
+        Arrays.sort(ids);
+        assertEquals(
+                "Group memberships",
+                Text.implode(ids, ","),
+                Text.implode(members.toArray(new String[members.size()]), ","));
+    }
+
 }
\ No newline at end of file