package jnpf.dmsService;
|
import jnpf.dmsMapper.*;
|
import jnpf.dmsEntity.storage.approval.DmsDisableRequest;
|
import java.util.List;
|
import java.util.stream.IntStream;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import static org.mockito.Mockito.*;
|
class DmsApprovedFileEffectiveJobTest {
|
@Test void disabledStopFeatureNeverReadsNewColumnsOrNativeStopTables() {
|
DmsApprovedBatchMapper batches=mock(DmsApprovedBatchMapper.class);
|
DmsApprovedFileRetryService retry=mock(DmsApprovedFileRetryService.class);
|
DmsApprovedDisableMapper stops=mock(DmsApprovedDisableMapper.class);
|
DmsApprovedDisableService service=mock(DmsApprovedDisableService.class);
|
DmsApprovedFileEffectiveJob job=new DmsApprovedFileEffectiveJob(batches,retry,stops,service);
|
job.activateDue();verify(batches).discover();verify(batches).retryCandidates(false,true);
|
verifyNoInteractions(stops,service);
|
ReflectionTestUtils.setField(job,"disableEnabled",true);job.activateDue();
|
verify(stops).approvedApplications(null,100);verify(batches).retryCandidates(true,true);
|
}
|
|
@Test void failedFirstPageDoesNotStarveLaterApplicationsAndIsRetriedNextRun() {
|
DmsApprovedBatchMapper batches=mock(DmsApprovedBatchMapper.class);
|
DmsApprovedFileRetryService retry=mock(DmsApprovedFileRetryService.class);
|
DmsApprovedDisableMapper stops=mock(DmsApprovedDisableMapper.class);
|
DmsApprovedDisableService service=mock(DmsApprovedDisableService.class);
|
DmsApprovedFileEffectiveJob job=new DmsApprovedFileEffectiveJob(batches,retry,stops,service);
|
ReflectionTestUtils.setField(job,"disableEnabled",true);
|
List<DmsDisableRequest> first=IntStream.range(0,100).mapToObj(i->application("failed-"+i)).toList();
|
DmsDisableRequest later=application("later");
|
when(stops.approvedApplications(null,100)).thenReturn(first);
|
when(stops.approvedApplications(first.get(99),100)).thenReturn(List.of(later));
|
when(service.enqueue(eq("tenant"),eq("flow"),startsWith("failed-"),eq("yichexiao")))
|
.thenThrow(new IllegalStateException("persistent invalid application"));
|
|
job.activateDue();
|
verify(service).enqueue("tenant","flow","later","yichexiao");
|
verify(batches).retryCandidates(true,true);
|
job.activateDue();
|
verify(stops,times(2)).approvedApplications(null,100);
|
verify(service,times(2)).enqueue("tenant","flow","failed-0","yichexiao");
|
verify(service,times(2)).enqueue("tenant","flow","later","yichexiao");
|
}
|
|
@Test void fullSuccessfulPageUsesLastIdentityAfterRowsLeaveDiscoveryQuery() {
|
DmsApprovedBatchMapper batches=mock(DmsApprovedBatchMapper.class);
|
DmsApprovedDisableMapper stops=mock(DmsApprovedDisableMapper.class);
|
DmsApprovedDisableService service=mock(DmsApprovedDisableService.class);
|
DmsApprovedFileEffectiveJob job=new DmsApprovedFileEffectiveJob(batches,
|
mock(DmsApprovedFileRetryService.class),stops,service);
|
ReflectionTestUtils.setField(job,"disableEnabled",true);
|
List<DmsDisableRequest> first=IntStream.range(0,100).mapToObj(i->application("task-"+i)).toList();
|
when(stops.approvedApplications(null,100)).thenReturn(first);
|
job.activateDue();
|
verify(service,times(100)).enqueue(eq("tenant"),eq("flow"),anyString(),eq("yichexiao"));
|
verify(stops).approvedApplications(null,100);
|
verify(stops).approvedApplications(first.get(99),100);
|
verifyNoMoreInteractions(stops);
|
}
|
|
@Test void disabledBackoffIsPassedToCandidateSelection() {
|
DmsApprovedBatchMapper batches=mock(DmsApprovedBatchMapper.class);
|
DmsApprovedFileEffectiveJob job=new DmsApprovedFileEffectiveJob(batches,
|
mock(DmsApprovedFileRetryService.class),mock(DmsApprovedDisableMapper.class),
|
mock(DmsApprovedDisableService.class));
|
ReflectionTestUtils.setField(job,"retryBackoffEnabled",false);
|
job.activateDue();
|
verify(batches).retryCandidates(false,false);
|
}
|
|
private DmsDisableRequest application(String taskId) {
|
DmsDisableRequest row=new DmsDisableRequest();
|
row.setTenantId("tenant");row.setFlowId("flow");row.setTaskId(taskId);
|
row.setApplicationId("application-"+taskId);row.setOperation("yichexiao");
|
return row;
|
}
|
}
|