private void assertExternalPrincipalNames(@NotNull UserManager userMgr, @NotNull String id) throws Exception { Authorizable a = userMgr.getAuthorizable(id); assertNotNull(a); Set<String> expected = new HashSet<>(); calcExpectedPrincipalNames(idp.getUser(id), syncConfig.user().getMembershipNestingDepth(), expected); Set<String> extPrincNames = new HashSet<>(); for (Value v : a.getProperty(ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES)) { extPrincNames.add(v.getString()); } assertEquals(expected, extPrincNames); }
@Test public void testFindPrincipalsContainingUnderscore() throws Exception { ExternalUser externalUser = idp.getUser(TestIdentityProvider.ID_WILDCARD_USER); sync(externalUser); Set<? extends Principal> expected = ImmutableSet.of( new PrincipalImpl("_gr_u_")); Set<? extends Principal> res = ImmutableSet.copyOf(principalProvider.findPrincipals("_", PrincipalManager.SEARCH_TYPE_ALL)); assertEquals(expected, res); }
@Test public void syncExternalUser() throws Exception { SyncResult res = syncCtx.sync(idp.getUser(USER_ID)); assertRepExternalId(res); }
@Test public void testGetPrincipalUnderscoreSign() throws Exception { ExternalUser externalUser = idp.getUser(USER_ID); for (ExternalIdentityRef ref : externalUser.getDeclaredGroups()) { String pName = idp.getIdentity(ref).getPrincipalName(); for (String n : new String[]{"_", "_" + pName.substring(1), pName.substring(0, pName.length() - 1) + "_"}) { assertNull(principalProvider.getPrincipal(n)); } } }
@Test public void testFindPrincipalsContainingPercentSign() throws Exception { ExternalUser externalUser = idp.getUser(TestIdentityProvider.ID_WILDCARD_USER); sync(externalUser); Set<? extends Principal> expected = ImmutableSet.of( new PrincipalImpl("g%r%")); Set<? extends Principal> res = ImmutableSet.copyOf(principalProvider.findPrincipals("%", PrincipalManager.SEARCH_TYPE_ALL)); assertEquals(expected, res); }
@Test public void testSyncPropertiesEmptyMap() throws Exception { ExternalUser externalUser = idp.getUser(TestIdentityProvider.ID_SECOND_USER); Authorizable a = syncCtx.createUser(externalUser); syncCtx.syncProperties(externalUser, a, ImmutableMap.<String, String>of()); for (String propName : externalUser.getProperties().keySet()) { assertFalse(a.hasProperty(propName)); } }
@Test public void testSyncExternalUser() throws Exception { ExternalUser externalUser = idp.getUser(USER_ID); sync(externalUser, SyncResult.Status.ADD); assertNotNull(userManager.getAuthorizable(USER_ID)); }
@Test public void testGetPrincipalPercentSign() throws Exception { ExternalUser externalUser = idp.getUser(USER_ID); for (ExternalIdentityRef ref : externalUser.getDeclaredGroups()) { String pName = idp.getIdentity(ref).getPrincipalName(); for (String n : new String[] {"%", "%" + pName, pName + "%", pName.charAt(0) + "%"}) { assertNull(principalProvider.getPrincipal(n)); } } }
@Test public void testRequiresSyncNotYetSynced() throws Exception { assertTrue(syncHandler.requiresSync(new DefaultSyncedIdentity(USER_ID, idp.getUser(USER_ID).getExternalId(), false, Long.MIN_VALUE))); }
private void sync(@NotNull String id, boolean isGroup) throws Exception { SyncContext ctx = syncHandler.createContext(idp, userManager, getValueFactory()); ExternalIdentity exIdentity = (isGroup) ? idp.getGroup(id) : idp.getUser(id); assertNotNull(exIdentity); SyncResult res = ctx.sync(exIdentity); assertSame(SyncResult.Status.ADD, res.getStatus()); root.commit(); }
@Test public void testGetPrincipalGroupsWithQueryWildCard() throws Exception { ExternalUser externalUser = idp.getUser(TestIdentityProvider.ID_WILDCARD_USER); sync(externalUser); for (ExternalIdentityRef ref : externalUser.getDeclaredGroups()) { String pName = idp.getIdentity(ref).getPrincipalName(); Principal p = principalProvider.getPrincipal(pName); assertNotNull(p); assertEquals(pName, p.getName()); } }
@Before public void before() throws Exception { externalUser = idp.getUser(TestIdentityProvider.ID_TEST_USER); assertNotNull(externalUser); si = new DefaultSyncedIdentity(externalUser.getId(), externalUser.getExternalId(), false, 234); externalGroup = idp.listGroups().next(); siGroup = new DefaultSyncedIdentity(externalGroup.getId(), externalGroup.getExternalId(), true, 234); }
@Test public void testIsMember() throws Exception { ExternalUser externalUser = idp.getUser(USER_ID); GroupPrincipal principal = getGroupPrincipal(externalUser.getDeclaredGroups().iterator().next()); assertTrue(principal.isMember(new PrincipalImpl(externalUser.getPrincipalName()))); assertTrue(principal.isMember(getUserManager(root).getAuthorizable(USER_ID).getPrincipal())); }
@Override @Test public void testGetPrincipalDynamicGroup() throws Exception { for (ExternalIdentityRef ref : idp.getUser(USER_ID).getDeclaredGroups()) { String princName = idp.getIdentity(ref).getPrincipalName(); Principal principal = principalProvider.getPrincipal(princName); assertNotNull(principal); assertTrue(principal instanceof GroupPrincipal); } }
@Test public void testGetPrincipalDynamicGroup() throws Exception { for (ExternalIdentityRef ref : idp.getUser(USER_ID).getDeclaredGroups()) { String princName = idp.getIdentity(ref).getPrincipalName(); Principal principal = principalProvider.getPrincipal(princName); assertNotNull(principal); assertTrue(principal instanceof GroupPrincipal); } }
@Test public void testSyncExternalUserDepthInfinite() throws Exception { syncConfig.user().setMembershipNestingDepth(Long.MAX_VALUE); ExternalUser externalUser = idp.getUser(USER_ID); sync(externalUser, SyncResult.Status.ADD); Tree tree = r.getTree(userManager.getAuthorizable(USER_ID).getPath()); PropertyState extPrincipalNames = tree.getProperty(ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES); assertNotNull(extPrincipalNames); Set<String> pNames = Sets.newHashSet(extPrincipalNames.getValue(Type.STRINGS)); Set<String> expected = Sets.newHashSet(); collectGroupPrincipals(expected, externalUser.getDeclaredGroups(), Long.MAX_VALUE); assertEquals(expected, pNames); }
private void sync(@NotNull String id, boolean isGroup) throws Exception { ctx = sh.createContext(idp, userManager, valueFactory); ExternalIdentity exIdentity = (isGroup) ? idp.getGroup(id) : idp.getUser(id); assertNotNull(exIdentity); SyncResult res = ctx.sync(exIdentity); assertEquals(idp.getName(), res.getIdentity().getExternalIdRef().getProviderName()); assertSame(SyncResult.Status.ADD, res.getStatus()); r.commit(); }
@Test public void testAutoMembership() throws Exception { Group gr = userManager.createGroup("group" + UUID.randomUUID()); r.commit(); syncConfig.user().setAutoMembership(gr.getID(), "non-existing-group"); SyncResult result = syncContext.sync(idp.getUser(USER_ID)); assertSame(SyncResult.Status.ADD, result.getStatus()); User u = userManager.getAuthorizable(USER_ID, User.class); assertFalse(gr.isDeclaredMember(u)); assertFalse(gr.isMember(u)); }
@Test public void testSyncExternalUserDepth0() throws Exception { syncConfig.user().setMembershipNestingDepth(0); ExternalUser externalUser = idp.getUser(USER_ID); sync(externalUser, SyncResult.Status.ADD); Tree tree = r.getTree(userManager.getAuthorizable(USER_ID).getPath()); PropertyState extPrincipalNames = tree.getProperty(ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES); assertNotNull(extPrincipalNames); assertEquals(0, extPrincipalNames.count()); }
@Test public void testInitialSyncExternalUsers() throws Exception { ExternalUser externalUser = idp.getUser(TestIdentityProvider.ID_TEST_USER); String[] externalId = new String[] {externalUser.getExternalId().getString()}; String[] result = syncMBean.syncExternalUsers(externalId); assertResultMessages(result, TestIdentityProvider.ID_TEST_USER, "add"); UserManager userManager = getUserManager(); User testUser = userManager.getAuthorizable(externalUser.getId(), User.class); assertNotNull(testUser); for (ExternalIdentityRef groupRef : externalUser.getDeclaredGroups()) { assertNotNull(userManager.getAuthorizable(groupRef.getId())); } }