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