Add DB query for all model-service-ids which have a template
[vid.git] / vid-app-common / src / test / java / org / onap / vid / dal / AsyncInstantiationRepositoryTest.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.dal;
22
23 import static java.util.stream.Collectors.toList;
24 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
25 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
26 import static org.hamcrest.MatcherAssert.assertThat;
27 import static org.hamcrest.Matchers.contains;
28 import static org.hamcrest.Matchers.empty;
29 import static org.hamcrest.Matchers.is;
30 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
31 import static org.hamcrest.core.IsEqual.equalTo;
32 import static org.onap.vid.job.Job.JobStatus.COMPLETED;
33
34 import com.google.common.collect.ImmutableList;
35 import com.google.common.collect.ImmutableSet;
36 import java.time.LocalDateTime;
37 import java.time.ZonedDateTime;
38 import java.util.List;
39 import java.util.Map;
40 import java.util.Set;
41 import java.util.UUID;
42 import javax.inject.Inject;
43 import org.onap.portalsdk.core.service.DataAccessService;
44 import org.onap.portalsdk.core.util.SystemProperties;
45 import org.onap.vid.config.DataSourceConfig;
46 import org.onap.vid.config.MockedAaiClientAndFeatureManagerConfig;
47 import org.onap.vid.job.Job;
48 import org.onap.vid.model.ResourceInfo;
49 import org.onap.vid.model.ServiceInfo;
50 import org.onap.vid.model.ServiceInfo.ServiceAction;
51 import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
52 import org.onap.vid.mso.rest.AsyncRequestStatus;
53 import org.onap.vid.mso.rest.RequestStatus;
54 import org.onap.vid.services.AsyncInstantiationBaseTest;
55 import org.onap.vid.utils.TimeUtils;
56 import org.springframework.test.context.ContextConfiguration;
57 import org.testng.annotations.BeforeClass;
58 import org.testng.annotations.DataProvider;
59 import org.testng.annotations.Test;
60
61 @ContextConfiguration(classes = {DataSourceConfig.class, SystemProperties.class, MockedAaiClientAndFeatureManagerConfig.class})
62 public class AsyncInstantiationRepositoryTest extends AsyncInstantiationBaseTest {
63
64     @Inject
65     private DataAccessService dataAccessService;
66     private AsyncInstantiationRepository asyncInstantiationRepository;
67
68     @BeforeClass
69     void initServicesInfoService() {
70         asyncInstantiationRepository = new AsyncInstantiationRepository(dataAccessService);
71         createInstanceParamsMaps();
72         createNewTestServicesInfoWithServiceModelID();
73     }
74
75     private void createNewTestServicesInfoWithServiceModelID() {
76
77         LocalDateTime NOW = LocalDateTime.now();
78
79         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "0", NOW.minusYears(1L), NOW, COMPLETED, false, false,
80             MODEL_UUID, ServiceAction.RESUME);
81         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "1", NOW.minusYears(1L), NOW, COMPLETED, false, false,
82             MODEL_UUID, ServiceAction.INSTANTIATE);
83         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "2", NOW, NOW, COMPLETED, false, false,
84             MODEL_UUID_2, ServiceAction.INSTANTIATE);
85         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "3", NOW, NOW, COMPLETED, false, false,
86             MODEL_UUID, ServiceAction.INSTANTIATE);
87         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "hidden", NOW, NOW, COMPLETED, true, false,
88             MODEL_UUID, ServiceAction.INSTANTIATE);
89         addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "4", NOW, NOW, COMPLETED, false, false,
90             MODEL_UUID_3, ServiceAction.UPDATE);
91     }
92
93     @DataProvider
94     public static Object[][] listServicesByServiceModelIdDataProvider() {
95         return new Object[][]{
96             { "services info filtered by MODEL_UUID not hidden , ordered by newer first", MODEL_UUID, "3", "1" },
97             { "services info filtered by MODEL_UUID2", MODEL_UUID_2, "2" },
98         };
99     }
100
101     @Test(dataProvider = "listServicesByServiceModelIdDataProvider")
102     public void testListServicesByServiceModelId(String desc, String modelUUID, String... expectedResult) {
103         List<ServiceInfo> serviceInfoListResult = asyncInstantiationRepository.
104             listInstantiatedServicesByServiceModelId(UUID.fromString(modelUUID));
105         assertThat(desc, serviceInfoListResult.stream().map(ServiceInfo::getServiceInstanceName).collect(toList()),
106             contains(expectedResult));
107     }
108
109     @Test
110     public void getAllTemplatesServiceModelIds_givenDbWithSeveralModelIDs_2ReturnedAnd1OmittedAndDuplicatesRemoved() {
111             Set<String> actual = asyncInstantiationRepository.getAllTemplatesServiceModelIds();
112             // MODEL_UUID3 is Action=UPDATE, therefore omitted
113             assertThat(actual, equalTo(ImmutableSet.of(MODEL_UUID, MODEL_UUID_2)));
114     }
115
116     @Test
117     public void whenFilterServiceByNotExistUUID_emptyListIsReturned() {
118         List<ServiceInfo> serviceInfoListResult = asyncInstantiationRepository.listInstantiatedServicesByServiceModelId(UUID.randomUUID());
119         assertThat(serviceInfoListResult, is(empty()));
120     }
121
122     @Test
123     public void whenSaveNewRequest_thenRequestIsRetrieved() {
124         ServiceInstantiation serviceInstantiation = generateALaCarteWithVnfsServiceInstantiationPayload();
125         UUID jobUuid = UUID.randomUUID();
126         asyncInstantiationRepository.addJobRequest(jobUuid, serviceInstantiation);
127         ServiceInstantiation stored = asyncInstantiationRepository.getJobRequest(jobUuid);
128         assertThat(stored, jsonEquals(serviceInstantiation).when(IGNORING_ARRAY_ORDER));
129     }
130
131     private AsyncRequestStatus createAsyncRequestStatus(String message, String requestState){
132         RequestStatus requestStatus = new RequestStatus(requestState, message, TimeUtils.zonedDateTimeToString(ZonedDateTime.now()));
133         AsyncRequestStatus.Request request = new AsyncRequestStatus.Request(requestStatus);
134         return new AsyncRequestStatus(request);
135     }
136
137     @Test
138     public void getResourceInfoByRootJobId_returnsMapOfjobIdResources(){
139         UUID jobId1= UUID.randomUUID();
140         UUID jobId2= UUID.randomUUID();
141         AsyncRequestStatus errorMessage= createAsyncRequestStatus("MSO failed resource", "FAILED");
142         List<ResourceInfo> requestInfoList= ImmutableList.of(
143                 new ResourceInfo("aaaaaa",jobId1, "64f3123a-f9a8-4591-b481-d662134bcb52", Job.JobStatus.COMPLETED, null),
144                 new ResourceInfo("bbbbbb",jobId1, "65f3123a-f9a8-4591-b481-kodj9ig87gdu", Job.JobStatus.COMPLETED_WITH_ERRORS, null),
145                 new ResourceInfo("dddddd",jobId1, null, Job.JobStatus.FAILED, null),
146                 new ResourceInfo("cccccc",jobId1, null, Job.JobStatus.FAILED, errorMessage),
147                 new ResourceInfo("eeeeee",jobId2, null, Job.JobStatus.FAILED, null),
148                 new ResourceInfo("ffffff",jobId2, "66f3123a-f9a8-4591-b481-ghfgh6767567", Job.JobStatus.COMPLETED, null)
149         );
150         for(ResourceInfo info: requestInfoList){
151             asyncInstantiationRepository.saveResourceInfo(info);
152         }
153         Map<String, ResourceInfo> storedByTrackId = asyncInstantiationRepository.getResourceInfoByRootJobId(jobId1);
154         assertThat(storedByTrackId.values(), hasSize(4));
155         assertThat(storedByTrackId.get("aaaaaa").getInstanceId(), equalTo("64f3123a-f9a8-4591-b481-d662134bcb52"));
156         assertThat(storedByTrackId.get("cccccc").getErrorMessage().request.requestStatus.getStatusMessage(), equalTo("MSO failed resource"));
157         assertThat(storedByTrackId.get("cccccc").getErrorMessage().request.requestStatus.getRequestState(), equalTo("FAILED"));
158         assertThat(storedByTrackId.get("dddddd").getErrorMessage(), equalTo(null));
159         assertThat(storedByTrackId.values(),
160             jsonEquals(requestInfoList.stream().filter(i -> i.getRootJobId().equals(jobId1)).collect(
161                 toList())).when(IGNORING_ARRAY_ORDER));
162     }
163 }