/** * {@inheritDoc} */ @Override public boolean requiresSync(@NotNull SyncedIdentity identity) { if (identity.getExternalIdRef() == null || identity.lastSynced() < 0) { return true; } final long now = System.currentTimeMillis(); final long expirationTime = identity.isGroup() ? config.group().getExpirationTime() : config.user().getExpirationTime(); return now - identity.lastSynced() > expirationTime; }
@Test public void testRequiresSyncGroup() throws Exception { sync("c", true); SyncedIdentity si = syncHandler.findIdentity(userManager, "c"); assertNotNull(si); assertTrue(si.isGroup()); assertFalse(syncHandler.requiresSync(si)); }
@Test public void testFindGroupIdentity() throws Exception { SyncedIdentity si = syncHandler.findIdentity(userManager, "c"); assertNull(si); sync("c", true); si = syncHandler.findIdentity(userManager, "c"); assertNotNull(si); assertTrue(si.isGroup()); assertNotNull(si.getExternalIdRef()); }
@Test public void testCreateSyncedIdentitySyncedGroup() throws Exception { ExternalIdentity externalGroup = idp.listGroups().next(); sync(externalGroup); Authorizable a = userManager.getAuthorizable(externalGroup.getId()); SyncedIdentity si = DefaultSyncContext.createSyncedIdentity(a); assertNotNull(si); assertEquals(a.getID(), si.getId()); assertNotNull(si.getExternalIdRef()); assertTrue(si.isGroup()); assertEquals(syncCtx.now, si.lastSynced()); }
@Test public void testCreateSyncedIdentitySyncedUser() throws Exception { ExternalIdentity externalUser = idp.listUsers().next(); sync(externalUser); Authorizable a = userManager.getAuthorizable(externalUser.getId()); SyncedIdentity si = DefaultSyncContext.createSyncedIdentity(a); assertNotNull(si); assertEquals(a.getID(), si.getId()); assertNotNull(si.getExternalIdRef()); assertFalse(si.isGroup()); assertEquals(syncCtx.now, si.lastSynced()); }
@Test public void testSyncByForeignUserId() throws Exception { SyncResult result = syncCtx.sync(getTestUser().getID()); assertEquals(SyncResult.Status.FOREIGN, result.getStatus()); SyncedIdentity si = result.getIdentity(); assertNotNull(si); assertNull(si.getExternalIdRef()); assertFalse(si.isGroup()); }
@Test public void testSyncByForeignGroupId() throws Exception { SyncResult result = syncCtx.sync(createTestGroup().getID()); assertEquals(SyncResult.Status.FOREIGN, result.getStatus()); SyncedIdentity si = result.getIdentity(); assertNotNull(si); assertNull(si.getExternalIdRef()); assertTrue(si.isGroup()); }
@Test public void testCreateSyncedIdentityLocalUser() throws Exception { User u = getTestUser(); SyncedIdentity si = DefaultSyncContext.createSyncedIdentity(u); assertNotNull(si); assertEquals(u.getID(), si.getId()); assertNull(si.getExternalIdRef()); assertFalse(si.isGroup()); assertEquals(-1, si.lastSynced()); }
@Test public void testCreateSyncedIdentityLocalGroup() throws Exception { Group gr = createTestGroup(); SyncedIdentity si = DefaultSyncContext.createSyncedIdentity(gr); assertNotNull(si); assertEquals(gr.getID(), si.getId()); assertNull(si.getExternalIdRef()); assertTrue(si.isGroup()); assertEquals(-1, si.lastSynced()); }
@Test public void testSyncForeignExternalGroup() throws Exception { ExternalGroup foreign = new TestIdentityProvider.ForeignExternalGroup(); SyncResult res = syncContext.sync(foreign); assertNotNull(res); assertSame(SyncResult.Status.FOREIGN, res.getStatus()); // expect {@code SyncedIdentity} in accordance with {@code sync(String userId)}, // where the authorizable is found to be linked to a different IDP. SyncedIdentity si = res.getIdentity(); assertNotNull(si); assertEquals(foreign.getId(), si.getId()); ExternalIdentityRef ref = si.getExternalIdRef(); assertNotNull(ref); assertEquals(foreign.getExternalId(), ref); assertTrue(si.isGroup()); assertEquals(-1, si.lastSynced()); assertFalse(r.hasPendingChanges()); }
@Test public void testSyncForeignExternalUser() throws Exception { ExternalIdentity foreign = new TestIdentityProvider.ForeignExternalUser(); SyncResult res = syncCtx.sync(foreign); assertNotNull(res); assertSame(SyncResult.Status.FOREIGN, res.getStatus()); // expect {@code SyncedIdentity} in accordance with {@code sync(String userId)}, // where the authorizable is found to be linked to a different IDP. SyncedIdentity si = res.getIdentity(); assertNotNull(si); assertEquals(foreign.getId(), si.getId()); ExternalIdentityRef ref = si.getExternalIdRef(); assertNotNull(ref); assertEquals(foreign.getExternalId(), ref); assertFalse(si.isGroup()); assertEquals(-1, si.lastSynced()); assertFalse(root.hasPendingChanges()); }
@Test public void testSyncForeignExternalGroup() throws Exception { ExternalIdentity foreign = new TestIdentityProvider.ForeignExternalGroup(); SyncResult res = syncCtx.sync(foreign); assertNotNull(res); assertSame(SyncResult.Status.FOREIGN, res.getStatus()); // expect {@code SyncedIdentity} in accordance with {@code sync(String userId)}, // where the authorizable is found to be linked to a different IDP. SyncedIdentity si = res.getIdentity(); assertNotNull(si); assertEquals(foreign.getId(), si.getId()); ExternalIdentityRef ref = si.getExternalIdRef(); assertNotNull(ref); assertEquals(foreign.getExternalId(), ref); assertTrue(si.isGroup()); assertEquals(-1, si.lastSynced()); assertFalse(root.hasPendingChanges()); }