2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 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.so.apihandlerinfra;
23 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertThat;
26 import static org.mockito.Mockito.doNothing;
27 import static org.mockito.Mockito.doReturn;
28 import static org.mockito.Mockito.verify;
29 import java.io.IOException;
30 import java.nio.file.Files;
31 import java.nio.file.Paths;
32 import java.sql.Timestamp;
33 import java.util.HashMap;
34 import org.junit.Before;
35 import org.junit.Rule;
36 import org.junit.Test;
37 import org.junit.rules.ExpectedException;
38 import org.junit.runner.RunWith;
39 import org.mockito.InjectMocks;
40 import org.mockito.Mock;
41 import org.mockito.Spy;
42 import org.mockito.junit.MockitoJUnitRunner;
43 import org.onap.so.apihandlerinfra.exceptions.ApiException;
44 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
45 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
46 import org.onap.so.constants.Status;
47 import org.onap.so.db.catalog.beans.VfModule;
48 import org.onap.so.db.catalog.client.CatalogDbClient;
49 import org.onap.so.db.request.beans.InfraActiveRequests;
50 import org.onap.so.serviceinstancebeans.ModelInfo;
51 import org.onap.so.serviceinstancebeans.ModelType;
53 @RunWith(MockitoJUnitRunner.class)
54 public class RequestHandlerUtilsUnitTest {
57 private CatalogDbClient catDbClient;
61 private RequestHandlerUtils requestHandler;
64 public ExpectedException thrown = ExpectedException.none();
66 private static final String CURRENT_REQUEST_ID = "eca3a1b1-43ab-457e-ab1c-367263d148b4";
67 private static final String RESUMED_REQUEST_ID = "59c7247f-839f-4923-90c3-05faa3ab354d";
68 private static final String SERVICE_INSTANCE_ID = "00032ab7-na18-42e5-965d-8ea592502018";
69 private static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
70 private static final String VNF_ID = "00032ab7-na18-42e5-965d-8ea592502017";
71 private static final String VFMODULE_ID = "00032ab7-na18-42e5-965d-8ea592502016";
72 private static final String NETWORK_ID = "00032ab7-na18-42e5-965d-8ea592502015";
73 private static final String VOLUME_GROUP_ID = "00032ab7-na18-42e5-965d-8ea592502014";
74 private static final String VNF_NAME = "vnfName";
75 private static final String VFMODULE_NAME = "vfModuleName";
76 private static final String NETWORK_NAME = "networkName";
77 private static final String VOLUME_GROUP_NAME = "volumeGroupName";
78 private static final String MODEL_VERSION_ID = "883f4a7a-b5a5-44e0-8738-361c6413d24c";
79 private static final String MODEL_VERSION = "1.0";
80 private static final String MODEL_INVARIANT_ID = "d358b828-e7f8-4833-ac96-2782bed1a9a9";
81 private static final String MODEL_NAME = "modelName";
82 private final Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
83 private String requestUri =
84 "http:localhost:6746/onap/so/infra/orchestrationRequests/v7/00032ab7-na18-42e5-965d-8ea592502019/resume";
85 private InfraActiveRequests infraActiveRequest = new InfraActiveRequests();
86 private InfraActiveRequests currentActiveRequest = new InfraActiveRequests();
87 private InfraActiveRequests currentActiveRequestIARNull = new InfraActiveRequests();
88 private Action action = Action.createInstance;
89 private String vnfType = "vnfType";
90 private String sdcServiceModelVersion = "7";
92 public String getRequestBody(String request) throws IOException {
93 request = "src/test/resources/ResumeOrchestrationRequest" + request;
94 return new String(Files.readAllBytes(Paths.get(request)));
98 public void setup() throws IOException {
99 setInfraActiveRequest();
100 setCurrentActiveRequest();
101 setCurrentActiveRequestNullInfraActive();
104 private void setInfraActiveRequest() throws IOException {
105 infraActiveRequest.setTenantId("tenant-id");
106 infraActiveRequest.setRequestBody(getRequestBody("/RequestBody.json"));
107 infraActiveRequest.setCloudRegion("cloudRegion");
108 infraActiveRequest.setRequestScope("service");
109 infraActiveRequest.setServiceInstanceId(SERVICE_INSTANCE_ID);
110 infraActiveRequest.setServiceInstanceName(SERVICE_INSTANCE_NAME);
111 infraActiveRequest.setRequestStatus(Status.IN_PROGRESS.toString());
112 infraActiveRequest.setRequestAction(Action.createInstance.toString());
113 infraActiveRequest.setServiceType("serviceType");
116 private void setCurrentActiveRequest() throws IOException {
117 currentActiveRequest.setRequestId(CURRENT_REQUEST_ID);
118 currentActiveRequest.setSource("VID");
119 currentActiveRequest.setStartTime(startTimeStamp);
120 currentActiveRequest.setTenantId("tenant-id");
121 currentActiveRequest.setRequestBody(getRequestBody("/RequestBodyNewRequestorId.json"));
122 currentActiveRequest.setCloudRegion("cloudRegion");
123 currentActiveRequest.setRequestScope("service");
124 currentActiveRequest.setRequestStatus(Status.IN_PROGRESS.toString());
125 currentActiveRequest.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
126 currentActiveRequest.setRequestAction(Action.createInstance.toString());
127 currentActiveRequest.setRequestUrl(requestUri);
128 currentActiveRequest.setRequestorId("yyyyyy");
129 currentActiveRequest.setProgress(new Long(5));
130 currentActiveRequest.setOriginalRequestId(RESUMED_REQUEST_ID);
133 private void setCurrentActiveRequestNullInfraActive() throws IOException {
134 currentActiveRequestIARNull.setRequestId(CURRENT_REQUEST_ID);
135 currentActiveRequestIARNull.setSource("VID");
136 currentActiveRequestIARNull.setStartTime(startTimeStamp);
137 currentActiveRequestIARNull.setRequestStatus(Status.IN_PROGRESS.toString());
138 currentActiveRequestIARNull.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
139 currentActiveRequestIARNull.setRequestUrl(requestUri);
140 currentActiveRequestIARNull.setRequestorId("xxxxxx");
141 currentActiveRequestIARNull.setProgress(new Long(5));
142 currentActiveRequestIARNull.setOriginalRequestId(RESUMED_REQUEST_ID);
147 public void createNewRecordCopyFromInfraActiveRequestTest() throws IOException, ApiException {
148 doNothing().when(requestHandler).setInstanceIdAndName(infraActiveRequest, currentActiveRequest);
149 doReturn(getRequestBody("/RequestBodyNewRequestorId.json")).when(requestHandler)
150 .updateRequestorIdInRequestBody(infraActiveRequest, "yyyyyy");
151 InfraActiveRequests result = requestHandler.createNewRecordCopyFromInfraActiveRequest(infraActiveRequest,
152 CURRENT_REQUEST_ID, startTimeStamp, "VID", requestUri, "yyyyyy", RESUMED_REQUEST_ID);
153 assertThat(currentActiveRequest, sameBeanAs(result));
157 public void createNewRecordCopyFromInfraActiveRequestNullIARTest() throws ApiException {
158 InfraActiveRequests result = requestHandler.createNewRecordCopyFromInfraActiveRequest(null, CURRENT_REQUEST_ID,
159 startTimeStamp, "VID", requestUri, "xxxxxx", RESUMED_REQUEST_ID);
160 assertThat(currentActiveRequestIARNull, sameBeanAs(result));
164 public void setInstanceIdAndNameServiceTest() throws ApiException {
165 InfraActiveRequests serviceRequest = new InfraActiveRequests();
167 InfraActiveRequests expected = new InfraActiveRequests();
168 expected.setServiceInstanceId(SERVICE_INSTANCE_ID);
169 expected.setServiceInstanceName(SERVICE_INSTANCE_NAME);
171 requestHandler.setInstanceIdAndName(infraActiveRequest, serviceRequest);
172 assertThat(serviceRequest, sameBeanAs(expected));
176 public void setInstanceIdAndNameServiceNullInstanceNameTest() throws ApiException {
177 InfraActiveRequests serviceRequest = new InfraActiveRequests();
179 InfraActiveRequests request = new InfraActiveRequests();
180 request.setServiceInstanceId(SERVICE_INSTANCE_ID);
181 request.setRequestScope(ModelType.service.toString());
183 InfraActiveRequests expected = new InfraActiveRequests();
184 expected.setServiceInstanceId(SERVICE_INSTANCE_ID);
186 requestHandler.setInstanceIdAndName(request, serviceRequest);
187 assertThat(serviceRequest, sameBeanAs(expected));
191 public void setInstanceIdAndNameServiceNullInstanceNameVfModuleTest() throws ApiException {
192 InfraActiveRequests vfModuleRequest = new InfraActiveRequests();
193 String errorMessage =
194 "vfModule for requestId: 59c7247f-839f-4923-90c3-05faa3ab354d being resumed does not have an instanceName.";
195 doNothing().when(requestHandler).updateStatus(vfModuleRequest, Status.FAILED, errorMessage);
197 InfraActiveRequests request = new InfraActiveRequests();
198 request.setServiceInstanceId(VFMODULE_ID);
199 request.setRequestScope(ModelType.vfModule.toString());
200 request.setRequestId(RESUMED_REQUEST_ID);
202 thrown.expect(ValidateException.class);
203 thrown.expectMessage(errorMessage);
205 requestHandler.setInstanceIdAndName(request, vfModuleRequest);
209 public void setInstanceIdAndNameRequestScopeNotValidTest() throws ApiException {
210 InfraActiveRequests originalServiceRequest = new InfraActiveRequests();
211 originalServiceRequest.setRequestScope("test");
212 InfraActiveRequests serviceRequest = new InfraActiveRequests();
214 InfraActiveRequests expected = new InfraActiveRequests();
216 requestHandler.setInstanceIdAndName(originalServiceRequest, serviceRequest);
217 assertThat(serviceRequest, sameBeanAs(expected));
221 public void setInstanceIdAndNameVnfTest() throws ApiException {
222 InfraActiveRequests vnfRequestOriginal = new InfraActiveRequests();
223 vnfRequestOriginal.setRequestScope("vnf");
224 vnfRequestOriginal.setVnfId(VNF_ID);
225 vnfRequestOriginal.setVnfName(VNF_NAME);
226 InfraActiveRequests vnfRequest = new InfraActiveRequests();
228 InfraActiveRequests expected = new InfraActiveRequests();
229 expected.setVnfId(VNF_ID);
230 expected.setVnfName(VNF_NAME);
232 requestHandler.setInstanceIdAndName(vnfRequestOriginal, vnfRequest);
233 assertThat(vnfRequest, sameBeanAs(expected));
237 public void setInstanceIdAndNameVfModuleTest() throws ApiException {
238 InfraActiveRequests vfModuleRequestOriginal = new InfraActiveRequests();
239 vfModuleRequestOriginal.setRequestScope("vfModule");
240 vfModuleRequestOriginal.setVfModuleId(VFMODULE_ID);
241 vfModuleRequestOriginal.setVfModuleName(VFMODULE_NAME);
242 InfraActiveRequests vfModuleRequest = new InfraActiveRequests();
244 InfraActiveRequests expected = new InfraActiveRequests();
245 expected.setVfModuleId(VFMODULE_ID);
246 expected.setVfModuleName(VFMODULE_NAME);
248 requestHandler.setInstanceIdAndName(vfModuleRequestOriginal, vfModuleRequest);
249 assertThat(vfModuleRequest, sameBeanAs(expected));
253 public void setInstanceIdAndNameNetworkTest() throws ApiException {
254 InfraActiveRequests networkRequestOriginal = new InfraActiveRequests();
255 networkRequestOriginal.setRequestScope("network");
256 networkRequestOriginal.setNetworkId(NETWORK_ID);
257 networkRequestOriginal.setNetworkName(NETWORK_NAME);
258 InfraActiveRequests networkRequest = new InfraActiveRequests();
260 InfraActiveRequests expected = new InfraActiveRequests();
261 expected.setNetworkId(NETWORK_ID);
262 expected.setNetworkName(NETWORK_NAME);
264 requestHandler.setInstanceIdAndName(networkRequestOriginal, networkRequest);
265 assertThat(networkRequest, sameBeanAs(expected));
269 public void setInstanceIdAndNameVolumeGroupTest() throws ApiException {
270 InfraActiveRequests volumeGroupRequestOriginal = new InfraActiveRequests();
271 volumeGroupRequestOriginal.setRequestScope("volumeGroup");
272 volumeGroupRequestOriginal.setVolumeGroupId(VOLUME_GROUP_ID);
273 volumeGroupRequestOriginal.setVolumeGroupName(VOLUME_GROUP_NAME);
274 InfraActiveRequests volumeGroupRequest = new InfraActiveRequests();
276 InfraActiveRequests expected = new InfraActiveRequests();
277 expected.setVolumeGroupId(VOLUME_GROUP_ID);
278 expected.setVolumeGroupName(VOLUME_GROUP_NAME);
280 requestHandler.setInstanceIdAndName(volumeGroupRequestOriginal, volumeGroupRequest);
281 assertThat(volumeGroupRequest, sameBeanAs(expected));
285 public void getIsBaseVfModuleTrueTest() throws ApiException {
286 VfModule vfModule = new VfModule();
287 vfModule.setIsBase(true);
288 ModelInfo modelInfo = new ModelInfo();
289 modelInfo.setModelVersionId(MODEL_VERSION_ID);
291 doReturn(vfModule).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
292 Boolean expected = true;
294 Boolean result = requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
295 currentActiveRequest);
296 assertEquals(result, expected);
300 public void getIsBaseVfModuleFalseTest() throws ApiException {
301 VfModule vfModule = new VfModule();
302 vfModule.setIsBase(false);
303 ModelInfo modelInfo = new ModelInfo();
304 modelInfo.setModelVersionId(MODEL_VERSION_ID);
306 doReturn(vfModule).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
307 Boolean expected = false;
309 Boolean result = requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
310 currentActiveRequest);
311 assertEquals(result, expected);
315 public void getIsBaseVfModuleNullTest() throws ApiException {
316 ModelInfo modelInfo = new ModelInfo();
317 modelInfo.setModelVersionId(MODEL_VERSION_ID);
318 modelInfo.setModelName(MODEL_NAME);
319 String errorMessage =
320 "VnfType vnfType and VF Module Model Name modelName with version 7 not found in MSO Catalog DB";
322 doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
323 doReturn(null).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
325 thrown.expect(VfModuleNotFoundException.class);
326 thrown.expectMessage(errorMessage);
327 requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion, currentActiveRequest);
331 public void getIsBaseVfModuleModelVersionIdNullTest() throws ApiException {
332 ModelInfo modelInfo = new ModelInfo();
333 modelInfo.setModelInvariantId(MODEL_INVARIANT_ID);
334 modelInfo.setModelVersion(MODEL_VERSION);
335 modelInfo.setModelName(MODEL_NAME);
336 Boolean expected = false;
338 doReturn(null).when(catDbClient).getVfModuleByModelInvariantUUIDAndModelVersion(MODEL_INVARIANT_ID,
341 Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
342 sdcServiceModelVersion, currentActiveRequest);
343 assertEquals(result, expected);
347 public void getIsBaseVfModuleModelInfoNotSetTest() throws ApiException {
348 ModelInfo modelInfo = new ModelInfo();
349 Boolean expected = false;
351 Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
352 sdcServiceModelVersion, currentActiveRequest);
353 assertEquals(result, expected);
357 public void getIsBaseVfModuleModelVersionNullTest() throws ApiException {
358 ModelInfo modelInfo = new ModelInfo();
359 modelInfo.setModelInvariantId(MODEL_INVARIANT_ID);
360 modelInfo.setModelName(MODEL_NAME);
361 Boolean expected = false;
363 Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
364 sdcServiceModelVersion, currentActiveRequest);
365 assertEquals(result, expected);
369 public void getIsBaseVfModuleModelVersionNullUpdateTest() throws ApiException {
370 ModelInfo modelInfo = new ModelInfo();
371 modelInfo.setModelInvariantId(MODEL_INVARIANT_ID);
372 modelInfo.setModelName(MODEL_NAME);
373 String errorMessage = "VnfType vnfType and VF Module Model Name modelName not found in MSO Catalog DB";
375 doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
377 thrown.expect(VfModuleNotFoundException.class);
378 thrown.expectMessage(errorMessage);
379 requestHandler.getIsBaseVfModule(modelInfo, Action.updateInstance, vnfType, null, currentActiveRequest);
383 public void getIsBaseVfModulesdcModelVersionEmptyTest() throws ApiException {
384 ModelInfo modelInfo = new ModelInfo();
385 modelInfo.setModelInvariantId(MODEL_INVARIANT_ID);
386 modelInfo.setModelName(MODEL_NAME);
387 String errorMessage = "VnfType vnfType and VF Module Model Name modelName not found in MSO Catalog DB";
389 doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
391 thrown.expect(VfModuleNotFoundException.class);
392 thrown.expectMessage(errorMessage);
393 requestHandler.getIsBaseVfModule(modelInfo, Action.updateInstance, vnfType, "", currentActiveRequest);
397 public void getModelTypeApplyUpdatedConfigTest() throws ApiException {
398 ModelType modelTypeExpected = ModelType.vnf;
400 ModelType modelTypeResult = requestHandler.getModelType(Action.applyUpdatedConfig, null);
401 assertEquals(modelTypeResult, modelTypeExpected);
405 public void getModelTypeInPlaceSoftwareUpdateTest() throws ApiException {
406 ModelType modelTypeExpected = ModelType.vnf;
408 ModelType modelTypeResult = requestHandler.getModelType(Action.inPlaceSoftwareUpdate, null);
409 assertEquals(modelTypeResult, modelTypeExpected);
413 public void getModelTypeAddMembersTest() throws ApiException {
414 ModelType modelTypeExpected = ModelType.instanceGroup;
416 ModelType modelTypeResult = requestHandler.getModelType(Action.addMembers, null);
417 assertEquals(modelTypeResult, modelTypeExpected);
421 public void getModelTypeRemoveMembersTest() throws ApiException {
422 ModelType modelTypeExpected = ModelType.instanceGroup;
424 ModelType modelTypeResult = requestHandler.getModelType(Action.removeMembers, null);
425 assertEquals(modelTypeResult, modelTypeExpected);
429 public void getModelTypeTest() throws ApiException {
430 ModelType modelTypeExpected = ModelType.service;
431 ModelInfo modelInfo = new ModelInfo();
432 modelInfo.setModelType(ModelType.service);
434 ModelType modelTypeResult = requestHandler.getModelType(Action.createInstance, modelInfo);
435 assertEquals(modelTypeResult, modelTypeExpected);
439 public void updateRequestorIdInRequestBodyTest() throws IOException {
440 String newRequestorId = "yyyyyy";
441 String expected = getRequestBody("/RequestBodyNewRequestorId.json");
442 String result = requestHandler.updateRequestorIdInRequestBody(infraActiveRequest, newRequestorId);
443 assertEquals(expected, result);
447 public void checkForDuplicateRequestsTest() throws ApiException {
448 InfraActiveRequests currentActiveReq = new InfraActiveRequests();
449 currentActiveReq.setCloudRegion("testRegion");
450 currentActiveReq.setRequestId("792a3158-d9a3-49fd-b3ac-ab09842d6a1a");
451 Action action = Action.createInstance;
452 String requestScope = ModelType.service.toString();
454 InfraActiveRequests duplicate = new InfraActiveRequests();
456 HashMap<String, String> instanceIdMap = new HashMap<String, String>();
457 String instanceName = "instanceName";
459 doReturn(duplicate).when(requestHandler).duplicateCheck(action, instanceIdMap, instanceName, requestScope,
461 doReturn(true).when(requestHandler).camundaHistoryCheck(duplicate, currentActiveReq);
462 doNothing().when(requestHandler).buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap,
463 instanceName, requestScope, duplicate);
465 requestHandler.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, instanceName);
466 verify(requestHandler).buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
467 requestScope, duplicate);