Merge "Fix dateformat for APPC HealthCheck"
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / workflow / tasks / ebb / loader / UserParamsServiceTraversalTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader;
22
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;
51 import java.util.Map;
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;
58
59 public class UserParamsServiceTraversalTest extends BaseTaskTest {
60
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;
71
72     @Before
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";
78     }
79
80     @Test
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());
87
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());
93
94         assertEquals(1, resourceListFromUserParams.size());
95         assertThat(expected, is(result));
96     }
97
98     @Test
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());
105
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());
112
113         assertEquals(5, resourceListFromUserParams.size());
114         assertThat(expected, is(result));
115     }
116
117     @Test
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());
124
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());
131
132         assertEquals(6, resourceListFromUserParams.size());
133         assertThat(expected, is(result));
134         assertEquals(2, resourceListFromUserParams.get(1).getChildren().get(1).getProcessingPriority());
135     }
136
137     @Test
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());
144
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());
150
151         assertEquals(2, resourceListFromUserParams.size());
152         assertThat(expected, is(result));
153     }
154
155     @Test
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());
166
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());
173
174         assertEquals(4, resourceListFromUserParams.size());
175         assertThat(expected, is(result));
176     }
177
178     @Test
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");
185
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());
191
192         assertEquals(2, resourceListFromUserParams.size());
193         assertThat(expected, is(result));
194     }
195
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();
200     }
201
202     @Test
203     public void getResourceListFromUserParamsWhenUserParamsAreNull() throws Exception {
204         List<Resource> expectedResourceList = new ArrayList<>();
205         List<Resource> resultResourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution, null,
206                 serviceInstanceId, requestAction);
207
208         assertEquals(expectedResourceList, resultResourceList);
209     }
210
211     private String readBpmnRequestFromFile(String fileName) throws IOException {
212         return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
213     }
214
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");
221     }
222
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);
230         return service;
231     }
232
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;
243     }
244
245     private List<CvnfcCustomization> getCvnfcCustomizations() {
246         ConfigurationResource configurationResource = new ConfigurationResource();
247         configurationResource.setToscaNodeType("FabricConfiguration");
248
249         CvnfcConfigurationCustomization cvnfcConfigurationCustomization = new CvnfcConfigurationCustomization();
250         cvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
251         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
252
253         List<CvnfcConfigurationCustomization> cvnfcConfigurationCustomizations = new ArrayList<>();
254         cvnfcConfigurationCustomizations.add(cvnfcConfigurationCustomization);
255         cvnfcCustomization.setCvnfcConfigurationCustomization(cvnfcConfigurationCustomizations);
256
257         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<>();
258         cvnfcCustomizations.add(cvnfcCustomization);
259         return cvnfcCustomizations;
260     }
261 }