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 an...@apache.org on 2017/03/14 09:25:47 UTC
svn commit: r1786860 - in
/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user:
MembershipBaseTest.java MembershipProviderTest.java MembershipTest.java
MembershipWriterTest.java UserValidatorTest.java
Author: angela
Date: Tue Mar 14 09:25:47 2017
New Revision: 1786860
URL: http://svn.apache.org/viewvc?rev=1786860&view=rev
Log:
OAK-5882 : Improve coverage for oak.security code in oak-core (wip)
Added:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipBaseTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipTest.java
- copied, changed from r1785987, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipWriterTest.java
- copied, changed from r1785987, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java
Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipBaseTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipBaseTest.java?rev=1786860&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipBaseTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipBaseTest.java Tue Mar 14 09:25:47 2017
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.security.user;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.util.TreeUtil;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+
+public abstract class MembershipBaseTest extends AbstractSecurityTest implements UserConstants {
+
+ static final int SIZE_TH = 10;
+
+ static final int NUM_USERS = 50;
+ static final int NUM_GROUPS = 50;
+
+ UserManagerImpl userMgr;
+ MembershipProvider mp;
+
+ private Set<String> testUsers = new HashSet<String>();
+ private Set<String> testGroups = new HashSet<String>();
+
+ @Before
+ public void before() throws Exception {
+ super.before();
+ userMgr = new UserManagerImpl(root, namePathMapper, getSecurityProvider());
+ mp = userMgr.getMembershipProvider();
+ // set the threshold low for testing
+ mp.setMembershipSizeThreshold(SIZE_TH);
+ }
+
+ @After
+ public void after() throws Exception {
+ try {
+ root.refresh();
+ for (String path : Iterables.concat(testUsers, testGroups)) {
+ Authorizable auth = userMgr.getAuthorizableByPath(path);
+ if (auth != null) {
+ auth.remove();
+ }
+ }
+ root.commit();
+ } finally {
+ testUsers.clear();
+ testGroups.clear();
+ super.after();
+ }
+ }
+
+ @Nonnull
+ User createUser() throws RepositoryException {
+ String userId = "testUser" + testUsers.size();
+ User usr = userMgr.createUser(userId, "pw");
+ testUsers.add(usr.getPath());
+ return usr;
+ }
+
+ @Nonnull
+ Group createGroup() throws RepositoryException {
+ String groupName = "testGroup" + testGroups.size();
+ Group grp = userMgr.createGroup(groupName);
+ testGroups.add(grp.getPath());
+ return grp;
+ }
+
+
+ @Nonnull
+ List<String> createMembers(@Nonnull Group g, int cnt) throws Exception {
+ List<String> memberPaths = new ArrayList();
+ for (int i = 0; i <= cnt; i++) {
+ User u = createUser();
+ Group gr = createGroup();
+ g.addMembers(u.getID(), gr.getID());
+ memberPaths.add(u.getPath());
+ memberPaths.add(gr.getPath());
+ }
+ return memberPaths;
+ }
+
+ @Nonnull
+ Map<String, String> createIdMap(int start, int end) {
+ Map<String, String> memberIds = Maps.newLinkedHashMap();
+ for (int i = start; i < end; i++) {
+ String memberId = "member" + i;
+ memberIds.put(getContentID(memberId), memberId);
+ }
+ return memberIds;
+ }
+
+ @Nonnull
+ String getContentID(@Nonnull String memberId) {
+ return userMgr.getMembershipProvider().getContentID(memberId, false);
+ }
+
+ @CheckForNull
+ String getContentID(@Nonnull Tree tree) {
+ return TreeUtil.getString(tree, JcrConstants.JCR_UUID);
+ }
+
+ @Nonnull
+ Tree getTree(@Nonnull Authorizable a) throws Exception {
+ return root.getTree(a.getPath());
+ }
+
+ @Nonnull
+ Tree getTree(@Nonnull String path) throws Exception {
+ return root.getTree(path);
+ }
+
+ static void assertMembers(Group grp, Set<String> ms) throws RepositoryException {
+ Set<String> members = new HashSet<String>(ms);
+ Iterator<Authorizable> iter = grp.getMembers();
+ while (iter.hasNext()) {
+ Authorizable member = iter.next();
+ Assert.assertTrue("Group must have member", members.remove(member.getID()));
+ }
+ assertEquals("Group must have all members", 0, members.size());
+ }
+
+ static void assertMemberList(@Nonnull Tree groupTree, int cntRefTrees, int cnt) {
+ Tree list = groupTree.getChild(REP_MEMBERS_LIST);
+ assertTrue(list.exists());
+ assertEquals(cntRefTrees, list.getChildrenCount(5));
+ for (Tree c : list.getChildren()) {
+ PropertyState repMembers = c.getProperty(REP_MEMBERS);
+ assertNotNull(repMembers);
+ assertTrue(SIZE_TH == repMembers.count() || cnt == repMembers.count());
+ }
+ }
+
+}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java?rev=1786860&r1=1786859&r2=1786860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java Tue Mar 14 09:25:47 2017
@@ -16,349 +16,130 @@
*/
package org.apache.jackrabbit.oak.security.user;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.jcr.RepositoryException;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.api.security.user.Authorizable;
+import com.google.common.collect.Sets;
import org.apache.jackrabbit.api.security.user.Group;
import org.apache.jackrabbit.api.security.user.User;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
-import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
+import org.apache.jackrabbit.oak.util.NodeUtil;
import org.apache.jackrabbit.oak.util.TreeUtil;
-import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
/**
- * Tests large group and user graphs.
- * <ul>
- * <li>{@link #NUM_USERS} users</li>
- * <li>{@link #NUM_GROUPS} groups</li>
- * <li>1 group with all users</li>
- * <li>1 user with all groups</li>
- * </ul>
- *
* @since OAK 1.0
*/
-public class MembershipProviderTest extends AbstractSecurityTest implements UserConstants {
-
- private static final int NUM_USERS = 1000;
- private static final int NUM_GROUPS = 1000;
- private static final int SIZE_TH = 10;
-
- private UserManagerImpl userMgr;
- private MembershipProvider mp;
- private Set<String> testUsers = new HashSet<String>();
- private Set<String> testGroups = new HashSet<String>();
+public class MembershipProviderTest extends MembershipBaseTest {
@Before
public void before() throws Exception {
super.before();
- userMgr = new UserManagerImpl(root, namePathMapper, getSecurityProvider());
- mp = userMgr.getMembershipProvider();
- // set the threshold low for testing
- mp.setMembershipSizeThreshold(SIZE_TH);
- }
-
- @After
- public void after() throws Exception {
- try {
- for (String path : Iterables.concat(testUsers, testGroups)) {
- Authorizable auth = userMgr.getAuthorizableByPath(path);
- if (auth != null) {
- auth.remove();
- }
- }
- root.commit();
- } finally {
- testUsers.clear();
- testGroups.clear();
- super.after();
- }
}
@Test
- public void testManyMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- }
- root.commit();
- assertMembers(grp, members);
+ public void testRemoveMember() throws Exception {
+ Group gr = createGroup();
+ User member = createUser();
+ gr.addMember(member);
- // also check storage structure
- Tree tree = root.getTree(grp.getPath());
- assertEquals(
- "rep:members property must have correct number of references",
- SIZE_TH,
- tree.getProperty(REP_MEMBERS).count()
- );
-
- Tree membersList = tree.getChild(REP_MEMBERS_LIST);
- assertTrue(
- "rep:memberList must exist",
- membersList.exists()
- );
-
- assertEquals(
- "rep:memberList must have correct primary type.",
- NT_REP_MEMBER_REFERENCES_LIST,
- membersList.getProperty(JcrConstants.JCR_PRIMARYTYPE).getValue(Type.STRING)
- );
-
- assertEquals(
- "rep:memberList must have correct number of child nodes.",
- (NUM_USERS / SIZE_TH) - 1,
- membersList.getChildrenCount(Long.MAX_VALUE)
- );
+ assertTrue(mp.removeMember(getTree(gr), getTree(member)));
}
@Test
- public void testManyMemberships() throws Exception {
- Set<String> memberships = new HashSet<String>();
- User usr = createUser();
- for (int i = 0; i < NUM_GROUPS; i++) {
- Group grp = createGroup();
- grp.addMember(usr);
- memberships.add(grp.getID());
- }
- root.commit();
-
- Iterator<Group> iter = usr.declaredMemberOf();
- while (iter.hasNext()) {
- Group group = iter.next();
- Assert.assertTrue(memberships.remove(group.getID()));
- }
- assertEquals(0, memberships.size());
- }
+ public void testRemoveMembers() throws Exception {
+ Group gr = createGroup();
+ User member = createUser();
+ Group member2 = createGroup();
+ gr.addMembers(member.getID(), member2.getID());
- @Test
- public void testNestedMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- Set<String> declaredMembers = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < 10; i++) {
- Group g1 = createGroup();
- grp.addMember(g1);
- members.add(g1.getID());
- declaredMembers.add(g1.getID());
- for (int j = 0; j < 10; j++) {
- Group g2 = createGroup();
- g1.addMember(g2);
- members.add(g2.getID());
- for (int k = 0; k < 10; k++) {
- User usr = createUser();
- g2.addMember(usr);
- members.add(usr.getID());
- }
- }
- }
- root.commit();
+ Map m = Maps.newHashMap();
+ m.put(getContentID(member.getID()), member.getID());
+ m.put(getContentID(member2.getID()), member2.getID());
- assertMembers(grp, members);
- Iterator<Authorizable> iter = grp.getDeclaredMembers();
- while (iter.hasNext()) {
- Authorizable member = iter.next();
- Assert.assertTrue(declaredMembers.remove(member.getID()));
- }
- assertEquals(0, declaredMembers.size());
+ Set<String> failed = mp.removeMembers(getTree(gr), m);
+ assertTrue(failed.isEmpty());
}
- @Test
- public void testNestedMemberships() throws Exception {
- Set<String> memberships = new HashSet<String>();
- User user = createUser();
- Group grp = createGroup();
- memberships.add(grp.getID());
- for (int i = 0; i < 10; i++) {
- Group g1 = createGroup();
- grp.addMember(g1);
- memberships.add(g1.getID());
- for (int j = 0; j < 10; j++) {
- Group g2 = createGroup();
- g1.addMember(g2);
- memberships.add(g2.getID());
- g2.addMember(user);
- }
- }
- root.commit();
- Iterator<Group> iter = user.memberOf();
- while (iter.hasNext()) {
- Group group = iter.next();
- Assert.assertTrue(memberships.remove(group.getID()));
- }
- assertEquals(0, memberships.size());
+ @Test
+ public void testRemoveNonMember() throws Exception {
+ assertFalse(mp.removeMember(getTree(createGroup()), getTree(getTestUser())));
}
@Test
- public void testRemoveMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- String[] users = new String[NUM_USERS];
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- users[i] = usr.getID();
- }
- root.commit();
+ public void testRemoveNonMembers() throws Exception {
+ Map<String, String> nonMemberIds = createIdMap(1, 5);
- // remove the first TH users, this should remove all references from rep:members in the group node and remove
- // the rep:members property
- for (int i = 0; i < SIZE_TH; i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.remove(users[i]);
- grp.removeMember(auth);
- }
- root.commit();
-
- assertMembers(grp, members);
-
- // also check storage structure
- Tree tree = root.getTree(grp.getPath());
- assertNull(
- "rep:members property not exist",
- tree.getProperty(REP_MEMBERS)
- );
-
- // now add TH/2 again.
- for (int i = 0; i < SIZE_TH / 2; i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.add(users[i]);
- grp.addMember(auth);
- }
- root.commit();
-
- assertEquals(
- "rep:members property must have correct number of references",
- SIZE_TH / 2,
- tree.getProperty(REP_MEMBERS).count()
- );
- assertMembers(grp, members);
-
- // now remove the users 20-30, this should remove the 2nd overflow node
- for (int i = 2 * SIZE_TH; i < (3 * SIZE_TH); i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.remove(users[i]);
- grp.removeMember(auth);
- }
- root.commit();
-
- assertMembers(grp, members);
-
- Tree membersList = tree.getChild(REP_MEMBERS_LIST);
- assertFalse(
- "the first overflow node must not exist",
- membersList.getChild("1").exists()
- );
-
- // now add 10 users and check if the "1" node exists again
- for (int i = 2 * SIZE_TH; i < (3 * SIZE_TH); i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.add(users[i]);
- grp.addMember(auth);
- }
- root.commit();
- assertMembers(grp, members);
-
- membersList = tree.getChild(REP_MEMBERS_LIST);
- assertTrue("the first overflow node must not exist", membersList.getChild("1").exists()
- );
+ Set<String> expected = Sets.newHashSet(nonMemberIds.values());
+ Set<String> failed = mp.removeMembers(getTree(createGroup()), nonMemberIds);
+ assertEquals(expected, failed);
}
@Test
- public void testAddMembersAgain() throws Exception {
- Set<String> members = new HashSet<String>();
+ public void testAddMemberAgain() throws Exception {
Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- }
+ List<String> memberPaths = createMembers(grp, NUM_USERS);
root.commit();
- for (String id : members) {
- assertFalse(grp.addMember(userMgr.getAuthorizable(id)));
+ Tree groupTree = root.getTree(grp.getPath());
+ for (String path : memberPaths) {
+ Tree memberTree = root.getTree(path);
+ assertFalse(mp.addMember(groupTree, memberTree));
}
}
@Test
- public void testAddMembersAgainOnMembershipProvider() throws Exception {
- Set<String> memberPaths = new HashSet<String>();
+ public void testAddMembersAgain() throws Exception {
Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- memberPaths.add(usr.getPath());
- }
+ List<String> memberPaths = createMembers(grp, NUM_USERS);
root.commit();
- Tree groupTree = root.getTree(grp.getPath());
+ Map<String, String> m = new HashMap();
for (String path : memberPaths) {
Tree memberTree = root.getTree(path);
- assertFalse(mp.addMember(groupTree, memberTree));
- assertFalse(mp.addMember(groupTree, memberTree));
-
String memberId = TreeUtil.getString(memberTree, REP_AUTHORIZABLE_ID);
- Map<String, String> m = new HashMap<String, String>(1);
- m.put(TreeUtil.getString(memberTree, JcrConstants.JCR_UUID), memberId);
-
- Set<String> failed = mp.addMembers(groupTree, m);
- assertFalse(failed.isEmpty());
- assertTrue(failed.contains(memberId));
+ m.put(getContentID(memberTree), memberId);
}
+
+ Set<String> expected = Sets.newHashSet(m.values());
+ Set<String> failed = mp.addMembers(getTree(grp), m);
+ assertFalse(failed.isEmpty());
+ assertEquals(expected, failed);
}
@Test
public void testIsDeclaredMemberTransient() throws Exception {
Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
-
- Tree groupTree = getTree(g);
+ List<String> memberPaths = createMembers(g, NUM_USERS/2);
// test declared members with transient modifications
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
+ for (String path : memberPaths) {
+ assertTrue(mp.isDeclaredMember(getTree(g), getTree(path)));
}
}
@Test
public void testIsDeclaredMember() throws Exception {
Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
+ List<String> memberPaths = createMembers(g, NUM_USERS/2);
root.commit();
- Tree groupTree = getTree(g);
-
// test declared members after commit
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
+ for (String path : memberPaths) {
+ assertTrue(mp.isDeclaredMember(getTree(g), getTree(path)));
}
}
@@ -371,7 +152,6 @@ public class MembershipProviderTest exte
g.addMembers(m1.getID(), m2.getID());
Tree groupTree = getTree(g);
- assertFalse(groupTree.hasChild(REP_MEMBERS_LIST));
// test declared members with transient modifications
assertTrue(mp.isDeclaredMember(groupTree, getTree(m1)));
@@ -384,18 +164,40 @@ public class MembershipProviderTest exte
}
@Test
+ public void testIsDeclaredMemberMissingMembersProperty() throws Exception {
+ Tree grTree = getTree(createGroup());
+ Tree memberTree = getTree(createUser());
+
+ NodeUtil memberList = new NodeUtil(grTree).addChild(REP_MEMBERS_LIST, NT_REP_MEMBER_REFERENCES_LIST);
+ memberList.addChild("member1", NT_REP_MEMBER_REFERENCES).setStrings(REP_MEMBERS, getContentID(memberTree));
+
+ assertTrue(mp.isDeclaredMember(grTree, memberTree));
+ }
+
+ @Test
+ public void testNotIsDeclaredMemberMissingMembersProperty() throws Exception {
+ Tree grTree = getTree(createGroup());
+ Tree memberTree = getTree(createUser());
+
+ NodeUtil memberList = new NodeUtil(grTree).addChild(REP_MEMBERS_LIST, NT_REP_MEMBER_REFERENCES_LIST);
+ memberList.addChild("member1", NT_REP_MEMBER_REFERENCES).setStrings(REP_MEMBERS, getContentID("another"));
+
+ assertFalse(mp.isDeclaredMember(grTree, memberTree));
+ }
+
+ @Test
public void testIsMemberTransient() throws Exception {
Group g = createGroup();
Group g2 = createGroup();
g.addMember(g2);
- List<Authorizable> members = createMembers(g2, 50);
+ List<String> memberPaths = createMembers(g2, NUM_USERS);
Tree groupTree = getTree(g);
// test members with transient modifications
- for (Authorizable a : members) {
- Tree tree = getTree(a);
+ for (String path : memberPaths) {
+ Tree tree = getTree(path);
assertFalse(mp.isDeclaredMember(groupTree, tree));
assertTrue(mp.isMember(groupTree, tree));
}
@@ -407,13 +209,13 @@ public class MembershipProviderTest exte
Group g2 = createGroup();
g.addMember(g2);
- List<Authorizable> members = createMembers(g2, NUM_USERS/2);
+ List<String> memberPaths = createMembers(g2, NUM_USERS/2);
root.commit();
// test members after commit
Tree groupTree = getTree(g);
- for (Authorizable a : members) {
- Tree tree = getTree(a);
+ for (String path : memberPaths) {
+ Tree tree = getTree(path);
assertFalse(mp.isDeclaredMember(groupTree, tree));
assertTrue(mp.isMember(groupTree, tree));
}
@@ -471,133 +273,125 @@ public class MembershipProviderTest exte
@Test
public void testNoMember() throws Exception {
- Group g = createGroup();
- Group notMember = createGroup();
- User notMember2 = createUser();
+ Tree groupTree = getTree(createGroup());
+ Tree notMember = getTree(createGroup());
+ Tree notMember2 = getTree(createUser());
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
+ assertFalse(mp.isDeclaredMember(groupTree, notMember));
+ assertFalse(mp.isDeclaredMember(groupTree, notMember2));
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
+ assertFalse(mp.isMember(groupTree, notMember));
+ assertFalse(mp.isMember(groupTree, notMember2));
root.commit();
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
+ assertFalse(mp.isDeclaredMember(groupTree, notMember));
+ assertFalse(mp.isDeclaredMember(groupTree, notMember2));
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
+ assertFalse(mp.isMember(groupTree, notMember));
+ assertFalse(mp.isMember(groupTree, notMember2));
}
@Test
- public void testAddMembersExceedThreshold() throws Exception {
- Tree groupTree = root.getTree(createGroup().getPath());
+ public void testGetMembersWithRemoved() throws Exception {
+ Group g = createGroup();
+ Group member = createGroup();
+ g.addMember(member);
+ member.remove();
+ root.commit();
+
+ assertFalse(mp.getMembers(getTree(g), AuthorizableType.AUTHORIZABLE, false).hasNext());
+ assertFalse(mp.getMembers(getTree(g), AuthorizableType.AUTHORIZABLE, true).hasNext());
+ }
- // 1. add array of 21 memberIDs exceeding the threshold
- Map<String, String> memberIds = createIdMap(0, 21);
- mp.addMembers(groupTree, memberIds);
+ @Test
+ public void testGetMembersInherited() throws Exception {
+ Group g = createGroup();
+ Group member = createGroup();
+ g.addMember(member);
+ member.addMember(createUser());
+ root.commit();
- PropertyState repMembers = groupTree.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertEquals(SIZE_TH, repMembers.count());
+ Iterator<String> res = mp.getMembers(getTree(g), AuthorizableType.AUTHORIZABLE, true);
+ assertEquals(2, Iterators.size(res));
+ }
- // the members-list must how have two ref-members nodes one with 10 and
- // one with a single ref-value
- assertMemberList(groupTree, 2, 1);
+ @Test
+ public void testGetMembersWithDuplicates() throws Exception {
+ Group g = createGroup();
+ Group member = createGroup();
+ g.addMember(member);
- // 2. add more members without reaching threshold => still 2 ref-nodes
- memberIds = createIdMap(21, 29);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 2, 9);
+ User user = createUser();
+ member.addMember(user);
+ g.addMember(user);
+ root.commit();
- // 3. fill up second ref-members node => a new one must be created
- memberIds = createIdMap(29, 35);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 3, 5);
+ Iterator<String> res = mp.getMembers(getTree(g), AuthorizableType.AUTHORIZABLE, true);
+ assertEquals(2, Iterators.size(res));
+ }
- // 4. remove members from the initial set => ref nodes as before, rep:members prop on group modified
- memberIds.clear();
- memberIds.put(MembershipProvider.getContentID("member1", false), "member1");
- memberIds.put(MembershipProvider.getContentID("member2", false), "member2");
- mp.removeMembers(groupTree, Maps.newHashMap(memberIds));
+ @Test
+ public void testGetMembers() throws Exception {
+ Group g = createGroup();
+ Group member = createGroup();
+ g.addMember(member);
+ member.addMember(createUser());
+ root.commit();
- assertMemberList(groupTree, 3, 5);
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
+ Iterator<String> res = mp.getMembers(getTree(g), AuthorizableType.AUTHORIZABLE, false);
+ assertEquals(1, Iterators.size(res));
+ }
- // 5. add members again => best-tree is the ref-member-node
- memberIds = createIdMap(35, 39);
- mp.addMembers(groupTree, memberIds);
+ @Test
+ public void testGetMembershipInherited() throws Exception {
+ User user = createUser();
+ Group g = createGroup();
+ Group member = createGroup();
+ Group member2 = createGroup();
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
- assertMemberList(groupTree, 3, 9);
+ g.addMember(member);
+ member.addMember(member2);
+ member2.addMember(user);
- // 6. adding more members will fill up rep:members again and create new ref-node
- memberIds = createIdMap(39, 45);
- mp.addMembers(groupTree, memberIds);
+ root.commit();
- assertEquals(SIZE_TH, groupTree.getProperty(REP_MEMBERS).count());
- assertEquals(4, groupTree.getChild(REP_MEMBERS_LIST).getChildrenCount(10));
+ Iterator<String> res = mp.getMembership(getTree(user), true);
+ assertEquals(3, Iterators.size(res));
}
- private User createUser() throws RepositoryException {
- String userId = "testUser" + testUsers.size();
- User usr = userMgr.createUser(userId, "pw");
- testUsers.add(usr.getPath());
- return usr;
- }
+ @Test
+ public void testGetMembershipWithDuplicates() throws Exception {
+ User user = createUser();
+ Group g = createGroup();
+ Group member = createGroup();
+ Group member2 = createGroup();
- private Group createGroup() throws RepositoryException {
- String groupName = "testGroup" + testGroups.size();
- Group grp = userMgr.createGroup(groupName);
- testGroups.add(grp.getPath());
- return grp;
- }
+ g.addMember(member);
+ g.addMember(member2);
+ member.addMember(member2);
+ member2.addMember(user);
- private List<Authorizable> createMembers(@Nonnull Group g, int cnt) throws Exception {
- List<Authorizable> members = new ArrayList();
- for (int i = 0; i <= cnt; i++) {
- User u = createUser();
- Group gr = createGroup();
- g.addMembers(u.getID(), gr.getID());
- members.add(u);
- members.add(gr);
- }
- return members;
- }
+ root.commit();
- private static Map<String, String> createIdMap(int start, int end) {
- Map<String, String> memberIds = Maps.newLinkedHashMap();
- for (int i = start; i < end; i++) {
- String memberId = "member" + i;
- //TODO
- memberIds.put(MembershipProvider.getContentID(memberId, false), memberId);
- }
- return memberIds;
+ Iterator<String> res = mp.getMembership(getTree(user), true);
+ assertEquals(3, Iterators.size(res));
}
- private static void assertMembers(Group grp, Set<String> ms) throws RepositoryException {
- Set<String> members = new HashSet<String>(ms);
- Iterator<Authorizable> iter = grp.getMembers();
- while (iter.hasNext()) {
- Authorizable member = iter.next();
- Assert.assertTrue("Group must have member", members.remove(member.getID()));
- }
- assertEquals("Group must have all members", 0, members.size());
- }
+ @Test
+ public void testGetMembership() throws Exception {
+ User user = createUser();
+ Group g = createGroup();
+ Group member = createGroup();
+ Group member2 = createGroup();
- private static void assertMemberList(@Nonnull Tree groupTree, int cntRefTrees, int cnt) {
- Tree list = groupTree.getChild(REP_MEMBERS_LIST);
- assertTrue(list.exists());
- assertEquals(cntRefTrees, list.getChildrenCount(5));
- for (Tree c : list.getChildren()) {
- PropertyState repMembers = c.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertTrue(SIZE_TH == repMembers.count() || cnt == repMembers.count());
- }
- }
+ g.addMember(member);
+ member.addMember(member2);
+ member2.addMember(user);
+
+ root.commit();
- private Tree getTree(@Nonnull Authorizable a) throws Exception {
- return root.getTree(a.getPath());
+ Iterator<String> res = mp.getMembership(getTree(user), false);
+ assertEquals(1, Iterators.size(res));
}
}
\ No newline at end of file
Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipTest.java (from r1785987, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java&r1=1785987&r2=1786860&rev=1786860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipTest.java Tue Mar 14 09:25:47 2017
@@ -16,132 +16,46 @@
*/
package org.apache.jackrabbit.oak.security.user;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
-import javax.annotation.Nonnull;
-import javax.jcr.RepositoryException;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Maps;
-import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.Group;
import org.apache.jackrabbit.api.security.user.User;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
-import org.apache.jackrabbit.oak.util.TreeUtil;
-import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
/**
* Tests large group and user graphs.
+ *
* <ul>
* <li>{@link #NUM_USERS} users</li>
* <li>{@link #NUM_GROUPS} groups</li>
* <li>1 group with all users</li>
* <li>1 user with all groups</li>
- * </ul>
+ * </ul>
*
* @since OAK 1.0
*/
-public class MembershipProviderTest extends AbstractSecurityTest implements UserConstants {
+public class MembershipTest extends MembershipBaseTest {
- private static final int NUM_USERS = 1000;
- private static final int NUM_GROUPS = 1000;
- private static final int SIZE_TH = 10;
-
- private UserManagerImpl userMgr;
- private MembershipProvider mp;
- private Set<String> testUsers = new HashSet<String>();
- private Set<String> testGroups = new HashSet<String>();
+ private static final int MANY_USERS = 1000;
@Before
public void before() throws Exception {
super.before();
- userMgr = new UserManagerImpl(root, namePathMapper, getSecurityProvider());
- mp = userMgr.getMembershipProvider();
- // set the threshold low for testing
- mp.setMembershipSizeThreshold(SIZE_TH);
- }
-
- @After
- public void after() throws Exception {
- try {
- for (String path : Iterables.concat(testUsers, testGroups)) {
- Authorizable auth = userMgr.getAuthorizableByPath(path);
- if (auth != null) {
- auth.remove();
- }
- }
- root.commit();
- } finally {
- testUsers.clear();
- testGroups.clear();
- super.after();
- }
- }
-
- @Test
- public void testManyMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- }
- root.commit();
- assertMembers(grp, members);
-
- // also check storage structure
- Tree tree = root.getTree(grp.getPath());
- assertEquals(
- "rep:members property must have correct number of references",
- SIZE_TH,
- tree.getProperty(REP_MEMBERS).count()
- );
-
- Tree membersList = tree.getChild(REP_MEMBERS_LIST);
- assertTrue(
- "rep:memberList must exist",
- membersList.exists()
- );
-
- assertEquals(
- "rep:memberList must have correct primary type.",
- NT_REP_MEMBER_REFERENCES_LIST,
- membersList.getProperty(JcrConstants.JCR_PRIMARYTYPE).getValue(Type.STRING)
- );
-
- assertEquals(
- "rep:memberList must have correct number of child nodes.",
- (NUM_USERS / SIZE_TH) - 1,
- membersList.getChildrenCount(Long.MAX_VALUE)
- );
}
@Test
public void testManyMemberships() throws Exception {
Set<String> memberships = new HashSet<String>();
User usr = createUser();
- for (int i = 0; i < NUM_GROUPS; i++) {
+ for (int i = 0; i < MANY_USERS; i++) {
Group grp = createGroup();
grp.addMember(usr);
memberships.add(grp.getID());
@@ -217,86 +131,10 @@ public class MembershipProviderTest exte
}
@Test
- public void testRemoveMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- String[] users = new String[NUM_USERS];
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- users[i] = usr.getID();
- }
- root.commit();
-
- // remove the first TH users, this should remove all references from rep:members in the group node and remove
- // the rep:members property
- for (int i = 0; i < SIZE_TH; i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.remove(users[i]);
- grp.removeMember(auth);
- }
- root.commit();
-
- assertMembers(grp, members);
-
- // also check storage structure
- Tree tree = root.getTree(grp.getPath());
- assertNull(
- "rep:members property not exist",
- tree.getProperty(REP_MEMBERS)
- );
-
- // now add TH/2 again.
- for (int i = 0; i < SIZE_TH / 2; i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.add(users[i]);
- grp.addMember(auth);
- }
- root.commit();
-
- assertEquals(
- "rep:members property must have correct number of references",
- SIZE_TH / 2,
- tree.getProperty(REP_MEMBERS).count()
- );
- assertMembers(grp, members);
-
- // now remove the users 20-30, this should remove the 2nd overflow node
- for (int i = 2 * SIZE_TH; i < (3 * SIZE_TH); i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.remove(users[i]);
- grp.removeMember(auth);
- }
- root.commit();
-
- assertMembers(grp, members);
-
- Tree membersList = tree.getChild(REP_MEMBERS_LIST);
- assertFalse(
- "the first overflow node must not exist",
- membersList.getChild("1").exists()
- );
-
- // now add 10 users and check if the "1" node exists again
- for (int i = 2 * SIZE_TH; i < (3 * SIZE_TH); i++) {
- Authorizable auth = userMgr.getAuthorizable(users[i]);
- members.add(users[i]);
- grp.addMember(auth);
- }
- root.commit();
- assertMembers(grp, members);
-
- membersList = tree.getChild(REP_MEMBERS_LIST);
- assertTrue("the first overflow node must not exist", membersList.getChild("1").exists()
- );
- }
-
- @Test
public void testAddMembersAgain() throws Exception {
Set<String> members = new HashSet<String>();
Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
+ for (int i = 0; i < MANY_USERS; i++) {
User usr = createUser();
grp.addMember(usr);
members.add(usr.getID());
@@ -307,297 +145,4 @@ public class MembershipProviderTest exte
assertFalse(grp.addMember(userMgr.getAuthorizable(id)));
}
}
-
- @Test
- public void testAddMembersAgainOnMembershipProvider() throws Exception {
- Set<String> memberPaths = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- memberPaths.add(usr.getPath());
- }
- root.commit();
-
- Tree groupTree = root.getTree(grp.getPath());
- for (String path : memberPaths) {
- Tree memberTree = root.getTree(path);
- assertFalse(mp.addMember(groupTree, memberTree));
- assertFalse(mp.addMember(groupTree, memberTree));
-
- String memberId = TreeUtil.getString(memberTree, REP_AUTHORIZABLE_ID);
- Map<String, String> m = new HashMap<String, String>(1);
- m.put(TreeUtil.getString(memberTree, JcrConstants.JCR_UUID), memberId);
-
- Set<String> failed = mp.addMembers(groupTree, m);
- assertFalse(failed.isEmpty());
- assertTrue(failed.contains(memberId));
- }
- }
-
- @Test
- public void testIsDeclaredMemberTransient() throws Exception {
- Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
-
- Tree groupTree = getTree(g);
-
- // test declared members with transient modifications
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
- }
- }
-
- @Test
- public void testIsDeclaredMember() throws Exception {
- Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
- root.commit();
-
- Tree groupTree = getTree(g);
-
- // test declared members after commit
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
- }
- }
-
- @Test
- public void testIsDeclaredMemberFew() throws Exception {
- Group g = createGroup();
- Group m1 = createGroup();
- User m2 = createUser();
-
- g.addMembers(m1.getID(), m2.getID());
-
- Tree groupTree = getTree(g);
- assertFalse(groupTree.hasChild(REP_MEMBERS_LIST));
-
- // test declared members with transient modifications
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m2)));
-
- // ... and after commit
- root.commit();
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m2)));
- }
-
- @Test
- public void testIsMemberTransient() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- List<Authorizable> members = createMembers(g2, 50);
-
- Tree groupTree = getTree(g);
-
- // test members with transient modifications
- for (Authorizable a : members) {
- Tree tree = getTree(a);
- assertFalse(mp.isDeclaredMember(groupTree, tree));
- assertTrue(mp.isMember(groupTree, tree));
- }
- }
-
- @Test
- public void testIsMember() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- List<Authorizable> members = createMembers(g2, NUM_USERS/2);
- root.commit();
-
- // test members after commit
- Tree groupTree = getTree(g);
- for (Authorizable a : members) {
- Tree tree = getTree(a);
- assertFalse(mp.isDeclaredMember(groupTree, tree));
- assertTrue(mp.isMember(groupTree, tree));
- }
- }
-
- @Test
- public void testIsMemberFew() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- User m1 = createUser();
- Group m2 = createGroup();
- g2.addMember(m1);
- g2.addMember(m2);
-
- Tree groupTree = getTree(g);
-
- // test members with transient modifications
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m2)));
- assertTrue(mp.isMember(groupTree, getTree(m1)));
- assertTrue(mp.isMember(groupTree, getTree(m2)));
-
- // ... and after commit
- root.commit();
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m2)));
- assertTrue(mp.isMember(groupTree, getTree(m1)));
- assertTrue(mp.isMember(groupTree, getTree(m2)));
- }
-
- @Test
- public void testTransientInMembersList() throws Exception {
- Group g = createGroup();
- createMembers(g, NUM_USERS/2);
- root.commit();
-
- // add another transient member that will end up in the members-ref-list
- User u = createUser();
- g.addMember(u);
-
- Tree groupTree = getTree(g);
- Tree memberTree = getTree(u);
-
- assertTrue(mp.isDeclaredMember(groupTree, memberTree));
- assertTrue(mp.isMember(groupTree, memberTree));
-
- assertFalse(Iterators.contains(mp.getMembership(memberTree, false), groupTree.getPath()));
- assertFalse(Iterators.contains(mp.getMembership(memberTree, true), groupTree.getPath()));
- root.commit();
- assertTrue(Iterators.contains(mp.getMembership(memberTree, false), groupTree.getPath()));
- assertTrue(Iterators.contains(mp.getMembership(memberTree, true), groupTree.getPath()));
- }
-
- @Test
- public void testNoMember() throws Exception {
- Group g = createGroup();
- Group notMember = createGroup();
- User notMember2 = createUser();
-
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
-
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
-
- root.commit();
-
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
-
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
- }
-
- @Test
- public void testAddMembersExceedThreshold() throws Exception {
- Tree groupTree = root.getTree(createGroup().getPath());
-
- // 1. add array of 21 memberIDs exceeding the threshold
- Map<String, String> memberIds = createIdMap(0, 21);
- mp.addMembers(groupTree, memberIds);
-
- PropertyState repMembers = groupTree.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertEquals(SIZE_TH, repMembers.count());
-
- // the members-list must how have two ref-members nodes one with 10 and
- // one with a single ref-value
- assertMemberList(groupTree, 2, 1);
-
- // 2. add more members without reaching threshold => still 2 ref-nodes
- memberIds = createIdMap(21, 29);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 2, 9);
-
- // 3. fill up second ref-members node => a new one must be created
- memberIds = createIdMap(29, 35);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 3, 5);
-
- // 4. remove members from the initial set => ref nodes as before, rep:members prop on group modified
- memberIds.clear();
- memberIds.put(MembershipProvider.getContentID("member1", false), "member1");
- memberIds.put(MembershipProvider.getContentID("member2", false), "member2");
- mp.removeMembers(groupTree, Maps.newHashMap(memberIds));
-
- assertMemberList(groupTree, 3, 5);
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
-
- // 5. add members again => best-tree is the ref-member-node
- memberIds = createIdMap(35, 39);
- mp.addMembers(groupTree, memberIds);
-
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
- assertMemberList(groupTree, 3, 9);
-
- // 6. adding more members will fill up rep:members again and create new ref-node
- memberIds = createIdMap(39, 45);
- mp.addMembers(groupTree, memberIds);
-
- assertEquals(SIZE_TH, groupTree.getProperty(REP_MEMBERS).count());
- assertEquals(4, groupTree.getChild(REP_MEMBERS_LIST).getChildrenCount(10));
- }
-
- private User createUser() throws RepositoryException {
- String userId = "testUser" + testUsers.size();
- User usr = userMgr.createUser(userId, "pw");
- testUsers.add(usr.getPath());
- return usr;
- }
-
- private Group createGroup() throws RepositoryException {
- String groupName = "testGroup" + testGroups.size();
- Group grp = userMgr.createGroup(groupName);
- testGroups.add(grp.getPath());
- return grp;
- }
-
- private List<Authorizable> createMembers(@Nonnull Group g, int cnt) throws Exception {
- List<Authorizable> members = new ArrayList();
- for (int i = 0; i <= cnt; i++) {
- User u = createUser();
- Group gr = createGroup();
- g.addMembers(u.getID(), gr.getID());
- members.add(u);
- members.add(gr);
- }
- return members;
- }
-
- private static Map<String, String> createIdMap(int start, int end) {
- Map<String, String> memberIds = Maps.newLinkedHashMap();
- for (int i = start; i < end; i++) {
- String memberId = "member" + i;
- //TODO
- memberIds.put(MembershipProvider.getContentID(memberId, false), memberId);
- }
- return memberIds;
- }
-
- private static void assertMembers(Group grp, Set<String> ms) throws RepositoryException {
- Set<String> members = new HashSet<String>(ms);
- Iterator<Authorizable> iter = grp.getMembers();
- while (iter.hasNext()) {
- Authorizable member = iter.next();
- Assert.assertTrue("Group must have member", members.remove(member.getID()));
- }
- assertEquals("Group must have all members", 0, members.size());
- }
-
- private static void assertMemberList(@Nonnull Tree groupTree, int cntRefTrees, int cnt) {
- Tree list = groupTree.getChild(REP_MEMBERS_LIST);
- assertTrue(list.exists());
- assertEquals(cntRefTrees, list.getChildrenCount(5));
- for (Tree c : list.getChildren()) {
- PropertyState repMembers = c.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertTrue(SIZE_TH == repMembers.count() || cnt == repMembers.count());
- }
- }
-
- private Tree getTree(@Nonnull Authorizable a) throws Exception {
- return root.getTree(a.getPath());
- }
}
\ No newline at end of file
Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipWriterTest.java (from r1785987, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipWriterTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipWriterTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java&r1=1785987&r2=1786860&rev=1786860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/MembershipWriterTest.java Tue Mar 14 09:25:47 2017
@@ -16,31 +16,23 @@
*/
package org.apache.jackrabbit.oak.security.user;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
-import javax.jcr.RepositoryException;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.Group;
import org.apache.jackrabbit.api.security.user.User;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
import org.apache.jackrabbit.oak.util.TreeUtil;
-import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -50,75 +42,33 @@ import static junit.framework.Assert.ass
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+
/**
* Tests large group and user graphs.
- * <ul>
- * <li>{@link #NUM_USERS} users</li>
- * <li>{@link #NUM_GROUPS} groups</li>
- * <li>1 group with all users</li>
- * <li>1 user with all groups</li>
- * </ul>
+
*
* @since OAK 1.0
*/
-public class MembershipProviderTest extends AbstractSecurityTest implements UserConstants {
+public class MembershipWriterTest extends MembershipBaseTest {
- private static final int NUM_USERS = 1000;
- private static final int NUM_GROUPS = 1000;
- private static final int SIZE_TH = 10;
-
- private UserManagerImpl userMgr;
- private MembershipProvider mp;
- private Set<String> testUsers = new HashSet<String>();
- private Set<String> testGroups = new HashSet<String>();
+ private MembershipWriter writer;
@Before
public void before() throws Exception {
super.before();
- userMgr = new UserManagerImpl(root, namePathMapper, getSecurityProvider());
- mp = userMgr.getMembershipProvider();
+ writer = new MembershipWriter();
// set the threshold low for testing
- mp.setMembershipSizeThreshold(SIZE_TH);
- }
-
- @After
- public void after() throws Exception {
- try {
- for (String path : Iterables.concat(testUsers, testGroups)) {
- Authorizable auth = userMgr.getAuthorizableByPath(path);
- if (auth != null) {
- auth.remove();
- }
- }
- root.commit();
- } finally {
- testUsers.clear();
- testGroups.clear();
- super.after();
- }
+ writer.setMembershipSizeThreshold(SIZE_TH);
}
- @Test
- public void testManyMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- }
- root.commit();
- assertMembers(grp, members);
-
- // also check storage structure
- Tree tree = root.getTree(grp.getPath());
+ private static void assertContentStructure(@Nonnull Tree groupTree, int memberCnt) {
assertEquals(
"rep:members property must have correct number of references",
SIZE_TH,
- tree.getProperty(REP_MEMBERS).count()
+ groupTree.getProperty(REP_MEMBERS).count()
);
- Tree membersList = tree.getChild(REP_MEMBERS_LIST);
+ Tree membersList = groupTree.getChild(REP_MEMBERS_LIST);
assertTrue(
"rep:memberList must exist",
membersList.exists()
@@ -132,88 +82,123 @@ public class MembershipProviderTest exte
assertEquals(
"rep:memberList must have correct number of child nodes.",
- (NUM_USERS / SIZE_TH) - 1,
+ (memberCnt / SIZE_TH) - 1,
membersList.getChildrenCount(Long.MAX_VALUE)
);
}
@Test
- public void testManyMemberships() throws Exception {
- Set<String> memberships = new HashSet<String>();
- User usr = createUser();
- for (int i = 0; i < NUM_GROUPS; i++) {
- Group grp = createGroup();
- grp.addMember(usr);
- memberships.add(grp.getID());
+ public void testAddMemberExceedThreshold() throws Exception {
+ Group grp = createGroup();
+ for (String contentId : createIdMap(0, NUM_USERS).keySet()) {
+ writer.addMember(getTree(grp), contentId);
}
root.commit();
- Iterator<Group> iter = usr.declaredMemberOf();
- while (iter.hasNext()) {
- Group group = iter.next();
- Assert.assertTrue(memberships.remove(group.getID()));
- }
- assertEquals(0, memberships.size());
+ // check storage structure
+ assertContentStructure(getTree(grp), NUM_USERS);
}
@Test
- public void testNestedMembers() throws Exception {
- Set<String> members = new HashSet<String>();
- Set<String> declaredMembers = new HashSet<String>();
+ public void testAddMembersExceedThreshold() throws Exception {
Group grp = createGroup();
- for (int i = 0; i < 10; i++) {
- Group g1 = createGroup();
- grp.addMember(g1);
- members.add(g1.getID());
- declaredMembers.add(g1.getID());
- for (int j = 0; j < 10; j++) {
- Group g2 = createGroup();
- g1.addMember(g2);
- members.add(g2.getID());
- for (int k = 0; k < 10; k++) {
- User usr = createUser();
- g2.addMember(usr);
- members.add(usr.getID());
- }
- }
- }
+ Map idMap = createIdMap(0, NUM_USERS);
+ writer.addMembers(getTree(grp), idMap);
root.commit();
- assertMembers(grp, members);
+ // check storage structure
+ assertContentStructure(getTree(grp), NUM_USERS);
+ }
- Iterator<Authorizable> iter = grp.getDeclaredMembers();
- while (iter.hasNext()) {
- Authorizable member = iter.next();
- Assert.assertTrue(declaredMembers.remove(member.getID()));
- }
- assertEquals(0, declaredMembers.size());
+ @Test
+ public void testAddMembersExceedThreshold2() throws Exception {
+ Tree groupTree = getTree(createGroup());
+
+ // 1. add array of 21 memberIDs exceeding the threshold
+ Map<String, String> memberIds = createIdMap(0, 21);
+ writer.addMembers(groupTree, memberIds);
+
+ PropertyState repMembers = groupTree.getProperty(REP_MEMBERS);
+ assertNotNull(repMembers);
+ assertEquals(SIZE_TH, repMembers.count());
+
+ // the members-list must how have two ref-members nodes one with 10 and
+ // one with a single ref-value
+ assertMemberList(groupTree, 2, 1);
+
+ // 2. add more members without reaching threshold => still 2 ref-nodes
+ memberIds = createIdMap(21, 29);
+ writer.addMembers(groupTree, memberIds);
+ assertMemberList(groupTree, 2, 9);
+
+ // 3. fill up second ref-members node => a new one must be created
+ memberIds = createIdMap(29, 35);
+ writer.addMembers(groupTree, memberIds);
+ assertMemberList(groupTree, 3, 5);
+
+ // 4. remove members from the initial set => ref nodes as before, rep:members prop on group modified
+ memberIds.clear();
+ memberIds.put(getContentID("member1"), "member1");
+ memberIds.put(getContentID("member2"), "member2");
+ writer.removeMembers(groupTree, Maps.newHashMap(memberIds));
+
+ assertMemberList(groupTree, 3, 5);
+ assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
+
+ // 5. add members again => best-tree is the ref-member-node
+ memberIds = createIdMap(35, 39);
+ writer.addMembers(groupTree, memberIds);
+
+ assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
+ assertMemberList(groupTree, 3, 9);
+
+ // 6. adding more members will fill up rep:members again and create new ref-node
+ memberIds = createIdMap(39, 45);
+ writer.addMembers(groupTree, memberIds);
+
+ assertEquals(SIZE_TH, groupTree.getProperty(REP_MEMBERS).count());
+ assertEquals(4, groupTree.getChild(REP_MEMBERS_LIST).getChildrenCount(10));
}
@Test
- public void testNestedMemberships() throws Exception {
- Set<String> memberships = new HashSet<String>();
- User user = createUser();
+ public void testAddMemberAgain() throws Exception {
Group grp = createGroup();
- memberships.add(grp.getID());
- for (int i = 0; i < 10; i++) {
- Group g1 = createGroup();
- grp.addMember(g1);
- memberships.add(g1.getID());
- for (int j = 0; j < 10; j++) {
- Group g2 = createGroup();
- g1.addMember(g2);
- memberships.add(g2.getID());
- g2.addMember(user);
- }
+ List<String> memberPaths = createMembers(grp, NUM_USERS);
+ root.commit();
+
+ Tree groupTree = getTree(grp);
+ for (String path : memberPaths) {
+ Tree memberTree = root.getTree(path);
+ String contentId = getContentID(memberTree);
+ assertFalse(writer.addMember(groupTree, contentId));
}
+ }
+
+ @Test
+ public void testAddMembersAgain() throws Exception {
+ Group grp = createGroup();
+ List<String> memberPaths = createMembers(grp, NUM_USERS);
root.commit();
- Iterator<Group> iter = user.memberOf();
- while (iter.hasNext()) {
- Group group = iter.next();
- Assert.assertTrue(memberships.remove(group.getID()));
+ Map<String, String> m = new HashMap();
+ for (String path : memberPaths) {
+ Tree memberTree = root.getTree(path);
+ String memberId = TreeUtil.getString(memberTree, REP_AUTHORIZABLE_ID);
+ m.put(getContentID(memberTree), memberId);
}
- assertEquals(0, memberships.size());
+
+ Set<String> expected = Sets.newHashSet(m.values());
+ Set<String> failed = writer.addMembers(getTree(grp), m);
+ assertFalse(failed.isEmpty());
+ assertEquals(expected, failed);
+ }
+
+ @Test
+ public void testAddFewMembers() throws Exception {
+ Group g = createGroup();
+ g.addMembers(createGroup().getID(), createUser().getID());
+
+ assertFalse(getTree(g).hasChild(REP_MEMBERS_LIST));
}
@Test
@@ -241,7 +226,7 @@ public class MembershipProviderTest exte
assertMembers(grp, members);
// also check storage structure
- Tree tree = root.getTree(grp.getPath());
+ Tree tree = getTree(grp);
assertNull(
"rep:members property not exist",
tree.getProperty(REP_MEMBERS)
@@ -291,313 +276,4 @@ public class MembershipProviderTest exte
assertTrue("the first overflow node must not exist", membersList.getChild("1").exists()
);
}
-
- @Test
- public void testAddMembersAgain() throws Exception {
- Set<String> members = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- members.add(usr.getID());
- }
- root.commit();
-
- for (String id : members) {
- assertFalse(grp.addMember(userMgr.getAuthorizable(id)));
- }
- }
-
- @Test
- public void testAddMembersAgainOnMembershipProvider() throws Exception {
- Set<String> memberPaths = new HashSet<String>();
- Group grp = createGroup();
- for (int i = 0; i < NUM_USERS; i++) {
- User usr = createUser();
- grp.addMember(usr);
- memberPaths.add(usr.getPath());
- }
- root.commit();
-
- Tree groupTree = root.getTree(grp.getPath());
- for (String path : memberPaths) {
- Tree memberTree = root.getTree(path);
- assertFalse(mp.addMember(groupTree, memberTree));
- assertFalse(mp.addMember(groupTree, memberTree));
-
- String memberId = TreeUtil.getString(memberTree, REP_AUTHORIZABLE_ID);
- Map<String, String> m = new HashMap<String, String>(1);
- m.put(TreeUtil.getString(memberTree, JcrConstants.JCR_UUID), memberId);
-
- Set<String> failed = mp.addMembers(groupTree, m);
- assertFalse(failed.isEmpty());
- assertTrue(failed.contains(memberId));
- }
- }
-
- @Test
- public void testIsDeclaredMemberTransient() throws Exception {
- Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
-
- Tree groupTree = getTree(g);
-
- // test declared members with transient modifications
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
- }
- }
-
- @Test
- public void testIsDeclaredMember() throws Exception {
- Group g = createGroup();
- List<Authorizable> members = createMembers(g, NUM_USERS/2);
- root.commit();
-
- Tree groupTree = getTree(g);
-
- // test declared members after commit
- for (Authorizable a : members) {
- assertTrue(mp.isDeclaredMember(groupTree, getTree(a)));
- }
- }
-
- @Test
- public void testIsDeclaredMemberFew() throws Exception {
- Group g = createGroup();
- Group m1 = createGroup();
- User m2 = createUser();
-
- g.addMembers(m1.getID(), m2.getID());
-
- Tree groupTree = getTree(g);
- assertFalse(groupTree.hasChild(REP_MEMBERS_LIST));
-
- // test declared members with transient modifications
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m2)));
-
- // ... and after commit
- root.commit();
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertTrue(mp.isDeclaredMember(groupTree, getTree(m2)));
- }
-
- @Test
- public void testIsMemberTransient() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- List<Authorizable> members = createMembers(g2, 50);
-
- Tree groupTree = getTree(g);
-
- // test members with transient modifications
- for (Authorizable a : members) {
- Tree tree = getTree(a);
- assertFalse(mp.isDeclaredMember(groupTree, tree));
- assertTrue(mp.isMember(groupTree, tree));
- }
- }
-
- @Test
- public void testIsMember() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- List<Authorizable> members = createMembers(g2, NUM_USERS/2);
- root.commit();
-
- // test members after commit
- Tree groupTree = getTree(g);
- for (Authorizable a : members) {
- Tree tree = getTree(a);
- assertFalse(mp.isDeclaredMember(groupTree, tree));
- assertTrue(mp.isMember(groupTree, tree));
- }
- }
-
- @Test
- public void testIsMemberFew() throws Exception {
- Group g = createGroup();
- Group g2 = createGroup();
- g.addMember(g2);
-
- User m1 = createUser();
- Group m2 = createGroup();
- g2.addMember(m1);
- g2.addMember(m2);
-
- Tree groupTree = getTree(g);
-
- // test members with transient modifications
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m2)));
- assertTrue(mp.isMember(groupTree, getTree(m1)));
- assertTrue(mp.isMember(groupTree, getTree(m2)));
-
- // ... and after commit
- root.commit();
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m1)));
- assertFalse(mp.isDeclaredMember(groupTree, getTree(m2)));
- assertTrue(mp.isMember(groupTree, getTree(m1)));
- assertTrue(mp.isMember(groupTree, getTree(m2)));
- }
-
- @Test
- public void testTransientInMembersList() throws Exception {
- Group g = createGroup();
- createMembers(g, NUM_USERS/2);
- root.commit();
-
- // add another transient member that will end up in the members-ref-list
- User u = createUser();
- g.addMember(u);
-
- Tree groupTree = getTree(g);
- Tree memberTree = getTree(u);
-
- assertTrue(mp.isDeclaredMember(groupTree, memberTree));
- assertTrue(mp.isMember(groupTree, memberTree));
-
- assertFalse(Iterators.contains(mp.getMembership(memberTree, false), groupTree.getPath()));
- assertFalse(Iterators.contains(mp.getMembership(memberTree, true), groupTree.getPath()));
- root.commit();
- assertTrue(Iterators.contains(mp.getMembership(memberTree, false), groupTree.getPath()));
- assertTrue(Iterators.contains(mp.getMembership(memberTree, true), groupTree.getPath()));
- }
-
- @Test
- public void testNoMember() throws Exception {
- Group g = createGroup();
- Group notMember = createGroup();
- User notMember2 = createUser();
-
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
-
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
-
- root.commit();
-
- assertFalse(g.isDeclaredMember(notMember));
- assertFalse(g.isDeclaredMember(notMember2));
-
- assertFalse(g.isMember(notMember));
- assertFalse(g.isMember(notMember2));
- }
-
- @Test
- public void testAddMembersExceedThreshold() throws Exception {
- Tree groupTree = root.getTree(createGroup().getPath());
-
- // 1. add array of 21 memberIDs exceeding the threshold
- Map<String, String> memberIds = createIdMap(0, 21);
- mp.addMembers(groupTree, memberIds);
-
- PropertyState repMembers = groupTree.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertEquals(SIZE_TH, repMembers.count());
-
- // the members-list must how have two ref-members nodes one with 10 and
- // one with a single ref-value
- assertMemberList(groupTree, 2, 1);
-
- // 2. add more members without reaching threshold => still 2 ref-nodes
- memberIds = createIdMap(21, 29);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 2, 9);
-
- // 3. fill up second ref-members node => a new one must be created
- memberIds = createIdMap(29, 35);
- mp.addMembers(groupTree, memberIds);
- assertMemberList(groupTree, 3, 5);
-
- // 4. remove members from the initial set => ref nodes as before, rep:members prop on group modified
- memberIds.clear();
- memberIds.put(MembershipProvider.getContentID("member1", false), "member1");
- memberIds.put(MembershipProvider.getContentID("member2", false), "member2");
- mp.removeMembers(groupTree, Maps.newHashMap(memberIds));
-
- assertMemberList(groupTree, 3, 5);
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
-
- // 5. add members again => best-tree is the ref-member-node
- memberIds = createIdMap(35, 39);
- mp.addMembers(groupTree, memberIds);
-
- assertEquals(8, groupTree.getProperty(REP_MEMBERS).count());
- assertMemberList(groupTree, 3, 9);
-
- // 6. adding more members will fill up rep:members again and create new ref-node
- memberIds = createIdMap(39, 45);
- mp.addMembers(groupTree, memberIds);
-
- assertEquals(SIZE_TH, groupTree.getProperty(REP_MEMBERS).count());
- assertEquals(4, groupTree.getChild(REP_MEMBERS_LIST).getChildrenCount(10));
- }
-
- private User createUser() throws RepositoryException {
- String userId = "testUser" + testUsers.size();
- User usr = userMgr.createUser(userId, "pw");
- testUsers.add(usr.getPath());
- return usr;
- }
-
- private Group createGroup() throws RepositoryException {
- String groupName = "testGroup" + testGroups.size();
- Group grp = userMgr.createGroup(groupName);
- testGroups.add(grp.getPath());
- return grp;
- }
-
- private List<Authorizable> createMembers(@Nonnull Group g, int cnt) throws Exception {
- List<Authorizable> members = new ArrayList();
- for (int i = 0; i <= cnt; i++) {
- User u = createUser();
- Group gr = createGroup();
- g.addMembers(u.getID(), gr.getID());
- members.add(u);
- members.add(gr);
- }
- return members;
- }
-
- private static Map<String, String> createIdMap(int start, int end) {
- Map<String, String> memberIds = Maps.newLinkedHashMap();
- for (int i = start; i < end; i++) {
- String memberId = "member" + i;
- //TODO
- memberIds.put(MembershipProvider.getContentID(memberId, false), memberId);
- }
- return memberIds;
- }
-
- private static void assertMembers(Group grp, Set<String> ms) throws RepositoryException {
- Set<String> members = new HashSet<String>(ms);
- Iterator<Authorizable> iter = grp.getMembers();
- while (iter.hasNext()) {
- Authorizable member = iter.next();
- Assert.assertTrue("Group must have member", members.remove(member.getID()));
- }
- assertEquals("Group must have all members", 0, members.size());
- }
-
- private static void assertMemberList(@Nonnull Tree groupTree, int cntRefTrees, int cnt) {
- Tree list = groupTree.getChild(REP_MEMBERS_LIST);
- assertTrue(list.exists());
- assertEquals(cntRefTrees, list.getChildrenCount(5));
- for (Tree c : list.getChildren()) {
- PropertyState repMembers = c.getProperty(REP_MEMBERS);
- assertNotNull(repMembers);
- assertTrue(SIZE_TH == repMembers.count() || cnt == repMembers.count());
- }
- }
-
- private Tree getTree(@Nonnull Authorizable a) throws Exception {
- return root.getTree(a.getPath());
- }
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java?rev=1786860&r1=1786859&r2=1786860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserValidatorTest.java Tue Mar 14 09:25:47 2017
@@ -111,7 +111,7 @@ public class UserValidatorTest extends A
public void createWithoutPrincipalName() throws Exception {
try {
User user = getUserManager(root).createUser("withoutPrincipalName", "pw");
- Tree tree = root.getTree(userPath);
+ Tree tree = root.getTree(user.getPath());
tree.removeProperty(REP_PRINCIPAL_NAME);
root.commit();
@@ -127,7 +127,7 @@ public class UserValidatorTest extends A
public void createWithInvalidUUID() throws Exception {
try {
User user = getUserManager(root).createUser("withInvalidUUID", "pw");
- Tree tree = root.getTree(userPath);
+ Tree tree = root.getTree(user.getPath());
tree.setProperty(JcrConstants.JCR_UUID, UUID.randomUUID().toString());
root.commit();