FINERACT-2181: Enhance job execution polling in E2E tests

This commit is contained in:
Adam Saghy
2025-06-10 17:54:51 +02:00
parent 3cef64f3cf
commit c37e2daa86
5 changed files with 137 additions and 97 deletions
@@ -0,0 +1,38 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.test.messaging.config;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
@Getter
public class JobPollingProperties {
@Value("${fineract-test.job.interval-in-sec}")
private long pollingIntervalInSec;
@Value("${fineract-test.job.delay-in-sec}")
private long pollingDelayInSec;
@Value("${fineract-test.job.at-most-in-sec}")
private long pollingAtMostInSec;
}
@@ -31,6 +31,7 @@ import org.apache.fineract.client.services.SchedulerJobApi;
import org.apache.fineract.test.data.job.Job;
import org.apache.fineract.test.data.job.JobResolver;
import org.apache.fineract.test.helper.ErrorHelper;
import org.apache.fineract.test.messaging.config.JobPollingProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import retrofit2.Response;
@@ -43,6 +44,9 @@ public class JobService {
@Autowired
private SchedulerJobApi schedulerJobApi;
@Autowired
private JobPollingProperties jobPollingProperties;
private final JobResolver jobResolver;
public void execute(Job job) {
@@ -62,10 +66,10 @@ public class JobService {
private void waitUntilJobIsFinished(Job job) {
String jobName = job.getName();
await().atMost(Duration.ofMinutes(2)) //
await().atMost(Duration.ofSeconds(jobPollingProperties.getPollingAtMostInSec())) //
.alias("%s didn't finish on time".formatted(jobName)) //
.pollInterval(Duration.ofSeconds(5)) //
.pollDelay(Duration.ofSeconds(5)) //
.pollInterval(Duration.ofSeconds(jobPollingProperties.getPollingIntervalInSec())) //
.pollDelay(Duration.ofSeconds(jobPollingProperties.getPollingDelayInSec())) //
.until(() -> {
log.info("Waiting for job {} to finish", jobName);
Long jobId = jobResolver.resolve(job);
@@ -130,6 +130,7 @@ import org.apache.fineract.test.helper.Utils;
import org.apache.fineract.test.initializer.global.LoanProductGlobalInitializerStep;
import org.apache.fineract.test.messaging.EventAssertion;
import org.apache.fineract.test.messaging.config.EventProperties;
import org.apache.fineract.test.messaging.config.JobPollingProperties;
import org.apache.fineract.test.messaging.event.EventCheckHelper;
import org.apache.fineract.test.messaging.event.loan.LoanRescheduledDueAdjustScheduleEvent;
import org.apache.fineract.test.messaging.event.loan.LoanStatusChangedEvent;
@@ -217,6 +218,9 @@ public class LoanStepDef extends AbstractStepDef {
@Autowired
private LoanDisbursementDetailsApi loanDisbursementDetailsApi;
@Autowired
private JobPollingProperties jobPollingProperties;
@When("Admin creates a new Loan")
public void createLoan() throws IOException {
Response<PostClientsResponse> clientResponse = testContext().get(TestContextKey.CLIENT_CREATE_RESPONSE);
@@ -2493,18 +2497,9 @@ public class LoanStepDef extends AbstractStepDef {
@When("Admin checks that Loan COB is running until the current business date")
public void checkLoanCOBCatchUpRunningUntilCOBBusinessDate() {
await().atMost(Duration.ofMinutes(2)) //
.pollInterval(Duration.ofSeconds(5)) //
.pollDelay(Duration.ofSeconds(5)) //
.until(() -> {
Response<IsCatchUpRunningDTO> isCatchUpRunningResponse = loanCobCatchUpApi.isCatchUpRunning().execute();
ErrorHelper.checkSuccessfulApiCall(isCatchUpRunningResponse);
IsCatchUpRunningDTO isCatchUpRunning = isCatchUpRunningResponse.body();
return isCatchUpRunning.getCatchUpRunning();
});
await().atMost(Duration.ofMinutes(4)) //
.pollInterval(Duration.ofSeconds(5)) //
.pollDelay(Duration.ofSeconds(5)) //
await().atMost(Duration.ofSeconds(jobPollingProperties.getPollingAtMostInSec())) //
.pollInterval(Duration.ofSeconds(jobPollingProperties.getPollingIntervalInSec())) //
.pollDelay(Duration.ofSeconds(jobPollingProperties.getPollingDelayInSec())) //
.until(() -> {
Response<IsCatchUpRunningDTO> isCatchUpRunningResponse = loanCobCatchUpApi.isCatchUpRunning().execute();
ErrorHelper.checkSuccessfulApiCall(isCatchUpRunningResponse);
@@ -40,3 +40,6 @@ fineract-test.event.wait-timeout-in-sec=${EVENT_WAIT_TIMEOUT_IN_SEC:5}
fineract-test.event.verification-enabled=${EVENT_VERIFICATION_ENABLED:false}
fineract-test.client-read-timeout=${CLIENT_READ_TIMEOUT:60}
fineract-test.job.interval-in-sec=${POLLING_INTERVAL_IN_SEC:1}
fineract-test.job.delay-in-sec=${POLLING_DELAY_IN_SEC:3}
fineract-test.job.at-most-in-sec=${POLLING_AT_MOST_IN_SEC:120}