Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportTest.java Wed Aug 17 14:21:07 2016 @@ -23,13 +23,14 @@ import java.util.List; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; 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.api.security.user.UserManager; import org.apache.jackrabbit.oak.spi.security.user.UserConstants; -import org.junit.Ignore; import org.junit.Test; import static com.google.common.base.Preconditions.checkNotNull; @@ -67,15 +68,17 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); - Authorizable newGroup = userMgr.getAuthorizable("g"); + Session s = getImportSession(); + assertTrue(s.hasPendingChanges()); + + Authorizable newGroup = getUserManager().getAuthorizable("g"); assertNotNull(newGroup); assertTrue(newGroup.isGroup()); assertEquals("g", newGroup.getPrincipal().getName()); assertEquals("g", newGroup.getID()); - Node n = adminSession.getNode(newGroup.getPath()); + Node n = s.getNode(newGroup.getPath()); assertTrue(n.isNew()); assertTrue(n.getParent().isSame(target)); @@ -84,7 +87,7 @@ public class GroupImportTest extends Abs // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + s.save(); } @Test @@ -108,7 +111,7 @@ public class GroupImportTest extends Abs try { doImport(getTargetPath(), xml); - adminSession.save(); + getImportSession().save(); fail("Import must detect conflicting principals."); } catch (RepositoryException e) { @@ -124,6 +127,7 @@ public class GroupImportTest extends Abs " <sv:property sv:name=\"jcr:uuid\" sv:type=\"String\"><sv:value>b2f5ff47-4366-31b6-a533-d8dc3614845d</sv:value></sv:property>" + " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>g</sv:value><sv:value>g2</sv:value><sv:value>g</sv:value></sv:property></sv:node>"; + Session s = getImportSession(); /* importing a group with a multi-valued rep:principalName property - nonProtected node rep:Group must be created. @@ -135,9 +139,9 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(s.hasPendingChanges()); - Authorizable newGroup = userMgr.getAuthorizable("g"); + Authorizable newGroup = getUserManager().getAuthorizable("g"); assertNotNull(newGroup); assertTrue(target.hasNode("g")); @@ -146,7 +150,7 @@ public class GroupImportTest extends Abs // saving changes of the import -> must fail as mandatory prop is missing try { - adminSession.save(); + s.save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success @@ -168,7 +172,7 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); // saving changes of the import -> must fail as mandatory prop is missing try { - adminSession.save(); + getImportSession().save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success @@ -197,16 +201,17 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); - Group g = (Group) userMgr.getAuthorizable("g"); + Group g = (Group) getUserManager().getAuthorizable("g"); assertNotNull(g); - Group g1 = (Group) userMgr.getAuthorizable("g1"); + Group g1 = (Group) getUserManager().getAuthorizable("g1"); assertNotNull(g1); - Node n = adminSession.getNode(g1.getPath()); + Session s = getImportSession(); + Node n = s.getNode(g1.getPath()); assertTrue(n.hasProperty(UserConstants.REP_MEMBERS) || n.hasNode(UserConstants.NT_REP_MEMBERS)); // getWeakReferences only works upon save. - adminSession.save(); + s.save(); assertTrue(g1.isMember(g)); } @@ -232,24 +237,26 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); - Group g = (Group) userMgr.getAuthorizable("g"); + Group g = (Group) getUserManager().getAuthorizable("g"); assertNotNull(g); - Group g1 = (Group) userMgr.getAuthorizable("g1"); + Group g1 = (Group) getUserManager().getAuthorizable("g1"); assertNotNull(g1); - Node n = adminSession.getNode(g1.getPath()); + Session s = getImportSession(); + Node n = s.getNode(g1.getPath()); assertTrue(n.hasProperty(UserConstants.REP_MEMBERS) || n.hasNode(UserConstants.NT_REP_MEMBERS)); // getWeakReferences only works upon save. - adminSession.save(); + s.save(); assertTrue(g1.isMember(g)); } @Test public void testImportMembers() throws Exception { - Authorizable admin = checkNotNull(userMgr.getAuthorizable(UserConstants.DEFAULT_ADMIN_ID)); - String uuid = adminSession.getNode(admin.getPath()).getUUID(); + Session s = getImportSession(); + Authorizable admin = checkNotNull(getUserManager().getAuthorizable(UserConstants.DEFAULT_ADMIN_ID)); + String uuid = s.getNode(admin.getPath()).getUUID(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<sv:node sv:name=\"gFolder\" xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\" xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\" xmlns:fn=\"http://www.w3.org/2005/xpath-functions\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + " <sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:AuthorizableFolder</sv:value></sv:property>" + @@ -263,11 +270,11 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); - Group g1 = (Group) userMgr.getAuthorizable("g1"); + Group g1 = (Group) getUserManager().getAuthorizable("g1"); assertNotNull(g1); // getWeakReferences only works upon save. - adminSession.save(); + s.save(); assertTrue(g1.isMember(admin)); @@ -280,8 +287,9 @@ public class GroupImportTest extends Abs @Test public void testImportMembersWithIdDifferentFromNodeName() throws Exception { - Authorizable admin = checkNotNull(userMgr.getAuthorizable(UserConstants.DEFAULT_ADMIN_ID)); - String uuid = adminSession.getNode(admin.getPath()).getUUID(); + Session s = getImportSession(); + Authorizable admin = checkNotNull(getUserManager().getAuthorizable(UserConstants.DEFAULT_ADMIN_ID)); + String uuid = s.getNode(admin.getPath()).getUUID(); // deliberately put the 'rep:members' before the 'rep:authorizableId' to cover OAK-2367 String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<sv:node sv:name=\"gFolder\" xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\" xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\" xmlns:fn=\"http://www.w3.org/2005/xpath-functions\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + @@ -297,11 +305,11 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); - Group g1 = (Group) userMgr.getAuthorizable("g1"); + Group g1 = (Group) getUserManager().getAuthorizable("g1"); assertNotNull(g1); // getWeakReferences only works upon save. - adminSession.save(); + s.save(); assertTrue(g1.isMember(admin)); @@ -315,48 +323,53 @@ public class GroupImportTest extends Abs @Test public void testImportGroupMembersFromNodes() throws Exception { List<String> createdUsers = new LinkedList<String>(); - Node target = getTargetNode(); + + Session s = getImportSession(); + UserManager uMgr = getUserManager(); + try { String[] users = {"angi", "adi", "hansi", "lisi", "luzi", "susi", "pipi", "hari", "gabi", "eddi", "debbi", "cati", "admin", "anonymous"}; for (String user : users) { - if (userMgr.getAuthorizable(user) == null) { - userMgr.createUser(user, user); + if (uMgr.getAuthorizable(user) == null) { + uMgr.createUser(user, user); createdUsers.add(user); } } - if (!userMgr.isAutoSave()) { - adminSession.save(); + if (!uMgr.isAutoSave()) { + s.save(); } - doImport(getTargetPath(), getClass().getSimpleName() + "-testImportGroupMembersFromNodes.xml"); - if (!userMgr.isAutoSave()) { - adminSession.save(); + doImport(getTargetPath(), "GroupImportTest-testImportGroupMembersFromNodes.xml"); + if (!uMgr.isAutoSave()) { + s.save(); } - Authorizable aShrimps = userMgr.getAuthorizable("shrimps"); + Authorizable aShrimps = uMgr.getAuthorizable("shrimps"); assertNotNull("Shrimps authorizable must exist", aShrimps); assertTrue("Shrimps authorizable must be a group", aShrimps.isGroup()); Group gShrimps = (Group) aShrimps; for (String user : users) { - assertTrue(user + " should be member of " + gShrimps, gShrimps.isMember(userMgr.getAuthorizable(user))); + assertTrue(user + " should be member of " + gShrimps, gShrimps.isMember(uMgr.getAuthorizable(user))); } } finally { - adminSession.refresh(false); for (String user : createdUsers) { - Authorizable a = userMgr.getAuthorizable(user); + Authorizable a = uMgr.getAuthorizable(user); if (a != null && !a.isGroup()) { a.remove(); } } - for (NodeIterator it = target.getNodes(); it.hasNext(); ) { - it.nextNode().remove(); + for (NodeIterator it = s.getNode(getTargetPath()).getNodes(); it.hasNext(); ) { + Node n = it.nextNode(); + if (!n.getDefinition().isProtected()) { + n.remove(); + } } - adminSession.save(); + s.save(); } } @@ -366,55 +379,60 @@ public class GroupImportTest extends Abs @Test public void testImportGroupMembersFromOakNodes() throws Exception { List<String> createdUsers = new LinkedList<String>(); - Node target = getTargetNode(); + + Session s = getImportSession(); + UserManager uMgr = getUserManager(); + try { for (int i=0; i<32; i++) { String user = "testUser" + i; - if (userMgr.getAuthorizable(user) == null) { - userMgr.createUser(user, user); + if (uMgr.getAuthorizable(user) == null) { + uMgr.createUser(user, user); createdUsers.add(user); } } - if (!userMgr.isAutoSave()) { - adminSession.save(); + if (!uMgr.isAutoSave()) { + s.save(); } - doImport(getTargetPath(), getClass().getSimpleName() + "-testImportGroupMembersFromOakNodes.xml"); - if (!userMgr.isAutoSave()) { - adminSession.save(); + doImport(getTargetPath(), "GroupImportTest-testImportGroupMembersFromOakNodes.xml"); + if (!uMgr.isAutoSave()) { + s.save(); } - Authorizable authorizable = userMgr.getAuthorizable("testGroup"); + Authorizable authorizable = uMgr.getAuthorizable("testGroup"); assertNotNull("testGroup authorizable must exist", authorizable); assertTrue("testGroup authorizable must be a group", authorizable.isGroup()); Group testGroup = (Group) authorizable; for (int i=0; i<32; i++) { String user = "testUser" + i; - assertTrue(user + " should be member of " + testGroup, testGroup.isMember(userMgr.getAuthorizable(user))); + assertTrue(user + " should be member of " + testGroup, testGroup.isMember(uMgr.getAuthorizable(user))); } - authorizable = userMgr.getAuthorizable("shrimps"); + authorizable = uMgr.getAuthorizable("shrimps"); assertNotNull("shrimps authorizable must exist", authorizable); assertTrue("shrimps authorizable must be a group", authorizable.isGroup()); testGroup = (Group) authorizable; for (int i=0; i<32; i++) { String user = "testUser" + i; - assertTrue(user + " should be member of " + testGroup, testGroup.isMember(userMgr.getAuthorizable(user))); + assertTrue(user + " should be member of " + testGroup, testGroup.isMember(uMgr.getAuthorizable(user))); } } finally { - adminSession.refresh(false); for (String user : createdUsers) { - Authorizable a = userMgr.getAuthorizable(user); + Authorizable a = uMgr.getAuthorizable(user); if (a != null && !a.isGroup()) { a.remove(); } } - for (NodeIterator it = target.getNodes(); it.hasNext(); ) { - it.nextNode().remove(); + for (NodeIterator it = s.getNode(getTargetPath()).getNodes(); it.hasNext(); ) { + Node n = it.nextNode(); + if (!n.getDefinition().isProtected()) { + n.remove(); + } } - adminSession.save(); + s.save(); } } @@ -433,14 +451,15 @@ public class GroupImportTest extends Abs doImport(getTargetPath(), xml); - Authorizable newGroup = userMgr.getAuthorizable("g"); + Session s = getImportSession(); + Authorizable newGroup = getUserManager().getAuthorizable("g"); assertNotNull(newGroup); assertTrue(newGroup.isGroup()); assertEquals("g", newGroup.getID()); - assertTrue(adminSession.propertyExists(newGroup.getPath() + "/rep:authorizableId")); - assertEquals("g", adminSession.getProperty(newGroup.getPath() + "/rep:authorizableId").getString()); + assertTrue(s.propertyExists(newGroup.getPath() + "/rep:authorizableId")); + assertEquals("g", s.getProperty(newGroup.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + s.save(); } @Test @@ -459,10 +478,11 @@ public class GroupImportTest extends Abs "</sv:node>"; doImport(getTargetPath(), xml); - User user = userMgr.createUser("angi", "pw"); - adminSession.save(); - Group g1 = (Group) userMgr.getAuthorizable("g1"); + User user = getUserManager().createUser("angi", "pw"); + getImportSession().save(); + + Group g1 = (Group) getUserManager().getAuthorizable("g1"); // not BEST_EFFORT -> member is not resolved assertFalse(g1.isMember(user));
Copied: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java (from r1735564, jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java?p2=jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java&p1=jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java&r1=1735564&r2=1756639&rev=1756639&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsBestEffortTest.java Wed Aug 17 14:21:07 2016 @@ -16,9 +16,9 @@ */ package org.apache.jackrabbit.oak.jcr.security.user; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.api.security.user.User; @@ -40,6 +40,7 @@ import javax.jcr.RepositoryException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import static org.junit.Assert.assertEquals; @@ -62,8 +63,6 @@ public class GroupImportWithActionsBestE @Test public void testImportMembersBestEffort() throws Exception { - - User user1 = getUserManager().createUser("user1", ""); String uuid1 = getImportSession().getNode(user1.getPath()).getUUID(); User user2 = getUserManager().createUser("user2", ""); @@ -80,7 +79,8 @@ public class GroupImportWithActionsBestE " <sv:node sv:name=\"g1\">" + " <sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:Group</sv:value></sv:property>" + " <sv:property sv:name=\"jcr:uuid\" sv:type=\"String\"><sv:value>0120a4f9-196a-3f9e-b9f5-23f31f914da7</sv:value></sv:property>" + - " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>g1</sv:value></sv:property>" + " <sv:property sv:name=\"rep:members\" sv:multiple=\"true\" sv:type=\"WeakReference\">" + + " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>g1</sv:value></sv:property>" + + " <sv:property sv:name=\"rep:members\" sv:multiple=\"true\" sv:type=\"WeakReference\">" + " <sv:value>" + uuid1 + "</sv:value>" + " <sv:value>" + uuid2 + "</sv:value>" + " <sv:value>" + nonExistingUUID + "</sv:value>" + @@ -92,11 +92,11 @@ public class GroupImportWithActionsBestE doImport(getTargetPath(), xml); Group g1 = (Group) getUserManager().getAuthorizable("g1"); - assertTrue(groupAction.onMemberAddedCalled); + assertTrue(groupAction.onMembersAddedCalled); assertTrue(groupAction.onMembersAddedContentIdCalled); assertEquals(g1.getID(), groupAction.group.getID()); - assertTrue(Iterables.elementsEqual(ImmutableList.of(user1.getID(), user2.getID()), groupAction.memberIds)); - assertTrue(Iterables.elementsEqual(ImmutableList.of(nonExistingUUID), groupAction.memberContentIds)); + assertEquals(ImmutableSet.of(user1.getID(), user2.getID()), groupAction.memberIds); + assertEquals(ImmutableSet.of(nonExistingUUID), groupAction.memberContentIds); assertFalse(groupAction.failedIds.iterator().hasNext()); // duplicate uuids are swallowed by the set in userImporter: nonExisting#add } @@ -121,25 +121,34 @@ public class GroupImportWithActionsBestE private class TestGroupAction extends AbstractGroupAction { boolean onMemberAddedCalled = false; + boolean onMembersAddedCalled = false; boolean onMembersAddedContentIdCalled = false; Group group; - List<String> memberIds = Lists.newArrayList(); - Iterable<String> memberContentIds = Lists.newArrayList(); - Iterable<String> failedIds; + Set<String> memberIds = Sets.newHashSet(); + Set<String> memberContentIds = Sets.newHashSet(); + Set<String> failedIds = Sets.newHashSet(); @Override public void onMemberAdded(@Nonnull Group group, @Nonnull Authorizable member, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { this.group = group; - memberIds.add(member.getID()); + this.memberIds.add(member.getID()); onMemberAddedCalled = true; } @Override + public void onMembersAdded(@Nonnull Group group, @Nonnull Iterable<String> memberIds, @Nonnull Iterable<String> failedIds, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { + this.group = group; + this.memberIds.addAll(ImmutableSet.copyOf(memberIds)); + this.failedIds.addAll(ImmutableSet.copyOf(failedIds)); + onMembersAddedCalled = true; + } + + @Override public void onMembersAddedContentId(@Nonnull Group group, @Nonnull Iterable<String> memberContentIds, @Nonnull Iterable<String> failedIds, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { this.group = group; - this.memberContentIds = memberContentIds; - this.failedIds = failedIds; + this.memberContentIds.addAll(ImmutableSet.copyOf(memberContentIds)); + this.failedIds.addAll(ImmutableSet.copyOf(failedIds)); onMembersAddedContentIdCalled = true; } } Copied: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java (from r1735564, jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java?p2=jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java&p1=jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java&r1=1735564&r2=1756639&rev=1756639&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImportWithActionsTest.java Wed Aug 17 14:21:07 2016 @@ -16,9 +16,9 @@ */ package org.apache.jackrabbit.oak.jcr.security.user; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.api.security.user.User; @@ -40,6 +40,7 @@ import javax.jcr.RepositoryException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import static org.junit.Assert.assertEquals; @@ -91,10 +92,13 @@ public class GroupImportWithActionsTest doImport(getTargetPath(), xml); Group g1 = (Group) getUserManager().getAuthorizable("g1"); - assertTrue(groupAction.onMemberAddedCalled); assertEquals(g1.getID(), groupAction.group.getID()); - assertTrue(Iterables.elementsEqual(ImmutableList.of(user1.getID(), user2.getID()), groupAction.memberIds)); + + assertFalse(groupAction.onMemberAddedCalled); assertFalse(groupAction.onMembersAddedContentIdCalled); + + assertTrue(groupAction.onMembersAddedCalled); + assertEquals(ImmutableSet.of(user1.getID(), user2.getID()), groupAction.memberIds); } @Override @@ -118,14 +122,21 @@ public class GroupImportWithActionsTest private class TestGroupAction extends AbstractGroupAction { private boolean onMemberAddedCalled = false; + private boolean onMembersAddedCalled = false; private boolean onMembersAddedContentIdCalled = false; Group group; - List<String> memberIds = Lists.newArrayList(); + Set<String> memberIds = Sets.newHashSet(); @Override - public void onMemberAdded(@Nonnull Group group, @Nonnull Authorizable member, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { + public void onMembersAdded(@Nonnull Group group, @Nonnull Iterable<String> memberIds, @Nonnull Iterable<String> failedIds, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { this.group = group; + this.memberIds.addAll(ImmutableSet.copyOf(memberIds)); + onMembersAddedCalled = true; + } + + @Override + public void onMemberAdded(@Nonnull Group group, @Nonnull Authorizable member, @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) throws RepositoryException { memberIds.add(member.getID()); onMemberAddedCalled = true; } Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java Wed Aug 17 14:21:07 2016 @@ -31,6 +31,8 @@ import org.apache.jackrabbit.api.securit import org.apache.jackrabbit.api.security.user.AuthorizableExistsException; import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.api.security.user.User; +import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; import org.apache.jackrabbit.test.NotExecutableException; import org.apache.jackrabbit.util.Text; import org.junit.Before; @@ -600,8 +602,13 @@ public class GroupTest extends AbstractU superuser.save(); assertTrue(group2.addMember(group3)); superuser.save(); - assertFalse(group3.addMember(group1)); - superuser.save(); + + if (group3.addMember(group1)) { + superuser.save(); + fail("Cyclic group membership must be detected."); + } + } catch (RepositoryException e) { + assertCyclicCommitFailed(e); } finally { if (group1 != null) group1.remove(); if (group2 != null) group2.remove(); @@ -621,9 +628,13 @@ public class GroupTest extends AbstractU assertTrue(group1.addMember(group2)); assertTrue(group2.addMember(group3)); - assertFalse("Cyclic group membership must be detected.", group3.addMember(group1)); + if (group3.addMember(group1)) { + // circular membership not detected => try save + superuser.save(); + fail("Cyclic group membership must be detected."); + } // else: success, circular membership detected upon addMember } catch (RepositoryException e) { - // success + assertCyclicCommitFailed(e); } finally { if (group1 != null) group1.remove(); if (group2 != null) group2.remove(); @@ -631,6 +642,12 @@ public class GroupTest extends AbstractU } } + private static void assertCyclicCommitFailed(RepositoryException e) { + Throwable th = e.getCause(); + assertTrue(th instanceof CommitFailedException); + assertEquals(31, ((CommitFailedException) th).getCode()); + } + @Test public void testRemoveMemberTwice() throws NotExecutableException, RepositoryException { User auth = getTestUser(superuser); @@ -766,6 +783,82 @@ public class GroupTest extends AbstractU checkDeclaredMemberOf(user2, grp1.getID()); } + public void testAddMembersById() throws Exception { + Group newGroup = null; + try { + newGroup = userMgr.createGroup(createGroupId()); + + Set<String> failed = group.addMembers("nonExistingMember", newGroup.getID()); + assertFalse(failed.isEmpty()); + assertTrue(group.isMember(newGroup)); + } finally { + if (newGroup != null) { + newGroup.remove(); + superuser.save(); + } + } + } + + public void testAddSelfById() throws Exception { + Set<String> failed = group.addMembers(group.getID()); + assertFalse(failed.isEmpty()); + assertTrue(failed.contains(group.getID())); + } + + public void testAddToEveryoneById() throws Exception { + Group everyone = null; + try { + everyone = userMgr.createGroup(EveryonePrincipal.getInstance()); + + Set<String> failed = everyone.addMembers(group.getID()); + assertFalse(failed.isEmpty()); + assertTrue(failed.contains(group.getID())); + } finally { + if (everyone != null) { + everyone.remove(); + superuser.save(); + } + } + } + + public void testRemoveMembersById() throws Exception { + Group newGroup = null; + try { + newGroup = userMgr.createGroup(createGroupId()); + + Set<String> failed = group.removeMembers("nonExistingMember", newGroup.getID(), user.getID()); + assertFalse(failed.isEmpty()); + assertFalse(group.isMember(user)); + } finally { + if (newGroup != null) { + newGroup.remove(); + superuser.save(); + } + } + } + + public void testRemoveSelfById() throws Exception { + Set<String> failed = group.removeMembers(group.getID()); + assertFalse(failed.isEmpty()); + assertTrue(failed.contains(group.getID())); + } + + public void testRemoveFromEveryoneById() throws Exception { + Group everyone = null; + try { + everyone = userMgr.createGroup(EveryonePrincipal.getInstance()); + + Set<String> failed = everyone.removeMembers(group.getID()); + assertFalse(failed.isEmpty()); + assertTrue(failed.contains(group.getID())); + } finally { + if (everyone != null) { + everyone.remove(); + superuser.save(); + } + } + } + private void checkDeclaredMembers(Group grp, String ... ids) throws RepositoryException { TreeSet<String> members = new TreeSet<String>(); Iterator<Authorizable> iter = grp.getMembers(); Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/NestedGroupTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/NestedGroupTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/NestedGroupTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/NestedGroupTest.java Wed Aug 17 14:21:07 2016 @@ -18,12 +18,14 @@ package org.apache.jackrabbit.oak.jcr.se import java.security.Principal; import javax.jcr.RepositoryException; +import javax.jcr.nodetype.ConstraintViolationException; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.api.security.principal.PrincipalIterator; import org.apache.jackrabbit.api.security.principal.PrincipalManager; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.Group; +import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.test.NotExecutableException; import org.junit.Test; @@ -100,7 +102,12 @@ public class NestedGroupTest extends Abs gr2 = createGroup(getTestPrincipal()); assertTrue(addMember(gr1, gr2)); - assertFalse(addMember(gr2, gr1)); + try { + assertFalse(addMember(gr2, gr1)); + } catch (ConstraintViolationException e) { + // cycle detected upon save => success + assertCyclicMembershipError(e); + } } finally { if (gr1 != null && gr1.isMember(gr2)) { @@ -126,7 +133,12 @@ public class NestedGroupTest extends Abs assertTrue(addMember(gr1, gr2)); assertTrue(addMember(gr2, gr3)); - assertFalse(addMember(gr3, gr1)); + try { + assertFalse(addMember(gr3, gr1)); + } catch (ConstraintViolationException e) { + // cycle detected upon save => success + assertCyclicMembershipError(e); + } } finally { if (gr1 != null) { @@ -145,6 +157,14 @@ public class NestedGroupTest extends Abs } } + private static void assertCyclicMembershipError(Exception e) { + Throwable th = e.getCause(); + assertTrue(th instanceof CommitFailedException); + CommitFailedException ce = (CommitFailedException) th; + assertEquals(CommitFailedException.CONSTRAINT, ce.getType()); + assertEquals(31, ce.getCode()); + } + @Test public void testInheritedMembership() throws NotExecutableException, RepositoryException { Group gr1 = null; Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/SystemUserImportTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/SystemUserImportTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/SystemUserImportTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/SystemUserImportTest.java Wed Aug 17 14:21:07 2016 @@ -23,6 +23,7 @@ import javax.jcr.ImportUUIDBehavior; import javax.jcr.ItemExistsException; import javax.jcr.Node; import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; import javax.security.auth.Subject; @@ -90,10 +91,11 @@ public class SystemUserImportTest extend Node target = getTargetNode(); doImport(getTargetPath(), xml); + Session s = getImportSession(); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(s.hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertTrue(((User) newUser).isSystemUser()); @@ -103,7 +105,7 @@ public class SystemUserImportTest extend assertTrue(((User) newUser).isDisabled()); assertEquals("disabledUser", ((User) newUser).getDisabledReason()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = s.getNode(newUser.getPath()); assertTrue(n.isNew()); assertTrue(n.getParent().isSame(target)); @@ -114,7 +116,7 @@ public class SystemUserImportTest extend assertFalse(n.hasProperty(UserConstants.REP_PASSWORD)); // saving changes of the import -> must succeed. all mandatory props should have been created. - adminSession.save(); + s.save(); } /** @@ -134,25 +136,26 @@ public class SystemUserImportTest extend importing a system user below the regular users-path: - saving changes must fail with ConstraintViolationEx. */ - Node target = adminSession.getNode(USERPATH); + Session s = getImportSession(); + Node target = s.getNode(USERPATH); doImport(USERPATH, xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(s.hasPendingChanges()); - Authorizable user = userMgr.getAuthorizable("t"); + Authorizable user = getUserManager().getAuthorizable("t"); assertNotNull(user); assertTrue(target.hasNode("t")); assertTrue(target.hasProperty("t/rep:principalName")); // saving changes of the import -> must fail try { - adminSession.save(); + s.save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success } finally { - adminSession.refresh(false); + s.refresh(false); if (target.hasNode("t")) { target.getNode("t").remove(); target.save(); @@ -177,7 +180,7 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); // node must be present: assertTrue(target.hasNode("t")); @@ -186,17 +189,19 @@ public class SystemUserImportTest extend // but UserManager.getAuthorizable(String) will not find the // authorizable - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNull(newUser); } @Test public void testExistingPrincipal() throws Exception { Principal existing = null; - PrincipalIterator principalIterator = ((JackrabbitSession) adminSession).getPrincipalManager().getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); + + Session s = getImportSession(); + PrincipalIterator principalIterator = ((JackrabbitSession) s).getPrincipalManager().getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); while (principalIterator.hasNext()) { Principal p = principalIterator.nextPrincipal(); - if (userMgr.getAuthorizable(p) != null) { + if (getUserManager().getAuthorizable(p) != null) { existing = p; break; } @@ -214,7 +219,7 @@ public class SystemUserImportTest extend try { doImport(getTargetPath(), xml); - adminSession.save(); + s.save(); fail("Import must detect conflicting principals."); } catch (RepositoryException e) { @@ -237,12 +242,12 @@ public class SystemUserImportTest extend Node target = getTargetNode(); assertFalse(target.hasProperty(UserConstants.REP_PASSWORD)); - Authorizable user = userMgr.getAuthorizable("t"); + Authorizable user = getUserManager().getAuthorizable("t"); assertNotNull(user); assertFalse(user.isGroup()); assertTrue(((User)user).isSystemUser()); - adminSession.save(); + getImportSession().save(); } /** @@ -268,9 +273,9 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertTrue(target.hasNode("t")); @@ -293,22 +298,23 @@ public class SystemUserImportTest extend " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>t</sv:value></sv:property>" + "</sv:node>"); + Session s = getImportSession(); for (String xml : incompleteXml) { - Node target = adminSession.getNode(getTargetPath()); + Node target = s.getNode(getTargetPath()); try { doImport(getTargetPath(), xml); // saving changes of the import -> must fail as mandatory prop is missing try { - adminSession.save(); + s.save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success } } finally { - adminSession.refresh(false); + s.refresh(false); if (target.hasNode("t")) { target.getNode("t").remove(); - adminSession.save(); + s.save(); } } } @@ -328,10 +334,10 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); - Authorizable user = userMgr.getAuthorizable("t"); + Authorizable user = getUserManager().getAuthorizable("t"); assertNotNull(user); assertFalse(user.isGroup()); - assertFalse(adminSession.propertyExists(user.getPath() + "/rep:password")); + assertFalse(getImportSession().propertyExists(user.getPath() + "/rep:password")); } @Test @@ -360,15 +366,15 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t3"); + Authorizable newUser = getUserManager().getAuthorizable("t3"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t3", newUser.getPrincipal().getName()); assertEquals("t3", newUser.getID()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = getImportSession().getNode(newUser.getPath()); assertTrue(n.isNew()); Node parent = n.getParent(); @@ -400,10 +406,10 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); - Authorizable u2 = userMgr.getAuthorizable("g"); + Authorizable u2 = getUserManager().getAuthorizable("g"); assertNotNull(u2); Subject subj = new Subject(); @@ -429,7 +435,7 @@ public class SystemUserImportTest extend // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } /** @@ -447,14 +453,14 @@ public class SystemUserImportTest extend " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>t</sv:value></sv:property>" + "</sv:node>"; doImport(getTargetPath(), xml); - adminSession.save(); + getImportSession().save(); // re-import should succeed if UUID-behavior is set accordingly doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } @Test @@ -491,13 +497,14 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Session s = getImportSession(); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /** @@ -516,14 +523,15 @@ public class SystemUserImportTest extend doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Session s = getImportSession(); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /** @@ -543,14 +551,15 @@ public class SystemUserImportTest extend "</sv:node>"; doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); + Session s = getImportSession(); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /** Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportAbortTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportAbortTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportAbortTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportAbortTest.java Wed Aug 17 14:21:07 2016 @@ -61,7 +61,7 @@ public class UserImportAbortTest extends } catch (RepositoryException e) { // success } finally { - adminSession.refresh(false); + getImportSession().refresh(false); } } } @@ -83,7 +83,7 @@ public class UserImportAbortTest extends } catch (RepositoryException e) { // success } finally { - adminSession.refresh(false); + getImportSession().refresh(false); } } } Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportBestEffortTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportBestEffortTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportBestEffortTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportBestEffortTest.java Wed Aug 17 14:21:07 2016 @@ -65,7 +65,7 @@ public class UserImportBestEffortTest ex // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } /** @@ -83,14 +83,14 @@ public class UserImportBestEffortTest ex "</sv:node>"; doImport(getTargetPath(), xml); - adminSession.save(); + getImportSession().save(); // re-import should succeed if UUID-behavior is set accordingly doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } @Test @@ -132,10 +132,10 @@ public class UserImportBestEffortTest ex "</sv:node>"; doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); - Authorizable u2 = userMgr.getAuthorizable("g"); + Authorizable u2 = getUserManager().getAuthorizable("g"); assertNotNull(u2); Subject subj = new Subject(); @@ -158,7 +158,7 @@ public class UserImportBestEffortTest ex "</sv:node>"; doImport(getTargetPath(), xml); - Authorizable a = userMgr.getAuthorizable("t"); + Authorizable a = getUserManager().getAuthorizable("t"); assertFalse(a.isGroup()); boolean found = false; Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportFromJackrabbit.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportFromJackrabbit.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportFromJackrabbit.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportFromJackrabbit.java Wed Aug 17 14:21:07 2016 @@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.jcr.se import javax.jcr.ImportUUIDBehavior; import javax.jcr.Node; +import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; import org.apache.jackrabbit.api.security.user.Authorizable; @@ -45,6 +46,16 @@ public class UserImportFromJackrabbit ex private String randomNodeName = "f5aj6fp7q9834jof"; private String intermediatePath = "foo/bar/test"; + private Session importSession; + + @Override + public void before() throws Exception { + super.before(); + + importSession = getImportSession(); + + } + @Override protected String getTargetPath() { return USERPATH; @@ -71,15 +82,15 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); assertEquals(uid, newUser.getID()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(uid, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); // saving changes of the import -> must succeed - adminSession.save(); + importSession.save(); } /** @@ -88,9 +99,9 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorReplace() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl("t"), getTargetPath() + "/foo/bar/test"); + User u = getUserManager().createUser(uid, null, new PrincipalImpl("t"), getTargetPath() + "/foo/bar/test"); String initialPath = u.getPath(); - adminSession.save(); + importSession.save(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<sv:node sv:name=\""+uid+"\" xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\" xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\" xmlns:fn=\"http://www.w3.org/2005/xpath-functions\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + @@ -103,18 +114,18 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // replace should retain path assertEquals(initialPath, newUser.getPath()); assertFalse(getTargetPath().equals(Text.getRelativeParent(newUser.getPath(), 1))); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(uid, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); // saving changes of the import -> must succeed - adminSession.save(); + importSession.save(); } /** @@ -123,9 +134,9 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorRemove() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String initialPath = u.getPath(); - adminSession.save(); + importSession.save(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<sv:node sv:name=\"t\" xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\" xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\" xmlns:fn=\"http://www.w3.org/2005/xpath-functions\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + @@ -138,19 +149,19 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // IMPORT_UUID_COLLISION_REMOVE_EXISTING should result in the user to // be imported a the new path assertEquals(getTargetPath(), Text.getRelativeParent(newUser.getPath(), 1)); assertFalse(initialPath.equals(newUser.getPath())); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(uid, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); // saving changes of the import -> must succeed - adminSession.save(); + importSession.save(); } /** @@ -159,11 +170,11 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorReplaceFromRenamed() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String initialPath = u.getPath(); String movedPath = Text.getRelativeParent(initialPath, 1) + '/' + randomNodeName; - adminSession.move(initialPath, movedPath); - adminSession.save(); + importSession.move(initialPath, movedPath); + importSession.save(); // import 'correct' jr2 package which contains the encoded ID in the node name String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -177,18 +188,18 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // replace should update the path assertEquals("user path", Text.getRelativeParent(initialPath, 1) + '/' + uid, newUser.getPath()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, uid, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, uid, newUser.getID()); // saving changes of the import must succeed. - adminSession.save(); + importSession.save(); } /** @@ -197,11 +208,11 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorReplaceFromRenamed2() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String initialPath = u.getPath(); String movedPath = Text.getRelativeParent(initialPath, 1) + '/' + randomNodeName; - adminSession.move(initialPath, movedPath); - adminSession.save(); + importSession.move(initialPath, movedPath); + importSession.save(); // we need to include the new node name in the sysview import, so that the importer uses the correct name. String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -215,12 +226,12 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // replace should retain path assertEquals("user path", movedPath, newUser.getPath()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, randomNodeName, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); @@ -230,7 +241,7 @@ public class UserImportFromJackrabbit ex // correct ID as hashed in the jcr:uuid, the CommitHook will detect // the mismatch, which for the diff looks like a modified ID. try { - adminSession.save(); + importSession.save(); fail("Importing an authorizable with mismatch between authorizableId and uuid must fail."); } catch (ConstraintViolationException e) { // success @@ -244,9 +255,9 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorReplaceFromRenamed3() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String originalPath = u.getPath(); - adminSession.save(); + importSession.save(); // we need to include the new node name in the sysview import, so that the importer uses the correct name. String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -260,13 +271,13 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // replace should change the original path String expectedPath = Text.getRelativeParent(originalPath, 1) + '/' + randomNodeName; assertEquals("user path", expectedPath, newUser.getPath()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, randomNodeName, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); @@ -275,7 +286,7 @@ public class UserImportFromJackrabbit ex // modified node name in combination with the fact that in JR 2.x // the node name MUST contain the id as there is no rep:authorizableId. try { - adminSession.save(); + importSession.save(); fail("Importing an authorizable with mismatch between authorizableId and uuid must fail."); } catch (ConstraintViolationException e) { // success @@ -289,11 +300,11 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorRemoveFromRenamed() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String initialPath = u.getPath(); String movedPath = Text.getRelativeParent(initialPath, 1) + '/' + randomNodeName; - adminSession.move(initialPath, movedPath); - adminSession.save(); + importSession.move(initialPath, movedPath); + importSession.save(); // import 'correct' jr2 package which contains the encoded ID in the node name String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -307,18 +318,18 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // IMPORT_UUID_COLLISION_REMOVE_EXISTING should import the user at the new path assertEquals("user path", getTargetPath() + '/' + uid, newUser.getPath()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, uid, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, uid, newUser.getID()); // saving changes of the import must succeed. - adminSession.save(); + importSession.save(); } /** @@ -327,11 +338,11 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorRemoveFromRenamed2() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String initialPath = u.getPath(); String movedPath = Text.getRelativeParent(initialPath, 1) + '/' + randomNodeName; - adminSession.move(initialPath, movedPath); - adminSession.save(); + importSession.move(initialPath, movedPath); + importSession.save(); // we need to include the new node name in the sysview import, so that the importer uses the correct name. String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -345,12 +356,12 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // IMPORT_UUID_COLLISION_REMOVE_EXISTING should import the user at the new path assertEquals("user path", getTargetPath() + '/' + randomNodeName, newUser.getPath()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, randomNodeName, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); @@ -358,7 +369,7 @@ public class UserImportFromJackrabbit ex // removed and the JR 2.x the node name doesn't contain the correct id, // which is detected during save as it looks like the id had been modified. try { - adminSession.save(); + importSession.save(); fail("Importing an authorizable with mismatch between authorizableId and uuid must fail."); } catch (ConstraintViolationException e) { // success @@ -372,9 +383,9 @@ public class UserImportFromJackrabbit ex @Test public void testUUIDBehaviorRemoveFromRenamed3() throws Exception { // create authorizable - User u = userMgr.createUser(uid, null, new PrincipalImpl(uid), intermediatePath); + User u = getUserManager().createUser(uid, null, new PrincipalImpl(uid), intermediatePath); String originalPath = u.getPath(); - adminSession.save(); + importSession.save(); // we need to include the new node name in the sysview import, so that the importer uses the correct name. String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -388,14 +399,14 @@ public class UserImportFromJackrabbit ex doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); - Authorizable newUser = userMgr.getAuthorizable(uid); + Authorizable newUser = getUserManager().getAuthorizable(uid); // replace should change the original path String expectedPath = getTargetPath() + '/' + randomNodeName; assertEquals("user path", expectedPath, newUser.getPath()); assertFalse((Text.getRelativeParent(originalPath,1) + '/' + randomNodeName).equals(newUser.getPath())); - Node n = adminSession.getNode(newUser.getPath()); + Node n = importSession.getNode(newUser.getPath()); assertTrue(n.hasProperty(UserConstants.REP_AUTHORIZABLE_ID)); assertEquals(UserConstants.REP_AUTHORIZABLE_ID, randomNodeName, n.getProperty(UserConstants.REP_AUTHORIZABLE_ID).getString()); @@ -403,7 +414,7 @@ public class UserImportFromJackrabbit ex // has been modified (it no longer represents the correct ID due to the // fact that in JR 2.x the node name MUST contain the id. try { - adminSession.save(); + importSession.save(); fail("Importing an authorizable with mismatch between authorizableId and uuid must fail."); } catch (ConstraintViolationException e) { // success Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportIgnoreTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportIgnoreTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportIgnoreTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportIgnoreTest.java Wed Aug 17 14:21:07 2016 @@ -69,7 +69,7 @@ public class UserImportIgnoreTest extend doImport(getTargetPath(), xml); // no exception during import: no impersonation must be granted // for the invalid principal name - Authorizable a = userMgr.getAuthorizable("t"); + Authorizable a = getUserManager().getAuthorizable("t"); if (!a.isGroup()) { Impersonation imp = ((User)a).getImpersonation(); Subject s = new Subject(); @@ -82,7 +82,7 @@ public class UserImportIgnoreTest extend fail("Importing 't' didn't create a User."); } } finally { - adminSession.refresh(false); + getImportSession().refresh(false); } } } Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportPwExpiryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportPwExpiryTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportPwExpiryTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportPwExpiryTest.java Wed Aug 17 14:21:07 2016 @@ -20,6 +20,7 @@ import java.util.HashMap; import javax.annotation.CheckForNull; import javax.jcr.Node; import javax.jcr.Property; +import javax.jcr.Session; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.User; @@ -87,8 +88,8 @@ public class UserImportPwExpiryTest exte doImport(USERPATH, xml); - Authorizable authorizable = userMgr.getAuthorizable("x"); - Node userNode = adminSession.getNode(authorizable.getPath()); + Authorizable authorizable = getUserManager().getAuthorizable("x"); + Node userNode = getImportSession().getNode(authorizable.getPath()); assertTrue(userNode.hasNode(UserConstants.REP_PWD)); Node pwdNode = userNode.getNode(UserConstants.REP_PWD); assertTrue(pwdNode.getDefinition().isProtected()); @@ -121,8 +122,8 @@ public class UserImportPwExpiryTest exte doImport(USERPATH, xml); // verify that the pwd node has still been created - Authorizable authorizable = userMgr.getAuthorizable("x"); - Node userNode = adminSession.getNode(authorizable.getPath()); + Authorizable authorizable = getUserManager().getAuthorizable("x"); + Node userNode = getImportSession().getNode(authorizable.getPath()); assertTrue(userNode.hasNode(UserConstants.REP_PWD)); Node pwdNode = userNode.getNode(UserConstants.REP_PWD); assertTrue(pwdNode.getDefinition().isProtected()); @@ -165,8 +166,8 @@ public class UserImportPwExpiryTest exte doImport(USERPATH, xml); - Authorizable authorizable = userMgr.getAuthorizable("y"); - Node userNode = adminSession.getNode(authorizable.getPath()); + Authorizable authorizable = getUserManager().getAuthorizable("y"); + Node userNode = getImportSession().getNode(authorizable.getPath()); assertTrue(userNode.hasNode(UserConstants.REP_PWD)); Node pwdNode = userNode.getNode(UserConstants.REP_PWD); @@ -186,13 +187,14 @@ public class UserImportPwExpiryTest exte public void testImportExistingUserWithoutExpiryProperty() throws Exception { String uid = "existing"; - User user = userMgr.createUser(uid, uid); + User user = getUserManager().createUser(uid, uid); + Session s = getImportSession(); // change password to force existence of password last modified property user.changePassword(uid); - adminSession.save(); + s.save(); - Node userNode = adminSession.getNode(user.getPath()); + Node userNode = s.getNode(user.getPath()); assertTrue(userNode.hasNode(UserConstants.REP_PWD)); Node pwdNode = userNode.getNode(UserConstants.REP_PWD); assertTrue(pwdNode.hasProperty(UserConstants.REP_PASSWORD_LAST_MODIFIED)); @@ -213,8 +215,8 @@ public class UserImportPwExpiryTest exte doImport(USERPATH, xml); - Authorizable authorizable = userMgr.getAuthorizable(uid); - userNode = adminSession.getNode(authorizable.getPath()); + Authorizable authorizable = getUserManager().getAuthorizable(uid); + userNode = s.getNode(authorizable.getPath()); assertTrue(userNode.hasNode(UserConstants.REP_PWD)); pwdNode = userNode.getNode(UserConstants.REP_PWD); Modified: jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportTest.java?rev=1756639&r1=1756638&r2=1756639&view=diff ============================================================================== --- jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportTest.java (original) +++ jackrabbit/oak/branches/1.2/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserImportTest.java Wed Aug 17 14:21:07 2016 @@ -23,6 +23,7 @@ import javax.jcr.ImportUUIDBehavior; import javax.jcr.ItemExistsException; import javax.jcr.Node; import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; import javax.security.auth.Subject; @@ -74,9 +75,9 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getPrincipal().getName()); @@ -84,7 +85,7 @@ public class UserImportTest extends Abst assertTrue(((User) newUser).isDisabled()); assertEquals("disabledUser", ((User) newUser).getDisabledReason()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = getImportSession().getNode(newUser.getPath()); assertTrue(n.isNew()); assertTrue(n.getParent().isSame(target)); @@ -95,7 +96,7 @@ public class UserImportTest extends Abst // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } /** @@ -123,16 +124,16 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newGroup = userMgr.getAuthorizable("g"); + Authorizable newGroup = getUserManager().getAuthorizable("g"); assertNotNull(newGroup); assertTrue(target.hasNode("g")); assertTrue(target.hasProperty("g/rep:principalName")); // saving changes of the import -> must fail try { - adminSession.save(); + getImportSession().save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success @@ -157,7 +158,7 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); // node must be present: assertTrue(target.hasNode("t")); @@ -166,17 +167,17 @@ public class UserImportTest extends Abst // but UserManager.getAuthorizable(String) will not find the // authorizable - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNull(newUser); } @Test public void testExistingPrincipal() throws Exception { Principal existing = null; - PrincipalIterator principalIterator = ((JackrabbitSession) adminSession).getPrincipalManager().getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); + PrincipalIterator principalIterator = ((JackrabbitSession) getImportSession()).getPrincipalManager().getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); while (principalIterator.hasNext()) { Principal p = principalIterator.nextPrincipal(); - if (userMgr.getAuthorizable(p) != null) { + if (getUserManager().getAuthorizable(p) != null) { existing = p; break; } @@ -195,7 +196,7 @@ public class UserImportTest extends Abst try { doImport(getTargetPath(), xml); - adminSession.save(); + getImportSession().save(); fail("Import must detect conflicting principals."); } catch (RepositoryException e) { @@ -218,10 +219,10 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t"); - Node n = adminSession.getNode(newUser.getPath()); + Authorizable newUser = getUserManager().getAuthorizable("t"); + Node n = getImportSession().getNode(newUser.getPath()); String pwValue = n.getProperty(UserConstants.REP_PASSWORD).getString(); assertFalse(plainPw.equals(pwValue)); @@ -251,9 +252,9 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(getImportSession().hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertTrue(target.hasNode("t")); @@ -276,22 +277,23 @@ public class UserImportTest extends Abst " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>t</sv:value></sv:property>" + "</sv:node>"); + Session s = getImportSession(); for (String xml : incompleteXml) { - Node target = adminSession.getNode(getTargetPath()); + Node target = s.getNode(getTargetPath()); try { doImport(getTargetPath(), xml); // saving changes of the import -> must fail as mandatory prop is missing try { - adminSession.save(); + s.save(); fail("Import must be incomplete. Saving changes must fail."); } catch (ConstraintViolationException e) { // success } } finally { - adminSession.refresh(false); + s.refresh(false); if (target.hasNode("t")) { target.getNode("t").remove(); - adminSession.save(); + s.save(); } } } @@ -311,10 +313,10 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); - Authorizable user = userMgr.getAuthorizable("t"); + Authorizable user = getUserManager().getAuthorizable("t"); assertNotNull(user); assertFalse(user.isGroup()); - assertFalse(adminSession.propertyExists(user.getPath() + "/rep:password")); + assertFalse(getImportSession().propertyExists(user.getPath() + "/rep:password")); } @Test @@ -342,16 +344,17 @@ public class UserImportTest extends Abst Node target = getTargetNode(); doImport(getTargetPath(), xml); + Session s = getImportSession(); assertTrue(target.isModified()); - assertTrue(adminSession.hasPendingChanges()); + assertTrue(s.hasPendingChanges()); - Authorizable newUser = userMgr.getAuthorizable("t3"); + Authorizable newUser = getUserManager().getAuthorizable("t3"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t3", newUser.getPrincipal().getName()); assertEquals("t3", newUser.getID()); - Node n = adminSession.getNode(newUser.getPath()); + Node n = s.getNode(newUser.getPath()); assertTrue(n.isNew()); Node parent = n.getParent(); @@ -383,10 +386,10 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); - Authorizable u2 = userMgr.getAuthorizable("g"); + Authorizable u2 = getUserManager().getAuthorizable("g"); assertNotNull(u2); Subject subj = new Subject(); @@ -413,7 +416,7 @@ public class UserImportTest extends Abst // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + getImportSession().save(); } /** @@ -432,14 +435,16 @@ public class UserImportTest extends Abst " <sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>t</sv:value></sv:property>" + "</sv:node>"; doImport(getTargetPath(), xml); - adminSession.save(); + + Session s = getImportSession(); + s.save(); // re-import should succeed if UUID-behavior is set accordingly doImport(getTargetPath(), xml, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); // saving changes of the import -> must succeed. add mandatory // props should have been created. - adminSession.save(); + s.save(); } @Test @@ -478,13 +483,14 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Session s = getImportSession(); + Authorizable newUser = getUserManager().getAuthorizable("t"); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /** @@ -503,14 +509,15 @@ public class UserImportTest extends Abst doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); + Session s = getImportSession(); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /** @@ -531,14 +538,15 @@ public class UserImportTest extends Abst "</sv:node>"; doImport(getTargetPath(), xml); - Authorizable newUser = userMgr.getAuthorizable("t"); + Authorizable newUser = getUserManager().getAuthorizable("t"); + Session s = getImportSession(); assertNotNull(newUser); assertFalse(newUser.isGroup()); assertEquals("t", newUser.getID()); - assertTrue(adminSession.propertyExists(newUser.getPath() + "/rep:authorizableId")); - assertEquals("t", adminSession.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); - adminSession.save(); + assertTrue(s.propertyExists(newUser.getPath() + "/rep:authorizableId")); + assertEquals("t", s.getProperty(newUser.getPath() + "/rep:authorizableId").getString()); + s.save(); } /**
