Implant vid-app-common org.onap.vid.job (main and test)
[vid.git] / vid-app-common / src / test / java / org / onap / vid / job / command / WatchChildrenJobsBLTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.vid.job.command;
22
23 import org.mockito.InjectMocks;
24 import org.mockito.Mock;
25 import org.mockito.MockitoAnnotations;
26 import org.onap.vid.job.Job.JobStatus;
27 import org.onap.vid.job.impl.JobDaoImpl;
28 import org.onap.vid.utils.DaoUtils;
29 import org.onap.portalsdk.core.service.DataAccessService;
30 import org.testng.annotations.BeforeClass;
31 import org.testng.annotations.DataProvider;
32 import org.testng.annotations.Test;
33
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.List;
37 import java.util.UUID;
38 import java.util.stream.Collectors;
39
40 import static org.mockito.ArgumentMatchers.*;
41 import static org.mockito.Mockito.when;
42 import static org.testng.AssertJUnit.assertEquals;
43
44 public class WatchChildrenJobsBLTest {
45     @Mock
46     private DataAccessService dataAccessService;
47
48     @InjectMocks
49     private WatchChildrenJobsBL watchChildrenJobsBL;
50
51     @BeforeClass
52     public void initMocks() {
53         MockitoAnnotations.initMocks(this);
54     }
55
56     public static Object[][] dataProviderForChildrenStatusOnly() {
57         return new Object[][]{
58                  {Arrays.asList(JobStatus.STOPPED, JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS},
59                  {Arrays.asList(JobStatus.COMPLETED, JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_ERRORS},
60                  {Arrays.asList(null, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS},
61                  {Arrays.asList(null, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS},
62                  {Arrays.asList(null, JobStatus.FAILED), JobStatus.FAILED},
63                  {new ArrayList<>(), JobStatus.COMPLETED_WITH_NO_ACTION}
64         };
65     }
66
67     @DataProvider
68     public static Object[][] childrenStatusDataProvider() {
69
70         List<Object[]> result = new ArrayList<>();
71         result.addAll(Arrays.asList(dataProviderForChildrenStatusOnly()));
72         result.addAll(Arrays.asList(inputsStatusAndExpectedOutputDataProvider()));
73         return result.toArray(new Object[result.size()][]);
74     }
75
76     @DataProvider
77     public static Object[][] inputsStatusAndExpectedOutputDataProvider() {
78         return new Object[][]{
79                 {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED), JobStatus.COMPLETED},
80                 {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED},
81                 {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.FAILED},
82                 {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS},
83                 {Arrays.asList(JobStatus.RESOURCE_IN_PROGRESS, JobStatus.FAILED), JobStatus.IN_PROGRESS},
84                 {Arrays.asList(JobStatus.PAUSE, JobStatus.FAILED), JobStatus.IN_PROGRESS},
85                 {Arrays.asList(JobStatus.PENDING, JobStatus.FAILED), JobStatus.IN_PROGRESS},
86                 {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.COMPLETED), JobStatus.IN_PROGRESS},
87                 {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.IN_PROGRESS),  JobStatus.IN_PROGRESS},
88                 {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED_WITH_ERRORS), JobStatus.COMPLETED_WITH_ERRORS},
89                 {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.FAILED), JobStatus.COMPLETED_WITH_ERRORS},
90                 {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.COMPLETED_WITH_ERRORS), JobStatus.COMPLETED_WITH_ERRORS},
91                 {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_ERRORS},
92                 {Arrays.asList(JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_NO_ACTION},
93
94
95         };
96     }
97
98     @Test(dataProvider = "childrenStatusDataProvider")
99     public void whenRetrieveListOfChildrenWithStatues_thenAccumulatedChildrenStatusAsExpected(List<JobStatus> childJobs, JobStatus expectedChildrenJobsStatus) {
100         //init sql result mock
101         List<JobDaoImpl> mockChildren = childJobs.stream().map(st -> {
102             JobDaoImpl job = new JobDaoImpl();
103             job.setUuid(UUID.randomUUID());
104             job.setStatus(st);
105             return job;
106         }).collect(Collectors.toList());
107         when(dataAccessService.getList(eq(JobDaoImpl.class), anyString(), any(), eq(DaoUtils.getPropsMap())))
108                 .thenReturn(mockChildren);
109
110         List<String> uuids = mockChildren.stream().map(job -> job.getUuid().toString()).collect(Collectors.toList());
111         assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.retrieveChildrenJobsStatus(uuids));
112     }
113
114     @Test(dataProvider = "inputsStatusAndExpectedOutputDataProvider")
115     public void whenCumulate2JobStatus_thenResultAsExpected(List<JobStatus> jobs, JobStatus expectedChildrenJobsStatus) {
116         assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.cumulateJobStatus(jobs.get(0), jobs.get(1)));
117     }
118 }