This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_0_X by this push:
new 4e25508580 [SYNCOPE-1905] Fix SinglePullJobDelegate and add test pull
single group (#1157)
4e25508580 is described below
commit 4e25508580d6fa97c965c9d28520ceb481393b45
Author: Valerio Crescia <[email protected]>
AuthorDate: Wed Aug 13 11:25:21 2025 +0200
[SYNCOPE-1905] Fix SinglePullJobDelegate and add test pull single group
(#1157)
---
.../java/pushpull/SinglePullJobDelegate.java | 1 +
.../apache/syncope/fit/core/PullTaskITCase.java | 35 ++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
index f3b23a0086..329ca5b328 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
@@ -124,6 +124,7 @@ public class SinglePullJobDelegate extends PullJobDelegate
implements SyncopeSin
AnyType anyType = anyTypeDAO.findById(provision.getAnyType()).
orElseThrow(() -> new NotFoundException("AnyType" +
provision.getAnyType()));
+ ghandler = buildGroupHandler();
dispatcher.addHandlerSupplier(provision.getObjectClass(), () -> {
SyncopePullResultHandler handler;
switch (anyType.getKind()) {
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index abca7b0960..fcb7ed5981 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -80,6 +80,7 @@ import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.PagedResult;
import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.Provision;
+import org.apache.syncope.common.lib.to.ProvisioningReport;
import org.apache.syncope.common.lib.to.ProvisioningResult;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.RemediationTO;
@@ -118,6 +119,7 @@ import
org.apache.syncope.core.provisioning.java.pushpull.LDAPPasswordPullAction
import org.apache.syncope.fit.core.reference.TestInboundActions;
import org.identityconnectors.framework.common.objects.AttributeUtil;
import org.identityconnectors.framework.common.objects.Name;
+import org.identityconnectors.framework.common.objects.Uid;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
@@ -1641,4 +1643,37 @@ public class PullTaskITCase extends AbstractTaskITCase {
Optional.ofNullable(user).ifPresent(u -> deleteUser(u.getKey()));
}
}
+
+ @Test
+ public void issueSYNCOPE1905() {
+
+ ldapCleanup();
+
+ PullTaskTO pullTaskTO = new PullTaskTO();
+ pullTaskTO.setResource(RESOURCE_NAME_LDAP);
+ pullTaskTO.setDestinationRealm(SyncopeConstants.ROOT_REALM);
+ pullTaskTO.setUnmatchingRule(UnmatchingRule.PROVISION);
+ pullTaskTO.setMatchingRule(MatchingRule.UPDATE);
+ pullTaskTO.setPerformCreate(true);
+ pullTaskTO.setPerformUpdate(true);
+
+ ProvisioningReport result = null;
+ try {
+ List<ProvisioningReport> results =
+ RECONCILIATION_SERVICE.pull(new
ReconQuery.Builder(AnyTypeKind.GROUP.name(),
+ RESOURCE_NAME_LDAP).fiql(
+ SyncopeClient.getConnObjectTOFiqlSearchConditionBuilder()
+ .is(Uid.NAME)
+ .equalToIgnoreCase("testLDAPGroup")
+ .query()).build(), pullTaskTO);
+
+ assertNotNull(results.getFirst());
+ result = results.getFirst();
+
+ assertEquals(ProvisioningReport.Status.SUCCESS,
result.getStatus());
+ assertEquals("testLDAPGroup", results.getFirst().getName());
+ } finally {
+ Optional.ofNullable(result).ifPresent(r ->
deleteGroup(r.getKey()));
+ }
+ }
}