刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;
    }
}