1 package org.onap.vid.mso;
3 import com.fasterxml.jackson.core.type.TypeReference;
4 import com.fasterxml.jackson.databind.ObjectMapper;
6 import org.onap.portalsdk.core.util.SystemProperties;
7 import org.onap.vid.changeManagement.RequestDetailsWrapper;
8 import org.onap.vid.controllers.MsoController;
9 import org.onap.vid.mso.rest.Request;
10 import org.onap.vid.mso.rest.RequestDetails;
11 import org.onap.vid.properties.Features;
12 import org.springframework.test.context.ContextConfiguration;
13 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
14 import org.springframework.test.context.web.WebAppConfiguration;
15 import org.testng.Assert;
16 import org.testng.annotations.BeforeTest;
17 import org.testng.annotations.DataProvider;
18 import org.testng.annotations.Test;
19 import org.togglz.core.manager.FeatureManager;
21 import java.io.IOException;
22 import java.nio.file.Files;
23 import java.nio.file.Path;
24 import java.nio.file.Paths;
25 import java.util.List;
26 import java.util.stream.Collectors;
28 import static org.assertj.core.api.Assertions.assertThat;
29 import static org.mockito.Matchers.eq;
30 import static org.mockito.Mockito.*;
31 import static org.onap.vid.controllers.MsoController.SVC_INSTANCE_ID;
32 import static org.onap.vid.mso.MsoBusinessLogicImpl.validateEndpointPath;
34 @ContextConfiguration(classes = {SystemProperties.class})
36 public class MsoBusinessLogicImplTest extends AbstractTestNGSpringContextTests {
38 private static final String SERVICE_INSTANCE_ID = "1";
39 private static final String VNF_INSTANCE_ID = "1";
40 private static final String EXPECTED_SCALE_OUT_PATH = "/serviceInstantiation/v7/serviceInstances/1/vnfs/1/vfModules/scaleOut";
41 private static final Path PATH_TO_NOT_PROCESSED_SCALE_OUT_REQUEST = Paths.get("src", "test", "resources", "payload_jsons", "scaleOutVfModulePayload.json");
42 private static final Path PATH_TO_FINAL_SCALE_OUT_REQUEST = Paths.get("src", "test", "resources", "payload_jsons", "scaleOutVfModulePayloadToMso.json");
43 private static final Path PATH_TO_EXPECTED_MSO_MODEL_TYPE_REQ = Paths.get("src", "test", "resources", "payload_jsons", "mso_model_info_sample_response.json");
44 private static final Path PATH_TO_EXPECTED_MSO_SCALEOUT_REQ = Paths.get("src", "test", "resources", "payload_jsons", "mso_action_scaleout_sample_response.json");
45 private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
48 private MsoBusinessLogicImpl msoBusinessLogic;
51 private FeatureManager featureManagerMock;
54 private MsoInterface msoInterfaceMock;
58 public void initMocks() {
59 MockitoAnnotations.initMocks(this);
63 public void validateEndpointPath_endPointIsNotEmptyAndVaild_returnProperty() {
64 System.setProperty("TestEnv", "123");
65 String foundEndPoint = validateEndpointPath("TestEnv");
66 Assert.assertEquals("123", foundEndPoint);
69 @Test(expectedExceptions = RuntimeException.class)
70 public void validateEndpointPath_endPointIsNull_throwRuntimeException() {
71 validateEndpointPath("NotExists");
74 @Test(expectedExceptions = RuntimeException.class)
75 public void validateEndpointPath_endPointIsNotEmptyButDoesntExists_throwRuntimeException() {
76 System.setProperty("EmptyEndPoint", "");
77 validateEndpointPath("EmptyEndPoint");
81 //@Test(dataProvider = "unAssignOrDeleteParams")
82 public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOffOrUnAssignFlagIsFalse(boolean isAssignFlag, String status) {
83 Mockito.reset(msoInterfaceMock);
84 String endpoint = validateEndpointPath(isAssignFlag ? MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE : MsoProperties.MSO_REST_API_SVC_INSTANCE);
85 RequestDetails requestDetails = new RequestDetails();
87 when(featureManagerMock.isActive(Features.FLAG_UNASSIGN_SERVICE)).thenReturn(isAssignFlag);
89 msoBusinessLogic.deleteSvcInstance(requestDetails, "tempId", status);
91 verify(msoInterfaceMock).deleteSvcInstance(requestDetails, endpoint + "/tempId");
95 public Object[][] unAssignOrDeleteParams() {
96 return new Object[][]{
97 {Boolean.FALSE, "active"},
98 {Boolean.FALSE, "created"},
99 {Boolean.TRUE, "Active"},
100 {Boolean.TRUE, "unexpected-status"},
104 //@Test(dataProvider = "unAssignStatus")
105 public void deleteSvcInstance_verifyEndPointPathConstructing_unAssignFeatureOnAndUnAssignFlagIsTrue(String status) {
106 Mockito.reset(msoInterfaceMock);
107 // in the test Features.FLAG_UNASSIGN_SERVICE is active so the endpoint should be MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE
108 String endpoint = validateEndpointPath(MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE);
109 RequestDetails requestDetails = new RequestDetails();
111 when(featureManagerMock.isActive(Features.FLAG_UNASSIGN_SERVICE)).thenReturn(true);
113 msoBusinessLogic.deleteSvcInstance(requestDetails, "tempId", status);
115 verify(msoInterfaceMock).unassignSvcInstance(requestDetails, endpoint + "/tempId/unassign");
119 public Object[][] unAssignStatus() {
120 return new Object[][]{
129 public void deleteVnf_verifyEndPointPathConstructing() {
130 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
131 RequestDetails requestDetails = new RequestDetails();
133 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, "serviceInstanceTempId");
135 msoBusinessLogic.deleteVnf(requestDetails, "serviceInstanceTempId", "vnfInstanceTempId");
136 verify(msoInterfaceMock).deleteVnf(requestDetails, vnf_endpoint + "/vnfInstanceTempId");
140 public void deleteVfModule_verifyEndPointPathConstructing() {
141 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
142 RequestDetails requestDetails = new RequestDetails();
144 String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, "serviceInstanceTempId").replaceFirst(MsoController.VNF_INSTANCE_ID, "vnfInstanceTempId");
146 msoBusinessLogic.deleteVfModule(requestDetails, "serviceInstanceTempId", "vnfInstanceTempId", "vfModuleTempId");
147 verify(msoInterfaceMock).deleteVfModule(requestDetails, vf__modules_endpoint + "/vfModuleTempId");
152 public void shouldSendProperScaleOutRequest() throws IOException {
153 ArgumentCaptor<RequestDetailsWrapper> requestDetailsWrapperArgumentCaptor = ArgumentCaptor.forClass(RequestDetailsWrapper.class);
154 org.onap.vid.changeManagement.RequestDetails requestDetails = getScaleOutRequest();
155 RequestDetailsWrapper expectedRequestWrapper = getExpectedRequestWrapper();
157 msoBusinessLogic.scaleOutVfModuleInstance(requestDetails, SERVICE_INSTANCE_ID, VNF_INSTANCE_ID);
159 verify(msoInterfaceMock).scaleOutVFModuleInstance(requestDetailsWrapperArgumentCaptor.capture(), eq(EXPECTED_SCALE_OUT_PATH));
160 RequestDetailsWrapper actual = requestDetailsWrapperArgumentCaptor.getAllValues().get(0);
162 assertThat(expectedRequestWrapper.requestDetails).isEqualTo(actual.requestDetails);
166 public void shouldFilterOutOrchestrationRequestsNotAllowedInDashboard() throws IOException {
167 String vnfModelTypeOrchestrationRequests = getFileContentAsString(PATH_TO_EXPECTED_MSO_MODEL_TYPE_REQ);
168 String scaleOutActionOrchestrationRequests = getFileContentAsString(PATH_TO_EXPECTED_MSO_SCALEOUT_REQ);
170 MsoResponseWrapper msoResponseWrapperMock = mock(MsoResponseWrapper.class);
171 when(msoInterfaceMock.getOrchestrationRequestsForDashboard(any(String.class), any(String.class), any(String.class), any(RestObject.class)))
172 .thenReturn(msoResponseWrapperMock);
173 when(msoResponseWrapperMock.getEntity()).thenReturn(vnfModelTypeOrchestrationRequests, scaleOutActionOrchestrationRequests);
175 List<Request> filteredOrchestrationReqs = msoBusinessLogic.getOrchestrationRequestsForDashboard();
177 assertThat(filteredOrchestrationReqs).hasSize(3);
178 assertThat(MsoBusinessLogicImpl.DASHBOARD_ALLOWED_TYPES)
179 .containsAll(filteredOrchestrationReqs
181 .map(el -> el.getRequestType().toUpperCase())
182 .collect(Collectors.toList()));
183 assertThat(filteredOrchestrationReqs
185 .map(org.onap.vid.domain.mso.Request::getRequestScope)
186 .collect(Collectors.toList()))
187 .containsOnly("vnf", "vfModule");
191 private String getFileContentAsString(Path pathToFile) throws IOException {
192 return new String(Files.readAllBytes(pathToFile));
195 private org.onap.vid.changeManagement.RequestDetails getScaleOutRequest() throws IOException {
196 return OBJECT_MAPPER.readValue(PATH_TO_NOT_PROCESSED_SCALE_OUT_REQUEST.toFile(), org.onap.vid.changeManagement.RequestDetails.class);
199 private RequestDetailsWrapper getExpectedRequestWrapper() throws IOException {
200 return OBJECT_MAPPER.readValue(PATH_TO_FINAL_SCALE_OUT_REQUEST.toFile(), new TypeReference<RequestDetailsWrapper<org.onap.vid.changeManagement.RequestDetails>>() {