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 <valerio.cres...@tirasa.net> 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())); + } + } }