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.dal;
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;
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;
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;
61 @ContextConfiguration(classes = {DataSourceConfig.class, SystemProperties.class, MockedAaiClientAndFeatureManagerConfig.class})
62 public class AsyncInstantiationRepositoryTest extends AsyncInstantiationBaseTest {
65 private DataAccessService dataAccessService;
66 private AsyncInstantiationRepository asyncInstantiationRepository;
69 void initServicesInfoService() {
70 asyncInstantiationRepository = new AsyncInstantiationRepository(dataAccessService);
71 createInstanceParamsMaps();
72 createNewTestServicesInfoWithServiceModelID();
75 private void createNewTestServicesInfoWithServiceModelID() {
77 LocalDateTime NOW = LocalDateTime.now();
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);
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" },
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));
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)));
117 public void whenFilterServiceByNotExistUUID_emptyListIsReturned() {
118 List<ServiceInfo> serviceInfoListResult = asyncInstantiationRepository.listInstantiatedServicesByServiceModelId(UUID.randomUUID());
119 assertThat(serviceInfoListResult, is(empty()));
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));
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);
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)
150 for(ResourceInfo info: requestInfoList){
151 asyncInstantiationRepository.saveResourceInfo(info);
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));