private IdResolver(@NotNull Root root, @NotNull ContentSession contentSession) { currentStateIdManager = new IdentifierManager(root); baseStateIdManager = new IdentifierManager(contentSession.getLatestRoot()); if (!root.hasPendingChanges()) { importedUUIDs = new HashSet<String>(); } else { importedUUIDs = null; } }
@Test public void testCreateRemoveUser() throws RepositoryException { User u = mgr.createUser("u", "u"); assertFalse(root.hasPendingChanges()); u.remove(); assertFalse(root.hasPendingChanges()); }
@Test public void testOnCreateGroup() throws Exception { action.onCreate(gr, root, NamePathMapper.DEFAULT); assertFalse(root.hasPendingChanges()); }
@Test public void testProcessReferencesIsNoOp() throws Exception { importer.processReferences(); assertFalse(root.hasPendingChanges()); }
@Test public void testSyncUsersBeforeSaveError() throws Exception { Root r = preventRootCommit(delegatee);; String[] result = delegatee.syncUsers(TEST_IDS, false); assertResultMessages(result, ImmutableMap.of( TestIdentityProvider.ID_TEST_USER, "nsa", TestIdentityProvider.ID_SECOND_USER, "nsa", TestIdentityProvider.ID_WILDCARD_USER, "nsa")); assertFalse(r.hasPendingChanges()); }
@Test public void testSyncAllExternalUsersSaveError() throws Exception { Root r = preventRootCommit(delegatee);; String[] result = delegatee.syncAllExternalUsers(); assertResultMessages(result, ImmutableMap.of( TestIdentityProvider.ID_TEST_USER, "ERR", TestIdentityProvider.ID_SECOND_USER, "ERR", TestIdentityProvider.ID_WILDCARD_USER, "ERR")); assertFalse(r.hasPendingChanges()); }
@Override public void after() throws Exception { try { root.getTree("/test").remove(); if (root.hasPendingChanges()) { root.commit(); } } finally { super.after(); } }
@Test public void testEndWithoutChildInfo() throws Exception { init(); importer.start(aclTree); importer.end(aclTree); assertTrue(root.hasPendingChanges()); assertFalse(aclTree.getChildren().iterator().hasNext()); }
@Test public void testStartAclTree() throws Exception { init(); assertTrue(importer.start(aclTree)); assertFalse(root.hasPendingChanges()); }
@Test public void testAddMembers() throws Exception { User u = mgr.createUser("u", "u"); Group g = mgr.createGroup("g"); assertTrue(g.addMembers(u.getID()).isEmpty()); assertFalse(root.hasPendingChanges()); }
@Test public void testCommitFailedRevertChanges() throws RepositoryException { User u = mgr.createUser("u", "u"); try { User u2 = mgr.createUser("u", "u"); fail(); } catch (RepositoryException e) { // success assertFalse(root.hasPendingChanges()); } }
@Test public void testValidAndNullIdModifiesRoot() throws Exception { try { testGroup.addMembers(getTestUser().getID(), null); } catch (ConstraintViolationException e) { // expected } // no modifications expected as testing for null id is done before changes are made assertFalse(root.hasPendingChanges()); }
@Test public void testImpersonation() throws Exception { User u = mgr.createUser("u", "u"); Impersonation imp = u.getImpersonation(); Principal p = mgr.getAuthorizable("anonymous").getPrincipal(); assertTrue(imp.grantImpersonation(p)); assertFalse(root.hasPendingChanges()); assertTrue(imp.revokeImpersonation(p)); assertFalse(root.hasPendingChanges()); }
@Test public void testRemoveMembers() throws Exception { User u = mgr.createUser("u", "u"); Group g = mgr.createGroup("g"); g.addMember(u); assertTrue(g.removeMembers(u.getID()).isEmpty()); assertFalse(root.hasPendingChanges()); } }
@Test public void testApplyMembership() throws Exception { User u = getTestUser(); Group gr = createTestGroup(); syncCtx.applyMembership(u, ImmutableSet.of(gr.getID())); assertTrue(gr.isDeclaredMember(u)); assertTrue(root.hasPendingChanges()); }
@Test public void testSyncMembershipDepth1() throws Exception { ExternalUser externalUser = idp.listUsers().next(); Authorizable a = syncCtx.createUser(externalUser); syncCtx.syncMembership(externalUser, a, 1); assertTrue(root.hasPendingChanges()); for (ExternalIdentityRef ref : externalUser.getDeclaredGroups()) { Group g = userManager.getAuthorizable(ref.getId(), Group.class); assertNotNull(g); assertTrue(g.isDeclaredMember(a)); } }
@Test public void testSyncNonExistingExternalUserSaveError() throws Exception { Root r = preventRootCommit(delegatee);; String[] result = delegatee.syncExternalUsers(new String[] {new ExternalIdentityRef("nonExisting", idp.getName()).getString()}); assertResultMessages(result, "", "nsi"); assertFalse(r.hasPendingChanges()); }
@Test public void testSyncForeignExternalUserSaveError() throws Exception { Root r = preventRootCommit(delegatee);; String[] result = delegatee.syncExternalUsers(new String[] {new ExternalIdentityRef(TestIdentityProvider.ID_TEST_USER, foreignIDP.getName()).getString()}); assertResultMessages(result, TestIdentityProvider.ID_TEST_USER, "for"); assertFalse(r.hasPendingChanges()); }
@Test public void testOnRemoveUserWithMembership() throws Exception { User u = getTestUser(); gr.addMember(u); root.commit(); action.onRemove(u, root, NamePathMapper.DEFAULT); assertTrue(root.hasPendingChanges()); assertFalse(gr.isDeclaredMember(u)); } }
@Test public void testSyncMembershipForExternalGroup() throws Exception { ExternalGroup externalGroup = idp.getGroup("a"); // a group that has declaredGroups SyncContext ctx = new DefaultSyncContext(syncConfig, idp, userManager, valueFactory); ctx.sync(externalGroup); ctx.close(); r.commit(); Authorizable gr = userManager.getAuthorizable(externalGroup.getId()); syncContext.syncMembership(externalGroup, gr, 1); assertFalse(gr.hasProperty(ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES)); assertFalse(r.hasPendingChanges()); }