d0b16cffe6c3a5349099dc8790234b63f84719a4
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
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.so.apihandlerinfra;
22
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;
52
53 @RunWith(MockitoJUnitRunner.class)
54 public class RequestHandlerUtilsUnitTest {
55
56     @Mock
57     private CatalogDbClient catDbClient;
58
59     @InjectMocks
60     @Spy
61     private RequestHandlerUtils requestHandler;
62
63     @Rule
64     public ExpectedException thrown = ExpectedException.none();
65
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";
91
92     public String getRequestBody(String request) throws IOException {
93         request = "src/test/resources/ResumeOrchestrationRequest" + request;
94         return new String(Files.readAllBytes(Paths.get(request)));
95     }
96
97     @Before
98     public void setup() throws IOException {
99         setInfraActiveRequest();
100         setCurrentActiveRequest();
101         setCurrentActiveRequestNullInfraActive();
102     }
103
104     private void setInfraActiveRequest() throws IOException {
105         infraActiveRequest.setTenantId("tenant-id");
106         infraActiveRequest.setRequestBody(getRequestBody("/RequestBody.json"));
107         infraActiveRequest.setAicCloudRegion("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");
114     }
115
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.setAicCloudRegion("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);
131     }
132
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);
143     }
144
145
146     @Test
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));
154     }
155
156     @Test
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));
161     }
162
163     @Test
164     public void setInstanceIdAndNameServiceTest() throws ApiException {
165         InfraActiveRequests serviceRequest = new InfraActiveRequests();
166
167         InfraActiveRequests expected = new InfraActiveRequests();
168         expected.setServiceInstanceId(SERVICE_INSTANCE_ID);
169         expected.setServiceInstanceName(SERVICE_INSTANCE_NAME);
170
171         requestHandler.setInstanceIdAndName(infraActiveRequest, serviceRequest);
172         assertThat(serviceRequest, sameBeanAs(expected));
173     }
174
175     @Test
176     public void setInstanceIdAndNameServiceNullInstanceNameTest() throws ApiException {
177         InfraActiveRequests serviceRequest = new InfraActiveRequests();
178
179         InfraActiveRequests request = new InfraActiveRequests();
180         request.setServiceInstanceId(SERVICE_INSTANCE_ID);
181         request.setRequestScope(ModelType.service.toString());
182
183         InfraActiveRequests expected = new InfraActiveRequests();
184         expected.setServiceInstanceId(SERVICE_INSTANCE_ID);
185
186         requestHandler.setInstanceIdAndName(request, serviceRequest);
187         assertThat(serviceRequest, sameBeanAs(expected));
188     }
189
190     @Test
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);
196
197         InfraActiveRequests request = new InfraActiveRequests();
198         request.setServiceInstanceId(VFMODULE_ID);
199         request.setRequestScope(ModelType.vfModule.toString());
200         request.setRequestId(RESUMED_REQUEST_ID);
201
202         thrown.expect(ValidateException.class);
203         thrown.expectMessage(errorMessage);
204
205         requestHandler.setInstanceIdAndName(request, vfModuleRequest);
206     }
207
208     @Test
209     public void setInstanceIdAndNameRequestScopeNotValidTest() throws ApiException {
210         InfraActiveRequests originalServiceRequest = new InfraActiveRequests();
211         originalServiceRequest.setRequestScope("test");
212         InfraActiveRequests serviceRequest = new InfraActiveRequests();
213
214         InfraActiveRequests expected = new InfraActiveRequests();
215
216         requestHandler.setInstanceIdAndName(originalServiceRequest, serviceRequest);
217         assertThat(serviceRequest, sameBeanAs(expected));
218     }
219
220     @Test
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();
227
228         InfraActiveRequests expected = new InfraActiveRequests();
229         expected.setVnfId(VNF_ID);
230         expected.setVnfName(VNF_NAME);
231
232         requestHandler.setInstanceIdAndName(vnfRequestOriginal, vnfRequest);
233         assertThat(vnfRequest, sameBeanAs(expected));
234     }
235
236     @Test
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();
243
244         InfraActiveRequests expected = new InfraActiveRequests();
245         expected.setVfModuleId(VFMODULE_ID);
246         expected.setVfModuleName(VFMODULE_NAME);
247
248         requestHandler.setInstanceIdAndName(vfModuleRequestOriginal, vfModuleRequest);
249         assertThat(vfModuleRequest, sameBeanAs(expected));
250     }
251
252     @Test
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();
259
260         InfraActiveRequests expected = new InfraActiveRequests();
261         expected.setNetworkId(NETWORK_ID);
262         expected.setNetworkName(NETWORK_NAME);
263
264         requestHandler.setInstanceIdAndName(networkRequestOriginal, networkRequest);
265         assertThat(networkRequest, sameBeanAs(expected));
266     }
267
268     @Test
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();
275
276         InfraActiveRequests expected = new InfraActiveRequests();
277         expected.setVolumeGroupId(VOLUME_GROUP_ID);
278         expected.setVolumeGroupName(VOLUME_GROUP_NAME);
279
280         requestHandler.setInstanceIdAndName(volumeGroupRequestOriginal, volumeGroupRequest);
281         assertThat(volumeGroupRequest, sameBeanAs(expected));
282     }
283
284     @Test
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);
290
291         doReturn(vfModule).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
292         Boolean expected = true;
293
294         Boolean result = requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
295                 currentActiveRequest);
296         assertEquals(result, expected);
297     }
298
299     @Test
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);
305
306         doReturn(vfModule).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
307         Boolean expected = false;
308
309         Boolean result = requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
310                 currentActiveRequest);
311         assertEquals(result, expected);
312     }
313
314     @Test
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";
321
322         doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
323         doReturn(null).when(catDbClient).getVfModuleByModelUUID(MODEL_VERSION_ID);
324
325         thrown.expect(VfModuleNotFoundException.class);
326         thrown.expectMessage(errorMessage);
327         requestHandler.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion, currentActiveRequest);
328     }
329
330     @Test
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;
337
338         doReturn(null).when(catDbClient).getVfModuleByModelInvariantUUIDAndModelVersion(MODEL_INVARIANT_ID,
339                 MODEL_VERSION);
340
341         Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
342                 sdcServiceModelVersion, currentActiveRequest);
343         assertEquals(result, expected);
344     }
345
346     @Test
347     public void getIsBaseVfModuleModelInfoNotSetTest() throws ApiException {
348         ModelInfo modelInfo = new ModelInfo();
349         Boolean expected = false;
350
351         Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
352                 sdcServiceModelVersion, currentActiveRequest);
353         assertEquals(result, expected);
354     }
355
356     @Test
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;
362
363         Boolean result = requestHandler.getIsBaseVfModule(modelInfo, Action.deleteInstance, vnfType,
364                 sdcServiceModelVersion, currentActiveRequest);
365         assertEquals(result, expected);
366     }
367
368     @Test
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";
374
375         doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
376
377         thrown.expect(VfModuleNotFoundException.class);
378         thrown.expectMessage(errorMessage);
379         requestHandler.getIsBaseVfModule(modelInfo, Action.updateInstance, vnfType, null, currentActiveRequest);
380     }
381
382     @Test
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";
388
389         doNothing().when(requestHandler).updateStatus(currentActiveRequest, Status.FAILED, errorMessage);
390
391         thrown.expect(VfModuleNotFoundException.class);
392         thrown.expectMessage(errorMessage);
393         requestHandler.getIsBaseVfModule(modelInfo, Action.updateInstance, vnfType, "", currentActiveRequest);
394     }
395
396     @Test
397     public void getModelTypeApplyUpdatedConfigTest() throws ApiException {
398         ModelType modelTypeExpected = ModelType.vnf;
399
400         ModelType modelTypeResult = requestHandler.getModelType(Action.applyUpdatedConfig, null);
401         assertEquals(modelTypeResult, modelTypeExpected);
402     }
403
404     @Test
405     public void getModelTypeInPlaceSoftwareUpdateTest() throws ApiException {
406         ModelType modelTypeExpected = ModelType.vnf;
407
408         ModelType modelTypeResult = requestHandler.getModelType(Action.inPlaceSoftwareUpdate, null);
409         assertEquals(modelTypeResult, modelTypeExpected);
410     }
411
412     @Test
413     public void getModelTypeAddMembersTest() throws ApiException {
414         ModelType modelTypeExpected = ModelType.instanceGroup;
415
416         ModelType modelTypeResult = requestHandler.getModelType(Action.addMembers, null);
417         assertEquals(modelTypeResult, modelTypeExpected);
418     }
419
420     @Test
421     public void getModelTypeRemoveMembersTest() throws ApiException {
422         ModelType modelTypeExpected = ModelType.instanceGroup;
423
424         ModelType modelTypeResult = requestHandler.getModelType(Action.removeMembers, null);
425         assertEquals(modelTypeResult, modelTypeExpected);
426     }
427
428     @Test
429     public void getModelTypeTest() throws ApiException {
430         ModelType modelTypeExpected = ModelType.service;
431         ModelInfo modelInfo = new ModelInfo();
432         modelInfo.setModelType(ModelType.service);
433
434         ModelType modelTypeResult = requestHandler.getModelType(Action.createInstance, modelInfo);
435         assertEquals(modelTypeResult, modelTypeExpected);
436     }
437
438     @Test
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);
444     }
445
446     @Test
447     public void checkForDuplicateRequestsTest() throws ApiException {
448         InfraActiveRequests currentActiveReq = new InfraActiveRequests();
449         currentActiveReq.setAicCloudRegion("testRegion");
450         currentActiveReq.setRequestId("792a3158-d9a3-49fd-b3ac-ab09842d6a1a");
451         Action action = Action.createInstance;
452         String requestScope = ModelType.service.toString();
453
454         InfraActiveRequests duplicate = new InfraActiveRequests();
455
456         HashMap<String, String> instanceIdMap = new HashMap<String, String>();
457         String instanceName = "instanceName";
458
459         doReturn(duplicate).when(requestHandler).duplicateCheck(action, instanceIdMap, instanceName, requestScope,
460                 currentActiveReq);
461         doReturn(true).when(requestHandler).camundaHistoryCheck(duplicate, currentActiveReq);
462         doNothing().when(requestHandler).buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap,
463                 instanceName, requestScope, duplicate);
464
465         requestHandler.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, instanceName);
466         verify(requestHandler).buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
467                 requestScope, duplicate);
468     }
469
470 }