2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.vid.job.command;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyString;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.when;
27 import static org.testng.AssertJUnit.assertEquals;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List;
32 import java.util.UUID;
33 import java.util.stream.Collectors;
34 import org.mockito.InjectMocks;
35 import org.mockito.Mock;
36 import org.mockito.MockitoAnnotations;
37 import org.onap.portalsdk.core.service.DataAccessService;
38 import org.onap.vid.job.Job.JobStatus;
39 import org.onap.vid.job.impl.JobDaoImpl;
40 import org.onap.vid.properties.Features;
41 import org.onap.vid.utils.DaoUtils;
42 import org.testng.annotations.BeforeClass;
43 import org.testng.annotations.DataProvider;
44 import org.testng.annotations.Test;
45 import org.togglz.core.manager.FeatureManager;
47 public class WatchChildrenJobsBLTest {
49 private DataAccessService dataAccessService;
52 private WatchChildrenJobsBL watchChildrenJobsBL;
55 private static FeatureManager featureManager;
58 public void initMocks() {
59 MockitoAnnotations.initMocks(this);
62 public static Object[][] dataProviderForChildrenStatusOnly() {
63 return new Object[][]{
64 {Arrays.asList(JobStatus.STOPPED, JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS},
65 {Arrays.asList(JobStatus.COMPLETED, JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_ERRORS},
66 {Arrays.asList(null, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS},
67 {Arrays.asList(null, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS},
68 {Arrays.asList(null, JobStatus.FAILED), JobStatus.FAILED},
69 {new ArrayList<>(), JobStatus.COMPLETED_WITH_NO_ACTION}
74 public static Object[][] childrenStatusDataProvider() {
76 List<Object[]> result = new ArrayList<>();
77 result.addAll(Arrays.asList(dataProviderForChildrenStatusOnly()));
78 result.addAll(Arrays.asList(inputsStatusAndExpectedOutputDataProvider()));
79 return result.toArray(new Object[result.size()][]);
83 public static Object[][] inputsStatusAndExpectedOutputDataProvider() {
84 return new Object[][]{
85 {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED), JobStatus.COMPLETED},
86 {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED},
87 {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.FAILED},
88 {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED), getErrorStatus()},
89 {Arrays.asList(JobStatus.RESOURCE_IN_PROGRESS, JobStatus.FAILED), JobStatus.IN_PROGRESS},
90 {Arrays.asList(JobStatus.PAUSE, JobStatus.FAILED), JobStatus.IN_PROGRESS},
91 {Arrays.asList(JobStatus.PENDING, JobStatus.FAILED), JobStatus.IN_PROGRESS},
92 {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.COMPLETED), JobStatus.IN_PROGRESS},
93 {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS},
94 {Arrays.asList(JobStatus.COMPLETED, getErrorStatus()), getErrorStatus()},
95 {Arrays.asList(getErrorStatus(), JobStatus.FAILED), getErrorStatus()},
96 {Arrays.asList(getErrorStatus(), getErrorStatus()), getErrorStatus()},
97 {Arrays.asList(getErrorStatus(), JobStatus.COMPLETED_WITH_NO_ACTION), getErrorStatus()},
98 {Arrays.asList(JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_NO_ACTION},
99 {Arrays.asList(JobStatus.COMPLETED_AND_PAUSED, JobStatus.RESOURCE_IN_PROGRESS), JobStatus.IN_PROGRESS},
100 {Arrays.asList(JobStatus.COMPLETED_AND_PAUSED, JobStatus.COMPLETED), JobStatus.COMPLETED_AND_PAUSED},
101 {Arrays.asList(JobStatus.COMPLETED_AND_PAUSED, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS},
105 @Test(dataProvider = "childrenStatusDataProvider")
106 public void whenRetrieveListOfChildrenWithStatues_thenAccumulatedChildrenStatusAsExpected(List<JobStatus> childJobs, JobStatus expectedChildrenJobsStatus) {
107 //init sql result mock
108 List<JobDaoImpl> mockChildren = childJobs.stream().map(st -> {
109 JobDaoImpl job = new JobDaoImpl();
110 job.setUuid(UUID.randomUUID());
113 }).collect(Collectors.toList());
114 when(dataAccessService.getList(eq(JobDaoImpl.class), anyString(), any(), eq(DaoUtils.getPropsMap())))
115 .thenReturn(mockChildren);
117 List<String> uuids = mockChildren.stream().map(job -> job.getUuid().toString()).collect(Collectors.toList());
118 assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.retrieveChildrenJobsStatus(uuids));
121 @Test(dataProvider = "inputsStatusAndExpectedOutputDataProvider")
122 public void whenCumulate2JobStatus_thenResultAsExpected(List<JobStatus> jobs, JobStatus expectedChildrenJobsStatus) {
123 assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.cumulateJobStatus(jobs.get(0), jobs.get(1)));
125 private static JobStatus getErrorStatus() {
126 return featureManager.isActive(Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE) ?
127 JobStatus.FAILED_AND_PAUSED : JobStatus.COMPLETED_WITH_ERRORS;