2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Modifications Copyright (c) 2020 Nokia
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader;
23 import com.fasterxml.jackson.databind.ObjectMapper;
24 import org.camunda.bpm.engine.delegate.DelegateExecution;
25 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.onap.so.bpmn.BaseTaskTest;
30 import org.onap.so.bpmn.common.BBConstants;
31 import org.onap.so.bpmn.infrastructure.workflow.tasks.Resource;
32 import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowType;
33 import org.onap.so.client.exception.ExceptionBuilder;
34 import org.onap.so.db.catalog.beans.ConfigurationResource;
35 import org.onap.so.db.catalog.beans.CvnfcCustomization;
36 import org.onap.so.db.catalog.beans.HeatTemplate;
37 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
38 import org.onap.so.db.catalog.beans.VfModuleCustomization;
39 import org.onap.so.db.catalog.beans.Service;
40 import org.onap.so.db.catalog.beans.VfModule;
41 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
42 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
43 import org.onap.so.db.catalog.beans.HeatEnvironment;
44 import org.onap.so.db.catalog.client.CatalogDbClient;
45 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
46 import java.io.IOException;
47 import java.nio.file.Files;
48 import java.nio.file.Paths;
49 import java.util.ArrayList;
50 import java.util.List;
52 import java.util.stream.Collectors;
53 import static org.hamcrest.MatcherAssert.assertThat;
54 import static org.hamcrest.Matchers.is;
55 import static org.junit.Assert.assertEquals;
56 import static org.mockito.ArgumentMatchers.anyString;
57 import static org.mockito.Mockito.mock;
59 public class UserParamsServiceTraversalTest extends BaseTaskTest {
61 private static final String MACRO_ASSIGN_JSON = "Macro/ServiceMacroAssign.json";
62 private static final String MACRO_ASSIGN_PNF_JSON = "Macro/ServiceMacroAssignPnf.json";
63 private static final String NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
64 private static final String MACRO_CREATE_WITHOUT_RESOURCES_JSON = "Macro/ServiceMacroCreateWithoutResources.json";
65 private static final String serviceInstanceId = "123";
66 private DelegateExecution execution;
67 private CatalogDbClient mockCatalogDbClient;
68 private UserParamsServiceTraversal userParamsServiceTraversal;
69 private String requestAction;
72 public void before() throws Exception {
73 execution = new DelegateExecutionFake();
74 mockCatalogDbClient = mock(CatalogDbClient.class);
75 userParamsServiceTraversal = new UserParamsServiceTraversal(mockCatalogDbClient, mock(ExceptionBuilder.class));
76 requestAction = "assignInstance";
80 public void getResourceListFromUserParams() throws Exception {
81 initExecution(requestAction, readBpmnRequestFromFile(MACRO_CREATE_WITHOUT_RESOURCES_JSON), false);
82 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
83 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
84 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
85 anyString(), anyString());
87 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
88 getUserParams(), serviceInstanceId, requestAction);
89 List<WorkflowType> expected = List.of(WorkflowType.SERVICE);
90 List<WorkflowType> result =
91 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
93 assertEquals(1, resourceListFromUserParams.size());
94 assertThat(expected, is(result));
98 public void getResourceListFromUserParamsForVnfs() throws Exception {
99 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false);
100 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
101 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
102 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
103 anyString(), anyString());
105 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
106 getUserParams(), serviceInstanceId, requestAction);
107 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.VNF, WorkflowType.VOLUMEGROUP,
108 WorkflowType.VFMODULE, WorkflowType.CONFIGURATION);
109 List<WorkflowType> result =
110 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
112 assertEquals(5, resourceListFromUserParams.size());
113 assertThat(expected, is(result));
117 public void getResourceListFromUserParamsForPnfs() throws Exception {
118 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_PNF_JSON), false);
119 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
120 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
121 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
122 anyString(), anyString());
124 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
125 getUserParams(), serviceInstanceId, requestAction);
126 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.PNF);
127 List<WorkflowType> result =
128 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
130 assertEquals(2, resourceListFromUserParams.size());
131 assertThat(expected, is(result));
135 public void getResourceListFromUserParamsForNetworks() throws Exception {
136 requestAction = "createInstance";
137 initExecution(requestAction, readBpmnRequestFromFile(NETWORK_COLLECTION_JSON), false);
138 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
139 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
140 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
141 anyString(), anyString());
142 Mockito.doReturn(getService()).when(mockCatalogDbClient).getServiceByID(anyString());
143 Mockito.doReturn(new NetworkCollectionResourceCustomization()).when(mockCatalogDbClient)
144 .getNetworkCollectionResourceCustomizationByID(anyString());
146 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
147 getUserParams(), serviceInstanceId, requestAction);
148 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.NETWORK, WorkflowType.NETWORK,
149 WorkflowType.NETWORKCOLLECTION);
150 List<WorkflowType> result =
151 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
153 assertEquals(4, resourceListFromUserParams.size());
154 assertThat(expected, is(result));
158 public void getResourceListFromUserParamsBuildAndThrowExceptionWhenVfModuleAreEmpty() throws Exception {
159 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false);
160 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
161 vfModuleCustomization.setVfModule(null);
162 Mockito.doReturn(vfModuleCustomization).when(mockCatalogDbClient)
163 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
165 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
166 getUserParams(), serviceInstanceId, requestAction);
167 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.VNF);
168 List<WorkflowType> result =
169 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
171 assertEquals(2, resourceListFromUserParams.size());
172 assertThat(expected, is(result));
175 private List<Map<String, Object>> getUserParams() throws IOException {
176 String bpmnRequest = (String) execution.getVariable(BBConstants.G_BPMN_REQUEST);
177 ServiceInstancesRequest sIRequest = new ObjectMapper().readValue(bpmnRequest, ServiceInstancesRequest.class);
178 return sIRequest.getRequestDetails().getRequestParameters().getUserParams();
182 public void getResourceListFromUserParamsWhenUserParamsAreNull() throws Exception {
183 List<Resource> expectedResourceList = new ArrayList<>();
184 List<Resource> resultResourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution, null,
185 serviceInstanceId, requestAction);
187 assertEquals(expectedResourceList, resultResourceList);
190 private String readBpmnRequestFromFile(String fileName) throws IOException {
191 return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
194 private void initExecution(String gAction, String bpmnRequest, boolean isAlaCarte) {
195 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
196 execution.setVariable("requestAction", gAction);
197 execution.setVariable("bpmnRequest", bpmnRequest);
198 execution.setVariable("aLaCarte", isAlaCarte);
199 execution.setVariable("apiVersion", "7");
202 private Service getService() {
203 Service service = new Service();
204 List<CollectionResourceCustomization> collectionResourceCustomizations = new ArrayList<>();
205 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
206 collectionResourceCustomization.setModelCustomizationUUID("123");
207 collectionResourceCustomizations.add(collectionResourceCustomization);
208 service.setCollectionResourceCustomizations(collectionResourceCustomizations);
212 private VfModuleCustomization getVfModuleCustomization() {
213 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
214 vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
215 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
216 VfModule vfModule = new VfModule();
217 vfModule.setVolumeHeatTemplate(new HeatTemplate());
218 vfModule.setModelName("helm");
219 vfModule.setModuleHeatTemplate(new HeatTemplate());
220 vfModuleCustomization.setVfModule(vfModule);
221 return vfModuleCustomization;
224 private List<CvnfcCustomization> getCvnfcCustomizations() {
225 ConfigurationResource configurationResource = new ConfigurationResource();
226 configurationResource.setToscaNodeType("FabricConfiguration");
228 CvnfcConfigurationCustomization cvnfcConfigurationCustomization = new CvnfcConfigurationCustomization();
229 cvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
230 CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
232 List<CvnfcConfigurationCustomization> cvnfcConfigurationCustomizations = new ArrayList<>();
233 cvnfcConfigurationCustomizations.add(cvnfcConfigurationCustomization);
234 cvnfcCustomization.setCvnfcConfigurationCustomization(cvnfcConfigurationCustomizations);
236 List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<>();
237 cvnfcCustomizations.add(cvnfcCustomization);
238 return cvnfcCustomizations;