2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2019 Nokia. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.vid.mso;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
26 import static org.assertj.core.api.Assertions.tuple;
27 import static org.hamcrest.Matchers.allOf;
28 import static org.hamcrest.Matchers.containsString;
29 import static org.hamcrest.Matchers.equalTo;
30 import static org.hamcrest.Matchers.hasEntry;
31 import static org.hamcrest.Matchers.instanceOf;
32 import static org.hamcrest.Matchers.is;
33 import static org.hamcrest.Matchers.startsWith;
34 import static org.junit.Assert.assertEquals;
35 import static org.mockito.ArgumentMatchers.any;
36 import static org.mockito.ArgumentMatchers.anyBoolean;
37 import static org.mockito.ArgumentMatchers.anyString;
38 import static org.mockito.ArgumentMatchers.argThat;
39 import static org.mockito.ArgumentMatchers.endsWith;
40 import static org.mockito.ArgumentMatchers.eq;
41 import static org.mockito.ArgumentMatchers.isA;
42 import static org.mockito.BDDMockito.given;
43 import static org.mockito.Mockito.doThrow;
44 import static org.mockito.Mockito.mock;
45 import static org.mockito.Mockito.when;
46 import static org.onap.vid.controller.MsoController.CONFIGURATION_ID;
47 import static org.onap.vid.controller.MsoController.REQUEST_TYPE;
48 import static org.onap.vid.controller.MsoController.SVC_INSTANCE_ID;
49 import static org.onap.vid.controller.MsoController.VNF_INSTANCE_ID;
50 import static org.onap.vid.model.probes.ExternalComponentStatus.Component.MSO;
51 import static org.onap.vid.mso.MsoBusinessLogicImpl.validateEndpointPath;
53 import com.fasterxml.jackson.core.type.TypeReference;
54 import com.fasterxml.jackson.databind.ObjectMapper;
55 import io.joshworks.restclient.http.HttpResponse;
56 import java.io.IOException;
58 import java.nio.charset.StandardCharsets;
59 import java.nio.file.Path;
60 import java.nio.file.Paths;
61 import java.util.ArrayList;
62 import java.util.HashMap;
63 import java.util.List;
65 import java.util.UUID;
66 import java.util.stream.Collectors;
67 import javax.ws.rs.BadRequestException;
68 import org.apache.commons.io.IOUtils;
69 import org.apache.http.HttpException;
70 import org.hamcrest.Matcher;
71 import org.hamcrest.MatcherAssert;
72 import org.jetbrains.annotations.NotNull;
73 import org.mockito.ArgumentMatcher;
74 import org.mockito.Mock;
75 import org.mockito.MockitoAnnotations;
76 import org.mockito.hamcrest.MockitoHamcrest;
77 import org.onap.portalsdk.core.util.SystemProperties;
78 import org.onap.vid.aai.ExceptionWithRequestInfo;
79 import org.onap.vid.aai.HttpResponseWithRequestInfo;
80 import org.onap.vid.changeManagement.ChangeManagementRequest;
81 import org.onap.vid.changeManagement.WorkflowRequestDetail;
82 import org.onap.vid.controller.OperationalEnvironmentController;
83 import org.onap.vid.exceptions.GenericUncheckedException;
84 import org.onap.vid.model.SOWorkflowList;
85 import org.onap.vid.model.SoftDeleteRequest;
86 import org.onap.vid.model.probes.ErrorMetadata;
87 import org.onap.vid.model.probes.ExternalComponentStatus;
88 import org.onap.vid.model.probes.HttpRequestMetadata;
89 import org.onap.vid.mso.model.CloudConfiguration;
90 import org.onap.vid.mso.model.ModelInfo;
91 import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
92 import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
93 import org.onap.vid.mso.model.RequestInfo;
94 import org.onap.vid.mso.model.RequestParameters;
95 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
96 import org.onap.vid.mso.rest.Request;
97 import org.onap.vid.mso.rest.RequestDetails;
98 import org.onap.vid.mso.rest.RequestDetailsWrapper;
99 import org.onap.vid.mso.rest.Task;
100 import org.springframework.http.HttpMethod;
101 import org.springframework.http.HttpStatus;
102 import org.springframework.test.context.ContextConfiguration;
103 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
104 import org.testng.annotations.BeforeClass;
105 import org.testng.annotations.DataProvider;
106 import org.testng.annotations.Test;
108 @ContextConfiguration(classes = {SystemProperties.class})
109 public class MsoBusinessLogicImplTest extends AbstractTestNGSpringContextTests {
111 private static final ObjectMapper objectMapper = new ObjectMapper();
114 private MsoInterface msoInterface;
117 private SOWorkflowList workflowList;
120 private HttpResponse<SOWorkflowList> workflowListResponse;
123 private RequestDetails msoRequest;
126 private MsoBusinessLogicImpl msoBusinessLogic;
127 private String userId = "testUserId";
128 private String operationalEnvironmentId = "testOperationalEnvironmentId";
131 public void setUp() {
132 MockitoAnnotations.initMocks(this);
133 msoBusinessLogic = new MsoBusinessLogicImpl(msoInterface);
137 public void shouldProperlyCreateConfigurationInstanceWithCorrectServiceInstanceId() throws Exception {
139 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
140 String endpointTemplate = String.format("/serviceInstances/v6/%s/configurations", serviceInstanceId);
141 RequestDetailsWrapper requestDetailsWrapper = createRequestDetails();
142 MsoResponseWrapper expectedResponse = createOkResponse();
143 given(msoInterface.createConfigurationInstance(requestDetailsWrapper, endpointTemplate))
144 .willReturn(expectedResponse);
147 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
148 .createConfigurationInstance(requestDetailsWrapper, serviceInstanceId);
151 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
154 private RequestDetailsWrapper createRequestDetails() throws Exception {
155 final URL resource = this.getClass().getResource("/payload_jsons/mso_request_create_configuration.json");
156 RequestDetails requestDetails = objectMapper.readValue(resource, RequestDetails.class);
157 return new RequestDetailsWrapper(requestDetails);
161 public void shouldProperlyValidateEndpointPathWheEendPointIsNotEmptyAndValid() {
162 System.setProperty("TestEnv", "123");
163 String foundEndPoint = validateEndpointPath("TestEnv");
164 assertEquals("123", foundEndPoint);
168 public void shouldThrowRuntimeExceptionWhenValidateEndpointPathEndPointIsNotEmptyAndValid() {
169 assertThatExceptionOfType(RuntimeException.class)
170 .isThrownBy(() -> validateEndpointPath("NotExists"));
174 public void shouldThrowRuntimeExceptionWhenValidateEndpointPathWhenEndPointIsNotEmptyButDoesntExists() {
175 String endPoint = "EmptyEndPoint";
176 System.setProperty(endPoint, "");
177 assertThatExceptionOfType(GenericUncheckedException.class)
178 .isThrownBy(() -> validateEndpointPath(endPoint))
179 .withMessage(endPoint + " env variable is not defined");
183 public void shouldProperlyCreateSvcInstanceWithProperParameters() {
185 MsoResponseWrapper expectedResponse = createOkResponse();
186 String svcEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
187 given(msoInterface.createSvcInstance(msoRequest, svcEndpoint)).willReturn(expectedResponse);
189 MsoResponseWrapper response = msoBusinessLogic.createSvcInstance(msoRequest);
192 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
196 public void shouldProperlyCreateE2eSvcInstanceWithProperParameters() {
198 MsoResponseWrapper expectedResponse = createOkResponse();
199 String svcEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
200 given(msoInterface.createE2eSvcInstance(msoRequest, svcEndpoint)).willReturn(expectedResponse);
203 MsoResponseWrapper response = msoBusinessLogic.createE2eSvcInstance(msoRequest);
206 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
210 public void shouldProperlyCreateVnfWithProperParameters() {
212 MsoResponseWrapper expectedResponse = createOkResponse();
213 String endpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VNF_INSTANCE);
214 String vnfInstanceId = "testVnfInstanceTempId";
215 String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, vnfInstanceId);
217 given(msoInterface.createVnf(msoRequest, vnfEndpoint)).willReturn(expectedResponse);
219 MsoResponseWrapper response = msoBusinessLogic.createVnf(msoRequest, vnfInstanceId);
222 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
226 public void shouldProperlyCreateNwInstanceWithProperParameters() {
228 MsoResponseWrapper expectedResponse = createOkResponse();
229 String vnfInstanceId = "testNwInstanceTempId";
230 String nwEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
231 String nw_endpoint = nwEndpoint.replaceFirst(SVC_INSTANCE_ID, vnfInstanceId);
233 given(msoInterface.createNwInstance(msoRequest, nw_endpoint)).willReturn(expectedResponse);
235 MsoResponseWrapper response = msoBusinessLogic.createNwInstance(msoRequest, vnfInstanceId);
238 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
242 public void shouldProperlyCreateVolumeGroupInstanceWithProperParameters() {
243 MsoResponseWrapper expectedResponse = createOkResponse();
244 String serviceInstanceId = "testServiceInstanceTempId";
245 String vnfInstanceId = "testVnfInstanceTempId";
246 String nwEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
247 String vnfEndpoint = nwEndpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
248 vnfEndpoint = vnfEndpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
250 given(msoInterface.createVolumeGroupInstance(msoRequest, vnfEndpoint)).willReturn(expectedResponse);
252 MsoResponseWrapper response = msoBusinessLogic.createVolumeGroupInstance(msoRequest, serviceInstanceId, vnfInstanceId);
255 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
259 public void shouldProperlyCreateVfModuleInstanceWithProperParameters() {
260 MsoResponseWrapper expectedResponse = createOkResponse();
261 String serviceInstanceId = "testServiceInstanceTempId";
262 String vnfInstanceId = "testVnfInstanceTempId";
263 String partial_endpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
264 String vf_module_endpoint = partial_endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
265 vf_module_endpoint = vf_module_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
267 given(msoInterface.createVfModuleInstance(msoRequest, vf_module_endpoint)).willReturn(expectedResponse);
269 MsoResponseWrapper response = msoBusinessLogic.createVfModuleInstance(msoRequest, serviceInstanceId, vnfInstanceId);
272 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
276 public void shouldProperlyDeleteE2eSvcInstanceWithProperParameters() {
277 MsoResponseWrapper expectedResponse = createOkResponse();
278 String serviceInstanceId = "testDeleteE2eSvcInstanceTempId";
279 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
281 given(msoInterface.deleteE2eSvcInstance(msoRequest, endpoint)).willReturn(expectedResponse);
283 MsoResponseWrapper response = msoBusinessLogic.deleteE2eSvcInstance(msoRequest, serviceInstanceId);
286 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
290 public Object[][] deleteSvcInstanceShouldDelete() {
291 return new Object[][]{{"Active"}, {"unexpected-status"}};
295 public Object[][] deleteSvcInstanceShouldUnassign() {
296 return new Object[][]{{"Created"}, {"Pendingdelete"}, {"pending-Delete"}, {"Assigned"}};
300 @Test(dataProvider = "deleteSvcInstanceShouldDelete")
301 public void shouldProperlyDeleteSvcInstanceWithProperParametersShouldDelete(String status) {
303 String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s";
304 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
305 String svcEndpoint = String.format(endpointTemplate, serviceInstanceId);
306 RequestDetails requestDetails = new RequestDetails();
307 MsoResponseWrapper expectedResponse = createOkResponse();
308 given(msoInterface.deleteSvcInstance(requestDetails, svcEndpoint)).willReturn(expectedResponse);
311 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
312 .deleteSvcInstance(requestDetails, serviceInstanceId, status);
315 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
318 @Test(dataProvider = "deleteSvcInstanceShouldUnassign")
319 public void shouldProperlyDeleteSvcInstanceWithProperParametersShouldUnassign(String status) {
321 String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s/unassign";
322 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
323 String svcEndpoint = String.format(endpointTemplate, serviceInstanceId);
324 RequestDetails requestDetails = new RequestDetails();
325 MsoResponseWrapper expectedResponse = createOkResponse();
326 given(msoInterface.unassignSvcInstance(requestDetails, svcEndpoint)).willReturn(expectedResponse);
329 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
330 .deleteSvcInstance(requestDetails, serviceInstanceId, status);
333 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
337 public void shouldProperlyDeleteVnfWithProperParameters() {
339 String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s/vnfs/%s";
340 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
341 String vnfInstanceId = "testVnfInstanceTempId";
342 String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId);
343 RequestDetails requestDetails = new RequestDetails();
344 MsoResponseWrapper expectedResponse = createOkResponse();
345 given(msoInterface.deleteVnf(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
348 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
349 .deleteVnf(requestDetails, serviceInstanceId, vnfInstanceId);
352 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
356 public void shouldProperlyDeleteVfModuleWithProperParameters() {
358 String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s/vnfs/%s/vfModules/%s";
359 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
360 String vnfInstanceId = "testVnfInstanceTempId";
361 String vfModuleId = "testVfModuleId";
362 String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId, vfModuleId);
363 RequestDetails requestDetails = new RequestDetails();
364 MsoResponseWrapper expectedResponse = createOkResponse();
365 given(msoInterface.deleteVfModule(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
368 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
369 .deleteVfModule(requestDetails, serviceInstanceId, vnfInstanceId, vfModuleId);
371 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedResponse);
375 public void shouldProperlyDeleteVolumeGroupInstanceWithProperParameters() {
376 MsoResponseWrapper expectedResponse = createOkResponse();
377 String serviceInstanceId = "testServiceInstanceTempId";
378 String vnfInstanceId = "testVnfInstanceTempId";
379 String volumeGroupId = "testvolumeGroupIdTempId";
381 String deleteVolumeGroupEndpoint = getDeleteVolumeGroupEndpoint(serviceInstanceId, vnfInstanceId, volumeGroupId);
383 given(msoInterface.deleteVolumeGroupInstance(msoRequest, deleteVolumeGroupEndpoint)).willReturn(expectedResponse);
385 MsoResponseWrapper response = msoBusinessLogic.deleteVolumeGroupInstance(msoRequest, serviceInstanceId, vnfInstanceId, volumeGroupId);
388 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
392 private String getDeleteVolumeGroupEndpoint(String serviceInstanceId, String vnfInstanceId, String volumeGroupId) {
393 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
394 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
395 String vnfEndpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
396 return vnfEndpoint + "/" + volumeGroupId;
400 public void shouldProperlyDeleteNwInstanceWithProperParameters() {
401 MsoResponseWrapper expectedResponse = createOkResponse();
402 String serviceInstanceId = "testServiceInstanceTempId";
403 String networkInstanceId = "testNetworkInstanceTempId";
405 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
406 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
407 String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
409 given(msoInterface.deleteNwInstance(msoRequest, delete_nw_endpoint)).willReturn(expectedResponse);
411 MsoResponseWrapper response = msoBusinessLogic.deleteNwInstance(msoRequest, serviceInstanceId, networkInstanceId);
414 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
418 public void shouldProperlyGetOrchestrationRequestWithProperParameters() {
419 MsoResponseWrapper expectedResponse = createOkResponse();
420 String requestId = "testRequestTempId";
421 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
422 String path = p + "/" + requestId;
424 given(msoInterface.getOrchestrationRequest(path)).willReturn(expectedResponse);
426 MsoResponseWrapper response = msoBusinessLogic.getOrchestrationRequest(requestId);
427 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
430 @Test(expectedExceptions = MsoTestException.class)
431 public void shouldProperlyGetOrchestrationRequestWithWrongParameters() {
432 String requestId = "testWrongRequestTempId";
433 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
434 String path = p + "/" + requestId;
436 given(msoInterface.getOrchestrationRequest(path)).willThrow(new MsoTestException("testException"));
438 msoBusinessLogic.getOrchestrationRequest(requestId);
442 public void shouldProperlyGetOrchestrationRequestsWithProperParameters() {
443 MsoResponseWrapper expectedResponse = createOkResponse();
444 String filterString = "testRequestsTempId";
445 String url = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
446 String path = url + filterString;
448 given(msoInterface.getOrchestrationRequest(path)).willReturn(expectedResponse);
450 MsoResponseWrapper response = msoBusinessLogic.getOrchestrationRequests(filterString);
451 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
454 @Test(expectedExceptions = MsoTestException.class)
455 public void shouldThrowExceptionWhenGetOrchestrationRequestsWithWrongParameters() {
456 String filterString = "testRequestsTempId";
457 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
458 String path = p + filterString;
460 given(msoInterface.getOrchestrationRequest(path)).willThrow(new MsoTestException("testException"));
462 msoBusinessLogic.getOrchestrationRequests(filterString);
466 public void shouldSendProperScaleOutRequest() throws IOException {
468 String serviceInstanceId = "3f93c7cb-2fd0-4557-9514-e189b7b04f9d";
469 String vnfInstanceId = "testVnfInstanceTempId";
470 String endpointTemplate = "/serviceInstantiation/v7/serviceInstances/%s/vnfs/%s/vfModules/scaleOut";
471 String vnfEndpoint = String.format(endpointTemplate, serviceInstanceId, vnfInstanceId);
472 org.onap.vid.changeManagement.RequestDetails requestDetails = readRequest();
473 org.onap.vid.changeManagement.RequestDetailsWrapper<org.onap.vid.changeManagement.RequestDetails> expectedRequest = readExpectedRequest();
474 MsoResponseWrapper expectedMsoResponseWrapper = createOkResponse();
477 .scaleOutVFModuleInstance(argThat(new MsoRequestWrapperMatcher(expectedRequest)),
479 .willReturn(expectedMsoResponseWrapper);
482 MsoResponseWrapper msoResponseWrapper = msoBusinessLogic
483 .scaleOutVfModuleInstance(requestDetails, serviceInstanceId, vnfInstanceId);
486 assertThat(msoResponseWrapper).isEqualToComparingFieldByField(expectedMsoResponseWrapper);
489 private org.onap.vid.changeManagement.RequestDetails readRequest() throws IOException {
490 Path path = Paths.get("payload_jsons", "scaleOutVfModulePayload.json");
491 URL url = this.getClass().getClassLoader().getResource(path.toString());
492 return objectMapper.readValue(url, org.onap.vid.changeManagement.RequestDetails.class);
495 private org.onap.vid.changeManagement.RequestDetailsWrapper<org.onap.vid.changeManagement.RequestDetails> readExpectedRequest()
497 Path path = Paths.get("payload_jsons", "scaleOutVfModulePayloadToMso.json");
498 URL url = this.getClass().getClassLoader().getResource(path.toString());
499 return objectMapper.readValue(url,
500 new TypeReference<org.onap.vid.changeManagement.RequestDetailsWrapper<org.onap.vid.changeManagement.RequestDetails>>() {
506 public void shouldFilterOutOrchestrationRequestsNotAllowedInDashboard() throws Exception {
508 String vnfModelTypeOrchestrationRequests = getFileContentAsString("mso_model_info_sample_response.json");
509 String scaleOutActionOrchestrationRequests = getFileContentAsString("mso_action_scaleout_sample_response.json");
511 HttpResponse<String> httpResponse = mockForGetOrchestrationRequest();
512 given(httpResponse.getBody())
513 .willReturn(vnfModelTypeOrchestrationRequests, scaleOutActionOrchestrationRequests);
516 List<Request> filteredOrchestrationReqs = msoBusinessLogic.getOrchestrationRequestsForDashboard();
518 assertThat(filteredOrchestrationReqs).hasSize(3);
519 assertThat(MsoBusinessLogicImpl.DASHBOARD_ALLOWED_TYPES)
520 .containsAll(filteredOrchestrationReqs
522 .map(el -> el.getRequestType().toUpperCase())
523 .collect(Collectors.toList()));
524 assertThat(filteredOrchestrationReqs)
525 .extracting(Request::getRequestScope)
526 .containsOnly("vnf", "vfModule");
529 @Test(expectedExceptions = GenericUncheckedException.class)
530 public void shouldThrowGenericUncheckedExceptionWhenGetOrchestrationRequestsForDashboardWithWrongJsonFile_() throws Exception {
532 String vnfModelTypeOrchestrationRequests = getFileContentAsString("mso_model_info_sample_wrong_response.json");
534 mockForGetOrchestrationRequest(200, vnfModelTypeOrchestrationRequests);
537 msoBusinessLogic.getOrchestrationRequestsForDashboard();
541 public void shouldProperlyGetManualTasksByRequestIdWithProperParameters() throws Exception {
543 String manualTasksList = getFileContentAsString("manual_tasks_by_requestId_test.json");
545 MsoResponseWrapper msoResponseWrapperMock = mock(MsoResponseWrapper.class);
547 .getManualTasksByRequestId(any(String.class), any(String.class), any(String.class),
548 any(RestObject.class)))
549 .willReturn(msoResponseWrapperMock);
550 given(msoResponseWrapperMock.getEntity())
551 .willReturn(manualTasksList);
554 List<Task> filteredOrchestrationReqs = msoBusinessLogic.getManualTasksByRequestId("TestId");
557 assertThat(filteredOrchestrationReqs).hasSize(2);
558 assertThat(filteredOrchestrationReqs).extracting("taskId", "type").
560 tuple("123123abc", "testTask"),
561 tuple("321321abc", "testTask")
565 @Test(expectedExceptions = GenericUncheckedException.class)
566 public void shouldThrowGenericUncheckedExceptionWhenGetManualTasksByRequestIdWithWrongJsonFile() throws Exception {
568 String manualTasksList = getFileContentAsString("manual_tasks_by_requestId_wrongJson_test.json");
570 MsoResponseWrapper msoResponseWrapperMock = mock(MsoResponseWrapper.class);
572 .getManualTasksByRequestId(any(String.class), any(String.class), any(String.class),
573 any(RestObject.class)))
574 .willReturn(msoResponseWrapperMock);
575 given(msoResponseWrapperMock.getEntity())
576 .willReturn(manualTasksList);
579 msoBusinessLogic.getManualTasksByRequestId("TestId");
582 @Test(expectedExceptions = MsoTestException.class)
583 public void getManualTasksByRequestIdWithArgument_shouldThrowException() {
586 .getManualTasksByRequestId(any(String.class), any(String.class), any(String.class),
587 any(RestObject.class)))
588 .willThrow(MsoTestException.class);
591 msoBusinessLogic.getManualTasksByRequestId("TestId");
595 public void shouldProperlyCompleteManualTaskWithProperParameters() {
597 MsoResponseWrapper expectedResponse = createOkResponse();
598 RequestDetails requestDetails = new RequestDetails();
599 String taskId = "testTaskId";
601 String url = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
602 String path = url + "/" + taskId + "/complete";
604 given(msoInterface.completeManualTask(eq(requestDetails), any(String.class), any(String.class), eq(path), any(RestObject.class))).willReturn(expectedResponse);
607 MsoResponseWrapper response = msoBusinessLogic.completeManualTask(requestDetails, taskId);
610 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
615 public void shouldProperlyActivateServiceInstanceWithProperParameters() {
617 RequestDetails detail = new RequestDetails();
618 String taskId = "testTaskId";
620 RestObject<String> restObjStr = new RestObject<>();
622 MsoResponseWrapper expectedResponse = MsoUtil.wrapResponse(restObjStr);
625 MsoResponseWrapper response = msoBusinessLogic.activateServiceInstance(detail, taskId);
628 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
632 @Test(expectedExceptions = MsoTestException.class)
633 public void shouldThrowExceptionWhenManualTaskWithWrongParameters() {
635 RequestDetails requestDetails = new RequestDetails();
638 String url = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
639 String path = url + "/" + taskId + "/complete";
641 given(msoInterface.completeManualTask(eq(requestDetails), any(String.class), any(String.class), eq(path), any(RestObject.class))).willThrow(new MsoTestException("empty path"));
644 msoBusinessLogic.completeManualTask(requestDetails, taskId);
648 public void shouldProperlyUpdateVnfWithProperParameters() {
650 MsoResponseWrapper expectedResponse = createOkResponse();
651 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
653 String serviceInstanceId = "testServiceId";
654 String vnfInstanceId = "testVnfInstanceId";
656 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
657 String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
658 vnfEndpoint = vnfEndpoint + '/' + vnfInstanceId;
660 given(msoInterface.updateVnf(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
663 MsoResponseWrapper response = (MsoResponseWrapper) msoBusinessLogic.updateVnf(requestDetails, serviceInstanceId, vnfInstanceId);
666 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
670 public void shouldProperlyReplaceVnfWithProperParameters() {
672 MsoResponseWrapper expectedResponse = createOkResponse();
673 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
675 String serviceInstanceId = "testServiceId";
676 String vnfInstanceId = "testVnfInstanceId";
678 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
679 String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
680 vnfEndpoint = vnfEndpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
681 vnfEndpoint = vnfEndpoint.replace(REQUEST_TYPE, ChangeManagementRequest.MsoChangeManagementRequest.REPLACE);
683 given(msoInterface.replaceVnf(requestDetails, vnfEndpoint)).willReturn(expectedResponse);
686 MsoResponseWrapper response = (MsoResponseWrapper) msoBusinessLogic.replaceVnf(requestDetails, serviceInstanceId, vnfInstanceId);
689 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
693 public void shouldProperlyGenerateInPlaceMsoRequestWithProperParameters() {
695 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
697 requestDetails.setVnfInstanceId("testVnfInstanceId");
698 requestDetails.setVnfName("testVnfName");
699 requestDetails.setRequestParameters(new RequestParameters());
701 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
702 "\"existing_software_version\": \"testExistingSoftwareParam\"," +
703 "\"new_software_version\": \"testNewSoftwareParam\"," +
704 "\"operations_timeout\": \"100\"" +
707 RequestDetails inPlaceSoftwareUpdateRequest = new RequestDetails();
708 inPlaceSoftwareUpdateRequest.setCloudConfiguration(requestDetails.getCloudConfiguration());
709 inPlaceSoftwareUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
710 inPlaceSoftwareUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
711 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new org.onap.vid.changeManagement.RequestDetailsWrapper();
712 requestDetailsWrapper.requestDetails = inPlaceSoftwareUpdateRequest;
715 org.onap.vid.changeManagement.RequestDetailsWrapper response = msoBusinessLogic.generateInPlaceMsoRequest(requestDetails);
718 assertThat(response).isEqualToComparingFieldByField(requestDetailsWrapper);
721 @Test(expectedExceptions = BadRequestException.class)
722 public void shouldThrowExceptionWhenGenerateInPlaceMsoRequestWithParametersWithWrongCharacters() {
724 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
726 requestDetails.setVnfInstanceId("testVnfInstanceId");
727 requestDetails.setVnfName("testVnfName");
728 requestDetails.setRequestParameters(new RequestParameters());
730 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
731 "\"existing_software_version\": \"#####\"," +
732 "\"new_software_version\": \"testNewSoftwareParam\"" +
736 msoBusinessLogic.generateInPlaceMsoRequest(requestDetails);
739 @Test(expectedExceptions = BadRequestException.class)
740 public void shouldThrowExceptionWhenGenerateInPlaceMsoRequestWithWrongParameters() {
742 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
744 requestDetails.setVnfInstanceId("testVnfInstanceId");
745 requestDetails.setVnfName("testVnfName");
746 requestDetails.setRequestParameters(new RequestParameters());
748 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
749 "\"test-wrong-parameter\": \"testParam\"," +
750 "\"new_software_version\": \"testNewSoftwareParam\"" +
754 msoBusinessLogic.generateInPlaceMsoRequest(requestDetails);
758 public void shouldProprleyGenerateConfigMsoRequestWithProperParameters() {
760 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
762 requestDetails.setVnfInstanceId("testVnfInstanceId");
763 requestDetails.setVnfName("testVnfName");
764 requestDetails.setRequestParameters(new RequestParameters());
766 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
767 "\"request-parameters\": \"testRequestParam\"," +
768 "\"configuration-parameters\": \"testConfigParams\"" +
771 RequestDetails configUpdateRequest = new RequestDetails();
772 configUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
773 configUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
775 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new org.onap.vid.changeManagement.RequestDetailsWrapper();
776 requestDetailsWrapper.requestDetails = configUpdateRequest;
779 org.onap.vid.changeManagement.RequestDetailsWrapper response = msoBusinessLogic.generateConfigMsoRequest(requestDetails);
782 assertThat(response).isEqualToComparingFieldByField(requestDetailsWrapper);
785 @Test(expectedExceptions = BadRequestException.class)
786 public void shouldThrowExceptionGenerateConfigMsoRequestWithoutAdditionalParameters() {
788 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
790 requestDetails.setVnfInstanceId("testVnfInstanceId");
791 requestDetails.setVnfName("testVnfName");
792 requestDetails.setRequestParameters(null);
795 msoBusinessLogic.generateConfigMsoRequest(requestDetails);
798 @Test(expectedExceptions = BadRequestException.class)
799 public void shouldThrowExceptionWhenGenerateConfigMsoRequestWithWrongPayload() {
801 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
803 requestDetails.setVnfInstanceId("testVnfInstanceId");
804 requestDetails.setVnfName("testVnfName");
805 requestDetails.setRequestParameters(new RequestParameters());
807 requestDetails.getRequestParameters().setAdditionalProperty("payload", null);
810 msoBusinessLogic.generateConfigMsoRequest(requestDetails);
813 @Test(expectedExceptions = BadRequestException.class)
814 public void shouldThrowExceptionGenerateConfigMsoRequestWithoutAnyParameter() {
816 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
818 requestDetails.setVnfInstanceId("testVnfInstanceId");
819 requestDetails.setVnfName("testVnfName");
820 requestDetails.setRequestParameters(new RequestParameters());
822 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
823 "\"test-wrong-parameter\": \"testParam\"," +
824 "\"configuration-parameters\": \"testConfigParam\"" +
828 msoBusinessLogic.generateConfigMsoRequest(requestDetails);
832 public void shouldProperlyGetActivateFabricConfigurationPathWithProperParameters() {
834 String serviceInstanceId = "testServiceId";
835 String path = validateEndpointPath(MsoProperties.MSO_REST_API_SERVICE_INSTANCE_CREATE);
836 path += "/" + serviceInstanceId + "/activateFabricConfiguration";
839 String response = msoBusinessLogic.getActivateFabricConfigurationPath(serviceInstanceId);
842 assertThat(response).isEqualTo(path);
846 public void shouldProperlyGetDeactivateAndCloudDeletePathWithProperParameters() {
848 String serviceInstanceId = "testServiceId";
849 String vnfInstanceId = "testVnfInstanceId";
850 String vfModuleInstanceId = "testVfModuleInstanceId";
851 String path = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
852 path = path.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
853 path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
854 path += "/" + vfModuleInstanceId + "/deactivateAndCloudDelete";
857 String response = msoBusinessLogic.getDeactivateAndCloudDeletePath(serviceInstanceId, vnfInstanceId, vfModuleInstanceId);
860 assertThat(response).isEqualTo(path);
864 public void shouldProperlyBuildRequestDetailsForSoftDeleteWithProperParameters() {
866 SoftDeleteRequest softDeleteRequest = new SoftDeleteRequest();
867 RequestDetails requestDetails = new RequestDetails();
869 String userId = "testUserID";
870 String tenantId = "testTenantId ";
871 String cloudRegionId = "testCloudId";
874 RequestInfo requestInfo = new RequestInfo();
875 requestInfo.setSource("VID");
876 requestInfo.setRequestorId(userId);
877 requestDetails.setRequestInfo(requestInfo);
879 CloudConfiguration cloudConfiguration = new CloudConfiguration();
880 cloudConfiguration.setTenantId(tenantId);
881 cloudConfiguration.setLcpCloudRegionId(cloudRegionId);
882 requestDetails.setCloudConfiguration(cloudConfiguration);
884 setModelInfoForRequestDetails(requestDetails);
886 setRequestParametersForRequestDetails(requestDetails);
888 softDeleteRequest.setLcpCloudRegionId(cloudRegionId);
889 softDeleteRequest.setTenantId(tenantId);
890 softDeleteRequest.setUserId(userId);
893 RequestDetails response = msoBusinessLogic.buildRequestDetailsForSoftDelete(softDeleteRequest);
896 assertThat(response).isEqualTo(requestDetails);
899 private void setRequestParametersForRequestDetails(RequestDetails requestDetails) {
900 RequestParameters requestParameters = new RequestParameters();
901 requestParameters.setTestApi("GR_API");
902 requestDetails.setRequestParameters(requestParameters);
905 private void setModelInfoForRequestDetails(RequestDetails requestDetails) {
906 ModelInfo modelInfo = new ModelInfo();
907 modelInfo.setModelType("vfModule");
908 requestDetails.setModelInfo(modelInfo);
912 public void shouldProperlyUpdateVnfSoftwareWithProperParameters() {
914 String serviceInstanceId = "testServiceId";
915 String vnfInstanceId = "testVnfInstanceId";
917 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
919 requestDetails.setVnfInstanceId("testVnfInstanceId");
920 requestDetails.setVnfName("testVnfName");
921 requestDetails.setRequestParameters(new RequestParameters());
923 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
924 "\"existing_software_version\": \"testExistingSoftwareParam\"," +
925 "\"new_software_version\": \"testNewSoftwareParam\"," +
926 "\"operations_timeout\": \"100\"" +
929 MsoResponseWrapper okResponse = createOkResponse();
931 given(msoInterface.changeManagementUpdate(isA(org.onap.vid.changeManagement.RequestDetailsWrapper.class), any(String.class))).willReturn(okResponse);
934 MsoResponseWrapper response = (MsoResponseWrapper) msoBusinessLogic.updateVnfSoftware(requestDetails, serviceInstanceId, vnfInstanceId);
937 assertThat(response).isEqualToComparingFieldByField(okResponse);
941 public void shouldProperlyUpdateVnfConfigWithProperParameters() {
943 String serviceInstanceId = "testServiceId";
944 String vnfInstanceId = "testVnfInstanceId";
946 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
948 requestDetails.setVnfInstanceId("testVnfInstanceId");
949 requestDetails.setVnfName("testVnfName");
950 requestDetails.setRequestParameters(new RequestParameters());
952 requestDetails.getRequestParameters().setAdditionalProperty("payload", "{" +
953 "\"request-parameters\": \"testRequestParam\"," +
954 "\"configuration-parameters\": \"testConfigParams\"" +
957 MsoResponseWrapper okResponse = createOkResponse();
959 given(msoInterface.changeManagementUpdate(isA(org.onap.vid.changeManagement.RequestDetailsWrapper.class), any(String.class))).willReturn(okResponse);
962 MsoResponseWrapper response = (MsoResponseWrapper) msoBusinessLogic.updateVnfConfig(requestDetails, serviceInstanceId, vnfInstanceId);
965 assertThat(response).isEqualToComparingFieldByField(okResponse);
969 public void shouldProperlyDeleteConfigurationWithProperParameters() {
971 String serviceInstanceId = "testServiceId";
972 String configurationId = "testConfigurationId";
974 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
976 requestDetails.setVnfInstanceId("testVnfInstanceId");
977 requestDetails.setVnfName("testVnfName");
979 MsoResponseWrapper okResponse = createOkResponse();
980 RequestDetailsWrapper wrappedRequestDetail = new RequestDetailsWrapper(requestDetails);
982 given(msoInterface.deleteConfiguration(eq(wrappedRequestDetail), any(String.class))).willReturn(okResponse);
985 MsoResponseWrapper response = msoBusinessLogic.deleteConfiguration(wrappedRequestDetail, serviceInstanceId, configurationId);
988 assertThat(response).isEqualToComparingFieldByField(okResponse);
992 public void shouldProperlySetConfigurationActiveStatusActiveWithProperParameters() {
994 String serviceInstanceId = "testServiceId";
995 String configurationId = "testConfigurationId";
997 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
999 requestDetails.setVnfInstanceId("testVnfInstanceId");
1000 requestDetails.setVnfName("testVnfName");
1002 MsoResponseWrapper okResponse = createOkResponse();
1005 validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE)
1006 .replace(SVC_INSTANCE_ID, serviceInstanceId)
1007 .replace(CONFIGURATION_ID, configurationId)
1010 given(msoInterface.setConfigurationActiveStatus(eq(requestDetails), eq(endpoint))).willReturn(okResponse);
1013 MsoResponseWrapper response = msoBusinessLogic.setConfigurationActiveStatus(requestDetails, serviceInstanceId, configurationId, true);
1016 assertThat(response).isEqualToComparingFieldByField(okResponse);
1020 public void shouldProperlySetConfigurationActiveStatusDeactivateWithProperParameters() {
1022 String serviceInstanceId = "testServiceId";
1023 String configurationId = "testConfigurationId";
1025 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1027 requestDetails.setVnfInstanceId("testVnfInstanceId");
1028 requestDetails.setVnfName("testVnfName");
1030 MsoResponseWrapper okResponse = createOkResponse();
1033 validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE)
1034 .replace(SVC_INSTANCE_ID, serviceInstanceId)
1035 .replace(CONFIGURATION_ID, configurationId)
1038 given(msoInterface.setConfigurationActiveStatus(eq(requestDetails), eq(endpoint))).willReturn(okResponse);
1041 MsoResponseWrapper response = msoBusinessLogic.setConfigurationActiveStatus(requestDetails, serviceInstanceId, configurationId, false);
1044 assertThat(response).isEqualToComparingFieldByField(okResponse);
1048 public void shouldProperlySetServiceInstanceStatusActiveWithProperParameters() {
1050 String serviceInstanceId = "testServiceId";
1051 MsoResponseWrapper okResponse = createOkResponse();
1053 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1055 given(msoInterface.setServiceInstanceStatus(eq(requestDetails), endsWith(serviceInstanceId + "/activate"))).willReturn(okResponse);
1058 MsoResponseWrapper response = msoBusinessLogic.setServiceInstanceStatus(requestDetails, serviceInstanceId, true);
1061 assertThat(response).isEqualToComparingFieldByField(okResponse);
1065 public void shouldProperlySetServiceInstanceStatusDeactivateWithProperParameters() {
1067 String serviceInstanceId = "testServiceId";
1068 MsoResponseWrapper okResponse = createOkResponse();
1070 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1072 given(msoInterface.setServiceInstanceStatus(eq(requestDetails), endsWith(serviceInstanceId + "/deactivate"))).willReturn(okResponse);
1075 MsoResponseWrapper response = msoBusinessLogic.setServiceInstanceStatus(requestDetails, serviceInstanceId, false);
1078 assertThat(response).isEqualToComparingFieldByField(okResponse);
1081 @Test(expectedExceptions = MsoTestException.class)
1082 public void shouldThrowExceptionWhenSetServiceInstanceStatusWithWrongParameters() {
1084 String serviceInstanceId = "testServiceId";
1086 doThrow(new MsoTestException("testException")).
1087 when(msoInterface).setServiceInstanceStatus(eq(null), any(String.class));
1090 msoBusinessLogic.setServiceInstanceStatus(null, serviceInstanceId, true);
1094 public void shouldProperlySetPortOnConfigurationStatusEnableWithProperParameters() {
1096 String serviceInstanceId = "testServiceId";
1097 String configurationId = "testConfigurationId";
1098 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1099 requestDetails.setVnfInstanceId("testVnfInstanceId");
1100 requestDetails.setVnfName("testVnfName");
1101 MsoResponseWrapper okResponse = createOkResponse();
1103 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE)
1104 .replace(SVC_INSTANCE_ID, serviceInstanceId)
1105 .replace(CONFIGURATION_ID, configurationId)
1108 given(msoInterface.setPortOnConfigurationStatus(eq(requestDetails), eq(endpoint))).willReturn(okResponse);
1111 MsoResponseWrapper response = msoBusinessLogic.setPortOnConfigurationStatus(requestDetails, serviceInstanceId, configurationId, true);
1114 assertThat(response).isEqualToComparingFieldByField(okResponse);
1118 public void shouldProperlySetPortOnConfigurationStatusDisableWithProperParameters() {
1120 String serviceInstanceId = "testServiceId";
1121 String configurationId = "testConfigurationId";
1122 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1123 requestDetails.setVnfInstanceId("testVnfInstanceId");
1124 requestDetails.setVnfName("testVnfName");
1125 MsoResponseWrapper okResponse = createOkResponse();
1127 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE)
1128 .replace(SVC_INSTANCE_ID, serviceInstanceId)
1129 .replace(CONFIGURATION_ID, configurationId)
1132 given(msoInterface.setPortOnConfigurationStatus(eq(requestDetails), eq(endpoint))).willReturn(okResponse);
1135 MsoResponseWrapper response = msoBusinessLogic.setPortOnConfigurationStatus(requestDetails, serviceInstanceId, configurationId, false);
1138 assertThat(response).isEqualToComparingFieldByField(okResponse);
1142 public void shouldProperlyCreateOperationalEnvironmentActivationRequestDetailsWithProperParameters() {
1144 OperationalEnvironmentActivateInfo details = createTestOperationalEnvironmentActivateInfo();
1146 org.onap.vid.changeManagement.RequestDetailsWrapper<RequestDetails> requestDetails = msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails(details);
1149 assertThat(requestDetails.requestDetails.getRequestParameters().getAdditionalProperties().values()).contains(details.getWorkloadContext(), details.getManifest());
1150 assertThat(requestDetails.requestDetails.getRequestInfo().getRequestorId()).isEqualTo(userId);
1154 public void shouldProperlyGetOperationalEnvironmentActivationPathWithProperParameters() {
1156 OperationalEnvironmentActivateInfo details = createTestOperationalEnvironmentActivateInfo();
1159 String response = msoBusinessLogic.getOperationalEnvironmentActivationPath(details);
1162 assertThat(response).contains(operationalEnvironmentId);
1166 public void shouldProperlyCreateOperationalEnvironmentDeactivationRequestDetailsWithProperParameters() {
1168 OperationalEnvironmentDeactivateInfo details = createTestOperationalEnvironmentDeactivateInfo();
1171 org.onap.vid.changeManagement.RequestDetailsWrapper<RequestDetails> response;
1172 response = msoBusinessLogic.createOperationalEnvironmentDeactivationRequestDetails(details);
1175 assertThat(response.requestDetails.getRequestInfo().getRequestorId()).isEqualTo(userId);
1179 public void shouldProperlyGetCloudResourcesRequestsStatusPathWithProperParameters() {
1181 String requestId = "testRequestId";
1184 String response = msoBusinessLogic.getCloudResourcesRequestsStatusPath(requestId);
1187 assertThat(response).contains(requestId);
1191 public void shouldProperlyGetOperationalEnvironmentDeactivationPathWithProperParameters() {
1193 OperationalEnvironmentDeactivateInfo details = createTestOperationalEnvironmentDeactivateInfo();
1196 String response = msoBusinessLogic.getOperationalEnvironmentDeactivationPath(details);
1199 assertThat(response).contains(operationalEnvironmentId);
1203 public void shouldProperlyGetOperationalEnvironmentCreationPathWithProperParameters() {
1205 String response = msoBusinessLogic.getOperationalEnvironmentCreationPath();
1208 assertThat(response).isNotBlank();
1212 public void shouldProperlyConvertParametersToRequestDetailsWithProperParameters() {
1214 OperationalEnvironmentController.OperationalEnvironmentCreateBody input = createTestOperationalEnvironmentCreateBody();
1217 org.onap.vid.changeManagement.RequestDetailsWrapper<OperationEnvironmentRequestDetails> response
1218 = msoBusinessLogic.convertParametersToRequestDetails(input, userId);
1221 assertThat(response.requestDetails.getRequestInfo().getInstanceName()).isEqualTo(input.getInstanceName());
1222 assertThat(response.requestDetails.getRequestInfo().getRequestorId()).isEqualTo(userId);
1223 assertThat(response.requestDetails.getRequestParameters().getOperationalEnvironmentType()).isEqualTo(input.getOperationalEnvironmentType());
1224 assertThat(response.requestDetails.getRequestParameters().getTenantContext()).isEqualTo(input.getTenantContext());
1225 assertThat(response.requestDetails.getRequestParameters().getWorkloadContext()).isEqualTo(input.getWorkloadContext());
1229 public void shouldProperlyRemoveRelationshipFromServiceInstanceWithProperParameters() {
1231 MsoResponseWrapper expectedResponse = createOkResponse();
1232 String serviceInstanceId = "testServiceId";
1233 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1235 given(msoInterface.removeRelationshipFromServiceInstance(eq(requestDetails), endsWith("/" + serviceInstanceId + "/removeRelationships")))
1236 .willReturn(expectedResponse);
1239 MsoResponseWrapper response = msoBusinessLogic.removeRelationshipFromServiceInstance(requestDetails, serviceInstanceId);
1242 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
1246 public void shouldProperlyAddRelationshipToServiceInstanceWithProperParameters() {
1248 MsoResponseWrapper expectedResponse = createOkResponse();
1249 String serviceInstanceId = "testServiceId";
1250 org.onap.vid.changeManagement.RequestDetails requestDetails = new org.onap.vid.changeManagement.RequestDetails();
1252 given(msoInterface.addRelationshipToServiceInstance(eq(requestDetails), endsWith("/" + serviceInstanceId + "/addRelationships")))
1253 .willReturn(expectedResponse);
1256 MsoResponseWrapper response = msoBusinessLogic.addRelationshipToServiceInstance(requestDetails, serviceInstanceId);
1259 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
1263 public void shouldProperlyRequestTypeFromValueWithValidParameters() {
1265 String testValue = "createInstance";
1267 MsoBusinessLogicImpl.RequestType response = MsoBusinessLogicImpl.RequestType.fromValue(testValue);
1270 assertThat(response.toString()).isEqualTo(testValue);
1273 @Test(expectedExceptions = IllegalArgumentException.class)
1274 public void shouldThrowExceptionWhenRequestTypeFromValueWithWrongParameter() {
1276 String testValue = "notExistingParameter";
1278 MsoBusinessLogicImpl.RequestType.fromValue(testValue);
1282 public void shouldProperlyInvokeVnfWorkflowWithValidParameters() {
1284 MsoResponseWrapper okResponse = createOkResponse();
1285 WorkflowRequestDetail request = createWorkflowRequestDetail();
1286 UUID serviceInstanceId = new UUID(1,10);
1287 UUID vnfInstanceId = new UUID(2,20);
1288 UUID workflow_UUID = new UUID(3,30);
1289 String path = "/instanceManagement/v1/serviceInstances/"+serviceInstanceId+"/vnfs/"+vnfInstanceId+"/workflows/"+workflow_UUID;
1291 given(msoInterface.invokeWorkflow(eq(request), eq(path), MockitoHamcrest.argThat(allOf(hasEntry("X-RequestorID", "testRequester"),hasEntry("X-ONAP-PartnerName", "VID"))))).willReturn(okResponse);
1294 MsoResponseWrapper response = msoBusinessLogic.invokeVnfWorkflow(request, "testRequester", serviceInstanceId, vnfInstanceId, workflow_UUID);
1297 assertThat(response).isEqualToComparingFieldByField(okResponse);
1302 public void shouldReturnWorkflowListForGivenModelId() {
1303 given(msoInterface.getWorkflowListByModelId(anyString())).willReturn(workflowListResponse);
1304 given(workflowListResponse.getBody()).willReturn(workflowList);
1305 given(workflowListResponse.getStatus()).willReturn(HttpStatus.ACCEPTED.value());
1307 SOWorkflowList workflows = msoBusinessLogic.getWorkflowListByModelId("sampleModelId");
1309 assertThat(workflows).isEqualTo(workflowList);
1312 @Test(expectedExceptions = {MsoBusinessLogicImpl.WorkflowListException.class})
1313 public void shouldRaiseExceptionWhenRetrievingWorkflowsFailed() {
1314 given(msoInterface.getWorkflowListByModelId(anyString())).willReturn(workflowListResponse);
1315 given(workflowListResponse.getStatus()).willReturn(HttpStatus.INTERNAL_SERVER_ERROR.value());
1317 msoBusinessLogic.getWorkflowListByModelId("sampleModelId");
1322 public void probeShouldReturnOrchestrationRequestsAndConnectionStatus(){
1325 + " \"requestList\":"
1327 + " \"request\": {}"
1331 mockForGetOrchestrationRequest(200, body);
1333 ExternalComponentStatus externalComponentStatus = msoBusinessLogic.probeComponent();
1335 assertThat(externalComponentStatus.isAvailable()).isTrue();
1336 assertThat(externalComponentStatus.getComponent()).isEqualTo(ExternalComponentStatus.Component.MSO);
1339 private WorkflowRequestDetail createWorkflowRequestDetail() {
1340 WorkflowRequestDetail workflowRequestDetail = new WorkflowRequestDetail();
1341 org.onap.vid.changeManagement.RequestParameters requestParameters = new org.onap.vid.changeManagement.RequestParameters();
1342 HashMap<String,String> paramsMap = new HashMap<>();
1343 paramsMap.put("testKey1","testValue1");
1344 paramsMap.put("testKey2","testValue2");
1346 List<Map<String,String>> mapArray= new ArrayList<>();
1347 mapArray.add(paramsMap);
1348 requestParameters.setUserParams(mapArray);
1350 CloudConfiguration cloudConfiguration = new CloudConfiguration();
1351 cloudConfiguration.setCloudOwner("testOwne");
1352 cloudConfiguration.setTenantId("testId");
1353 cloudConfiguration.setLcpCloudRegionId("testLcpCloudId");
1355 workflowRequestDetail.setRequestParameters(requestParameters);
1356 workflowRequestDetail.setCloudConfiguration(cloudConfiguration);
1357 return workflowRequestDetail;
1360 private OperationalEnvironmentActivateInfo createTestOperationalEnvironmentActivateInfo() {
1361 OperationalEnvironmentController.OperationalEnvironmentActivateBody operationalEnvironmentActivateBody = new OperationalEnvironmentController.OperationalEnvironmentActivateBody(
1362 "testRelatedInstanceId",
1363 "testRelatedInstanceName",
1364 "testWorkloadContext",
1365 new OperationalEnvironmentController.OperationalEnvironmentManifest()
1367 return new OperationalEnvironmentActivateInfo(operationalEnvironmentActivateBody, userId, operationalEnvironmentId);
1370 private OperationalEnvironmentDeactivateInfo createTestOperationalEnvironmentDeactivateInfo() {
1371 return new OperationalEnvironmentDeactivateInfo(userId, operationalEnvironmentId);
1374 private OperationalEnvironmentController.OperationalEnvironmentCreateBody createTestOperationalEnvironmentCreateBody() {
1375 return new OperationalEnvironmentController.OperationalEnvironmentCreateBody(
1377 "testEcompInstanceId",
1378 "testEcompInstanceName",
1379 "testOperationalEnvironmentType",
1380 "testTenantContext",
1381 "testWorkloadContext"
1385 private MsoResponseWrapper createOkResponse() {
1386 HttpStatus expectedStatus = HttpStatus.ACCEPTED;
1387 String expectedBody = " \"body\": {\n" +
1388 " \"requestReferences\": {\n" +
1389 " \"instanceId\": \" 123456 \",\n" +
1390 " \"requestId\": \"b6dc9806-b094-42f7-9386-a48de8218ce8\"\n" +
1392 MsoResponseWrapper responseWrapper = new MsoResponseWrapper();
1393 responseWrapper.setEntity(expectedBody);
1394 responseWrapper.setStatus(expectedStatus.value());
1395 return responseWrapper;
1398 private String getFileContentAsString(String resourceName) throws Exception {
1399 Path path = Paths.get("payload_jsons", resourceName);
1400 URL url = this.getClass().getClassLoader().getResource(path.toString());
1403 result = IOUtils.toString(url.toURI(), "UTF-8");
1408 private static class MsoRequestWrapperMatcher implements
1409 ArgumentMatcher<org.onap.vid.changeManagement.RequestDetailsWrapper> {
1411 private final org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest;
1413 MsoRequestWrapperMatcher(org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest) {
1414 this.expectedRequest = expectedRequest;
1418 public boolean matches(org.onap.vid.changeManagement.RequestDetailsWrapper argument) {
1419 return expectedRequest.requestDetails.equals(argument.requestDetails);
1423 private class MsoTestException extends RuntimeException {
1424 MsoTestException(String testException) {
1425 super(testException);
1429 //you need to add mocks to httpResponse
1430 private HttpResponse<String> mockForGetOrchestrationRequest() {
1432 HttpResponse<String> httpResponse = mock(HttpResponse.class);
1433 HttpResponseWithRequestInfo<String> httpResponseWithRequestInfo = new HttpResponseWithRequestInfo<>(httpResponse, "my pretty url", HttpMethod.GET);
1434 when(msoInterface.getOrchestrationRequest(any(String.class),anyBoolean()))
1435 .thenReturn(httpResponseWithRequestInfo);
1436 return httpResponse;
1439 private HttpResponse<String> mockForGetOrchestrationRequest(int statusCode, String body) {
1441 HttpResponse<String> httpResponse = mockForGetOrchestrationRequest();
1442 when(httpResponse.getStatus()).thenReturn(statusCode);
1443 when(httpResponse.getBody()).thenReturn(body);
1445 when(httpResponse.getRawBody()).thenReturn(IOUtils.toInputStream(body, StandardCharsets.UTF_8.name()));
1446 } catch (IOException e) {
1447 throw new RuntimeException(e);
1449 return httpResponse;
1453 public void probeComponent_verifyGoodRequest(){
1454 String responseString = "" +
1456 " \"requestList\": [{ " +
1457 " \"request\": { " +
1458 " \"requestDetails\": { " +
1459 " \"cloudConfiguration\": { " +
1460 " \"lcpCloudRegionId\": \"hvf6\", " +
1461 " \"cloudOwner\": \"irma-aic\", " +
1462 " \"tenantId\": \"ffdf52b5e5104b0e8f329b0b1637ee2e\" " +
1464 " \"modelInfo\": { " +
1465 " \"modelCustomizationName\": \"VSP1710PID298109_vWINIFRED 0\", " +
1466 " \"modelCustomizationId\": \"24d43fdb-9aa6-4287-a68e-1e702ea89d13\", " +
1467 " \"modelInvariantId\": \"e7961100-cde6-4b5a-bcda-b8945086950a\", " +
1468 " \"modelVersionId\": \"959a7ba0-89ee-4984-9af6-65d5bdda4b0e\", " +
1469 " \"modelName\": \"VSP1710PID298109_vWINIFRED\", " +
1470 " \"modelType\": \"vnf\", " +
1471 " \"modelVersion\": \"1.0\" " +
1473 " \"relatedModelList\": [{ " +
1474 " \"relatedInstance\": { " +
1475 " \"instanceId\": \"6dd0f8de-93c7-48a2-914b-1a8d58e0eb48\", " +
1476 " \"modelInfo\": { " +
1477 " \"modelInvariantId\": \"57e00952-0af7-4f0f-b19a-408a6f73c8df\", " +
1478 " \"modelType\": \"service\", " +
1479 " \"modelName\": \"ServicevWINIFREDPID298109\", " +
1480 " \"modelVersion\": \"1.0\", " +
1481 " \"modelVersionId\": \"fe6985cd-ea33-3346-ac12-ab121484a3fe\" " +
1486 " \"requestInfo\": { " +
1487 " \"source\": \"VID\", " +
1488 " \"suppressRollback\": false, " +
1489 " \"requestorId\": \"ds828e\" " +
1491 " \"requestParameters\": { " +
1492 " \"userParams\": [ " +
1494 " \"aLaCarte\": false, " +
1495 " \"usePreload\": true, " +
1496 " \"rebuildVolumeGroups\": false, " +
1497 " \"autoBuildVfModules\": false, " +
1498 " \"cascadeDelete\": false " +
1500 " \"relatedInstanceList\": [{ " +
1501 " \"relatedInstance\": { " +
1502 " \"instanceId\": \"6dd0f8de-93c7-48a2-914b-1a8d58e0eb48\", " +
1503 " \"modelInfo\": { " +
1504 " \"modelInvariantId\": \"57e00952-0af7-4f0f-b19a-408a6f73c8df\", " +
1505 " \"modelType\": \"service\", " +
1506 " \"modelName\": \"ServicevWINIFREDPID298109\", " +
1507 " \"modelVersion\": \"1.0\", " +
1508 " \"modelVersionId\": \"fe6985cd-ea33-3346-ac12-ab121484a3fe\" " +
1514 " \"requestId\": \"d352c70d-5ef8-4977-9ea8-4c8cbe860422\", " +
1515 " \"requestScope\": \"vnf\", " +
1516 " \"requestStatus\": { " +
1517 " \"percentProgress\": 100.0, " +
1518 " \"requestState\": \"Some Unknown Value\", " +
1519 " \"statusMessage\": \"Update Is In Progress\", " +
1520 " \"finishTime\": \"Fri, 08 Sep 2017 19:34:33 GMT\" " +
1522 " \"requestType\": \"updateInstance\", " +
1523 " \"startTime\": \"<IN_PROGRESS_DATE>\", " +
1524 " \"instanceReferences\": { " +
1525 " \"serviceInstanceId\": \"6dd0f8de-93c7-48a2-914b-1a8d58e0eb48\", " +
1526 " \"vnfInstanceId\": \"7c00cc1e-6425-4fc3-afc3-0289db288d4c\", " +
1527 " \"requestorId\": \"ds828e\" " +
1534 mockForGetOrchestrationRequest(200, responseString);
1536 final ExternalComponentStatus msoStatus = msoBusinessLogic.probeComponent();
1538 assertMsoStatus(msoStatus, true);
1539 assertMetadata(msoStatus, 200, startsWith(responseString.substring(0, 400)), "my pretty url", equalTo("OK"));
1543 public void probeComponent_response200OkButEmptyPayload_shouldDescribeCorrectly() {
1544 String responseString = "" +
1546 " \"requestList\": []" +
1549 mockForGetOrchestrationRequest(200, responseString);
1551 final ExternalComponentStatus msoStatus = msoBusinessLogic.probeComponent();
1553 assertMsoStatus(msoStatus, true);
1555 assertMetadata(msoStatus, 200, equalTo(responseString), "my pretty url", containsString("OK"));
1559 public void probeComponent_response200OkButInvalidPayload_shouldDescribeCorrectly() {
1560 String responseString = "this payload is an invalid json";
1562 mockForGetOrchestrationRequest(200, responseString);
1564 final ExternalComponentStatus msoStatus = msoBusinessLogic.probeComponent();
1566 assertMsoStatus(msoStatus, false);
1568 assertMetadata(msoStatus, 200, equalTo(responseString), "my pretty url", containsString("JsonParseException: Unrecognized token"));
1572 public void probeComponent_verifyResponse406() {
1573 String responseString = "my raw data";
1575 when(msoInterface.getOrchestrationRequest(any(), eq(true))).thenThrow(
1576 new ExceptionWithRequestInfo(HttpMethod.GET, "my pretty url", responseString, 406,
1577 new GenericUncheckedException(
1578 new HttpException("Simulating as 406 was returned (200 or 202 expected)"))));
1580 final ExternalComponentStatus msoStatus = msoBusinessLogic.probeComponent();
1582 assertMsoStatus(msoStatus, false);
1584 assertMetadata(msoStatus, 406, equalTo(responseString), "my pretty url", containsString("HttpException: Simulating as 406 was returned"));
1589 public void probeComponent_throwNullPointerException_resultIsWithErrorMetadata() {
1590 when(msoInterface.getOrchestrationRequest(any(), eq(true))).thenThrow(new NullPointerException());
1592 final ExternalComponentStatus msoStatus = msoBusinessLogic.probeComponent();
1594 MatcherAssert.assertThat(msoStatus.isAvailable(), is(false));
1595 MatcherAssert.assertThat(msoStatus.getComponent(), is(MSO));
1596 MatcherAssert.assertThat(msoStatus.getMetadata(), instanceOf(ErrorMetadata.class));
1598 final ErrorMetadata metadata = ((ErrorMetadata) msoStatus.getMetadata());
1599 org.junit.Assert.assertThat(metadata.getDescription(), containsString("NullPointerException"));
1602 private void assertMsoStatus(ExternalComponentStatus msoStatus, boolean isAvailable) {
1603 MatcherAssert.assertThat(msoStatus.isAvailable(), is(isAvailable));
1604 MatcherAssert.assertThat(msoStatus.getComponent(), is(MSO));
1605 MatcherAssert.assertThat(msoStatus.getMetadata(), instanceOf(HttpRequestMetadata.class));
1608 private void assertMetadata(ExternalComponentStatus msoStatus, int httpCode, Matcher<String> rawData, String url, Matcher<String> descriptionMatcher) {
1609 final HttpRequestMetadata metadata = ((HttpRequestMetadata) msoStatus.getMetadata());
1610 org.junit.Assert.assertThat(metadata.getHttpMethod(), equalTo(HttpMethod.GET));
1611 org.junit.Assert.assertThat(metadata.getHttpCode(), equalTo(httpCode));
1612 org.junit.Assert.assertThat(metadata.getUrl(), equalTo(url));
1613 org.junit.Assert.assertThat(metadata.getRawData(), rawData);
1614 org.junit.Assert.assertThat(metadata.getDescription(), descriptionMatcher);