mirror of
https://github.com/keycloak/keycloak.git
synced 2025-12-16 20:15:46 -06:00
Manual sync not executed because of the last sync time
Closes #44552 Signed-off-by: Pedro Igor <pigor.craveiro@gmail.com>
This commit is contained in:
@@ -38,8 +38,18 @@ final class UserStorageSyncTask implements ScheduledTask {
|
||||
@Override
|
||||
public void run(KeycloakSession session) {
|
||||
RealmModel realm = session.realms().getRealm(realmId);
|
||||
|
||||
session.getContext().setRealm(realm);
|
||||
runWithResult(session);
|
||||
|
||||
UserStorageProviderModel provider = getStorageModel(session);
|
||||
|
||||
if (isSyncPeriod(provider)) {
|
||||
runWithResult(session);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debugf("Ignored LDAP %s users-sync with storage provider %s due small time since last sync in realm %s", //
|
||||
syncMode, provider.getName(), realmId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,19 +59,10 @@ final class UserStorageSyncTask implements ScheduledTask {
|
||||
|
||||
SynchronizationResult runWithResult(KeycloakSession session) {
|
||||
try {
|
||||
UserStorageProviderModel provider = getStorageModel(session);
|
||||
|
||||
if (isSyncPeriod(provider)) {
|
||||
return switch (syncMode) {
|
||||
case FULL -> runFullSync(session);
|
||||
case CHANGED -> runIncrementalSync(session);
|
||||
};
|
||||
}
|
||||
|
||||
logger.debugf("Ignored LDAP %s users-sync with storage provider %s due small time since last sync in realm %s", //
|
||||
syncMode, provider.getName(), realmId);
|
||||
|
||||
return SynchronizationResult.ignored();
|
||||
return switch (syncMode) {
|
||||
case FULL -> runFullSync(session);
|
||||
case CHANGED -> runIncrementalSync(session);
|
||||
};
|
||||
} catch (Throwable t) {
|
||||
logger.errorf(t, "Error occurred during %s users-sync in realm %s and user provider %s", syncMode, realmId, providerId);
|
||||
}
|
||||
|
||||
@@ -132,8 +132,43 @@ public class SyncFederationTest extends AbstractAuthTest {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForceManualSync() {
|
||||
// Enable timer for SyncDummyUserFederationProvider
|
||||
testingClient.server().run(session -> {
|
||||
RealmModel appRealm = session.realms().getRealmByName(AuthRealm.TEST);
|
||||
UserStorageProviderModel model = new UserStorageProviderModel();
|
||||
|
||||
private static final UserStorageProviderModel findDummyProviderModel(RealmModel realm) {
|
||||
model.setProviderId(DummyUserFederationProviderFactory.PROVIDER_NAME);
|
||||
model.setPriority(1);
|
||||
model.setName("test-sync-dummy");
|
||||
model.setFullSyncPeriod(1);
|
||||
model.setLastSync(0);
|
||||
|
||||
appRealm.addComponentModel(model);
|
||||
});
|
||||
|
||||
testingClient.server().run(session -> {
|
||||
RealmModel appRealm = session.realms().getRealmByName(AuthRealm.TEST);
|
||||
UserStorageProviderModel dummyModel = findDummyProviderModel(appRealm);
|
||||
KeycloakSessionFactory sessionFactory = session.getKeycloakSessionFactory();
|
||||
|
||||
sleep(dummyModel.getFullSyncPeriod() * 2L);
|
||||
session.getContext().setRealm(appRealm);
|
||||
SynchronizationResult result = UserStoragePrivateUtil.runFullSync(sessionFactory, dummyModel);
|
||||
Assert.assertFalse(result.isIgnored());
|
||||
});
|
||||
|
||||
// remove dummyProvider
|
||||
testingClient.server().run(session -> {
|
||||
RealmModel appRealm = session.realms().getRealmByName(AuthRealm.TEST);
|
||||
session.getContext().setRealm(appRealm);
|
||||
UserStorageProviderModel dummyModel = findDummyProviderModel(appRealm);
|
||||
appRealm.removeComponent(dummyModel);
|
||||
});
|
||||
}
|
||||
|
||||
private static UserStorageProviderModel findDummyProviderModel(RealmModel realm) {
|
||||
return realm.getComponentsStream()
|
||||
.filter(component -> Objects.equals(component.getName(), "test-sync-dummy"))
|
||||
.map(UserStorageProviderModel::new)
|
||||
|
||||
Reference in New Issue
Block a user