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_CREATE_JSON = "Macro/ServiceMacroAssignVnfAndPnf.json";
63 private static final String MACRO_ASSIGN_PNF_JSON = "Macro/ServiceMacroAssignPnf.json";
64 private static final String NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
65 private static final String MACRO_CREATE_WITHOUT_RESOURCES_JSON = "Macro/ServiceMacroCreateWithoutResources.json";
66 private static final String serviceInstanceId = "123";
67 private DelegateExecution execution;
68 private CatalogDbClient mockCatalogDbClient;
69 private UserParamsServiceTraversal userParamsServiceTraversal;
70 private String requestAction;
73 public void before() throws Exception {
74 execution = new DelegateExecutionFake();
75 mockCatalogDbClient = mock(CatalogDbClient.class);
76 userParamsServiceTraversal = new UserParamsServiceTraversal(mockCatalogDbClient, mock(ExceptionBuilder.class));
77 requestAction = "assignInstance";
81 public void getResourceListFromUserParams() throws Exception {
82 initExecution(requestAction, readBpmnRequestFromFile(MACRO_CREATE_WITHOUT_RESOURCES_JSON), false);
83 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
84 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
85 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
86 anyString(), anyString());
88 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
89 getUserParams(), serviceInstanceId, requestAction);
90 List<WorkflowType> expected = List.of(WorkflowType.SERVICE);
91 List<WorkflowType> result =
92 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
94 assertEquals(1, resourceListFromUserParams.size());
95 assertThat(expected, is(result));
99 public void getResourceListFromUserParamsForVnfs() throws Exception {
100 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false);
101 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
102 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
103 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
104 anyString(), anyString());
106 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
107 getUserParams(), serviceInstanceId, requestAction);
108 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.VNF, WorkflowType.VOLUMEGROUP,
109 WorkflowType.VFMODULE, WorkflowType.CONFIGURATION);
110 List<WorkflowType> result =
111 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
113 assertEquals(5, resourceListFromUserParams.size());
114 assertThat(expected, is(result));
118 public void getResourceListFromUserParamsForVnfsWithPriorities() throws Exception {
119 initExecution(requestAction, readBpmnRequestFromFile(MACRO_CREATE_JSON), false);
120 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
121 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
122 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
123 anyString(), anyString());
125 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
126 getUserParams(), serviceInstanceId, requestAction);
127 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.VNF, WorkflowType.VOLUMEGROUP,
128 WorkflowType.VFMODULE, WorkflowType.CONFIGURATION, WorkflowType.PNF);
129 List<WorkflowType> result =
130 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
132 assertEquals(6, resourceListFromUserParams.size());
133 assertThat(expected, is(result));
134 assertEquals(2, resourceListFromUserParams.get(1).getChildren().get(1).getProcessingPriority());
138 public void getResourceListFromUserParamsForPnfs() throws Exception {
139 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_PNF_JSON), false);
140 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
141 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
142 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
143 anyString(), anyString());
145 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
146 getUserParams(), serviceInstanceId, requestAction);
147 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.PNF);
148 List<WorkflowType> result =
149 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
151 assertEquals(2, resourceListFromUserParams.size());
152 assertThat(expected, is(result));
156 public void getResourceListFromUserParamsForNetworks() throws Exception {
157 requestAction = "createInstance";
158 initExecution(requestAction, readBpmnRequestFromFile(NETWORK_COLLECTION_JSON), false);
159 Mockito.doReturn(getVfModuleCustomization()).when(mockCatalogDbClient)
160 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
161 Mockito.doReturn(getCvnfcCustomizations()).when(mockCatalogDbClient).getCvnfcCustomization(anyString(),
162 anyString(), anyString());
163 Mockito.doReturn(getService()).when(mockCatalogDbClient).getServiceByID(anyString());
164 Mockito.doReturn(new NetworkCollectionResourceCustomization()).when(mockCatalogDbClient)
165 .getNetworkCollectionResourceCustomizationByID(anyString());
167 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
168 getUserParams(), serviceInstanceId, requestAction);
169 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.NETWORK, WorkflowType.NETWORK,
170 WorkflowType.NETWORKCOLLECTION);
171 List<WorkflowType> result =
172 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
174 assertEquals(4, resourceListFromUserParams.size());
175 assertThat(expected, is(result));
179 public void getResourceListFromUserParamsBuildAndThrowExceptionWhenVfModuleAreEmpty() throws Exception {
180 initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false);
181 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
182 vfModuleCustomization.setVfModule(null);
183 Mockito.doReturn(vfModuleCustomization).when(mockCatalogDbClient)
184 .getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
186 List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution,
187 getUserParams(), serviceInstanceId, requestAction);
188 List<WorkflowType> expected = List.of(WorkflowType.SERVICE, WorkflowType.VNF);
189 List<WorkflowType> result =
190 resourceListFromUserParams.stream().map(Resource::getResourceType).collect(Collectors.toList());
192 assertEquals(2, resourceListFromUserParams.size());
193 assertThat(expected, is(result));
196 private List<Map<String, Object>> getUserParams() throws IOException {
197 String bpmnRequest = (String) execution.getVariable(BBConstants.G_BPMN_REQUEST);
198 ServiceInstancesRequest sIRequest = new ObjectMapper().readValue(bpmnRequest, ServiceInstancesRequest.class);
199 return sIRequest.getRequestDetails().getRequestParameters().getUserParams();
203 public void getResourceListFromUserParamsWhenUserParamsAreNull() throws Exception {
204 List<Resource> expectedResourceList = new ArrayList<>();
205 List<Resource> resultResourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution, null,
206 serviceInstanceId, requestAction);
208 assertEquals(expectedResourceList, resultResourceList);
211 private String readBpmnRequestFromFile(String fileName) throws IOException {
212 return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
215 private void initExecution(String gAction, String bpmnRequest, boolean isAlaCarte) {
216 execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
217 execution.setVariable("requestAction", gAction);
218 execution.setVariable("bpmnRequest", bpmnRequest);
219 execution.setVariable("aLaCarte", isAlaCarte);
220 execution.setVariable("apiVersion", "7");
223 private Service getService() {
224 Service service = new Service();
225 List<CollectionResourceCustomization> collectionResourceCustomizations = new ArrayList<>();
226 CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
227 collectionResourceCustomization.setModelCustomizationUUID("123");
228 collectionResourceCustomizations.add(collectionResourceCustomization);
229 service.setCollectionResourceCustomizations(collectionResourceCustomizations);
233 private VfModuleCustomization getVfModuleCustomization() {
234 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
235 vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
236 vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
237 VfModule vfModule = new VfModule();
238 vfModule.setVolumeHeatTemplate(new HeatTemplate());
239 vfModule.setModelName("helm");
240 vfModule.setModuleHeatTemplate(new HeatTemplate());
241 vfModuleCustomization.setVfModule(vfModule);
242 return vfModuleCustomization;
245 private List<CvnfcCustomization> getCvnfcCustomizations() {
246 ConfigurationResource configurationResource = new ConfigurationResource();
247 configurationResource.setToscaNodeType("FabricConfiguration");
249 CvnfcConfigurationCustomization cvnfcConfigurationCustomization = new CvnfcConfigurationCustomization();
250 cvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
251 CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
253 List<CvnfcConfigurationCustomization> cvnfcConfigurationCustomizations = new ArrayList<>();
254 cvnfcConfigurationCustomizations.add(cvnfcConfigurationCustomization);
255 cvnfcCustomization.setCvnfcConfigurationCustomization(cvnfcConfigurationCustomizations);
257 List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<>();
258 cvnfcCustomizations.add(cvnfcCustomization);
259 return cvnfcCustomizations;