100c32f1c2e2844907887f8e32583499d2d07b81
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Modifications Copyright (c) 2020 Nokia
10  * ================================================================================
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  * 
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  * 
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.so.bpmn.infrastructure.workflow.tasks;
26
27 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
28 import static org.hamcrest.CoreMatchers.containsString;
29 import static org.hamcrest.CoreMatchers.equalTo;
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertNotNull;
33 import static org.junit.Assert.assertNull;
34 import static org.junit.Assert.assertThat;
35 import static org.junit.Assert.assertTrue;
36 import static org.junit.Assert.fail;
37 import static org.mockito.ArgumentMatchers.any;
38 import static org.mockito.ArgumentMatchers.anyList;
39 import static org.mockito.ArgumentMatchers.anyObject;
40 import static org.mockito.ArgumentMatchers.anyString;
41 import static org.mockito.ArgumentMatchers.eq;
42 import static org.mockito.ArgumentMatchers.isA;
43 import static org.mockito.Mockito.doReturn;
44 import static org.mockito.Mockito.doThrow;
45 import static org.mockito.Mockito.when;
46 import com.fasterxml.jackson.databind.DeserializationFeature;
47 import com.fasterxml.jackson.databind.ObjectMapper;
48 import java.io.IOException;
49 import java.net.MalformedURLException;
50 import java.nio.file.Files;
51 import java.nio.file.Paths;
52 import java.util.ArrayList;
53 import java.util.Arrays;
54 import java.util.List;
55 import java.util.Optional;
56 import java.util.UUID;
57 import org.camunda.bpm.engine.delegate.BpmnError;
58 import org.camunda.bpm.engine.delegate.DelegateExecution;
59 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
60 import org.javatuples.Pair;
61 import org.junit.Before;
62 import org.junit.Ignore;
63 import org.junit.Rule;
64 import org.junit.Test;
65 import org.junit.rules.ExpectedException;
66 import org.mockito.InjectMocks;
67 import org.mockito.Mock;
68 import org.mockito.Spy;
69 import org.onap.aai.domain.yang.Relationship;
70 import org.onap.aai.domain.yang.RelationshipList;
71 import org.onap.aai.domain.yang.ServiceInstance;
72 import org.onap.aai.domain.yang.VfModule;
73 import org.onap.aai.domain.yang.VolumeGroup;
74 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
75 import org.onap.aaiclient.client.aai.entities.Relationships;
76 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
77 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
78 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
79 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types;
80 import org.onap.so.bpmn.BaseTaskTest;
81 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
82 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
83 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
84 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
85 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
86 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
87 import org.onap.so.client.orchestration.AAIEntityNotFoundException;
88 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
89 import org.onap.so.db.catalog.beans.CollectionResource;
90 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
91 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
92 import org.onap.so.db.catalog.beans.ConfigurationResource;
93 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
94 import org.onap.so.db.catalog.beans.CvnfcCustomization;
95 import org.onap.so.db.catalog.beans.HeatEnvironment;
96 import org.onap.so.db.catalog.beans.HeatTemplate;
97 import org.onap.so.db.catalog.beans.InstanceGroup;
98 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
99 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
100 import org.onap.so.db.catalog.beans.Service;
101 import org.onap.so.db.catalog.beans.VfModuleCustomization;
102 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
103 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
104 import org.onap.so.serviceinstancebeans.RequestDetails;
105 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
106 import org.springframework.core.env.Environment;
107
108 public class WorkflowActionTest extends BaseTaskTest {
109
110     private static final String MACRO_ACTIVATE_DELETE_UNASSIGN_JSON = "Macro/ServiceMacroActivateDeleteUnassign.json";
111     private static final String MACRO_ASSIGN_JSON = "Macro/ServiceMacroAssign.json";
112     private static final String MACRO_ASSIGN_NO_CLOUD_JSON = "Macro/ServiceMacroAssignNoCloud.json";
113     private static final String VF_MODULE_CREATE_WITH_FABRIC_JSON = "VfModuleCreateWithFabric.json";
114     private static final String VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON =
115             "VfModuleReplaceRebuildVolumeGroups.json";
116     private static final String MACRO_CREATE_NETWORK_COLLECTION_JSON = "Macro/CreateNetworkCollection.json";
117     private static final String MACRO_VNF_MACRO_REPLACE_JSON = "Macro/VnfMacroReplace.json";
118
119     @Mock
120     protected Environment environment;
121     @Mock
122     protected UserParamsServiceTraversal userParamsServiceTraversal;
123
124     @Mock
125     private AaiResourceIdValidator aaiResourceIdValidator;
126     @InjectMocks
127     protected WorkflowAction workflowAction;
128
129     private DelegateExecution execution;
130
131     @InjectMocks
132     @Spy
133     protected WorkflowAction SPY_workflowAction;
134
135     @Spy
136     protected ExecuteBuildingBlockBuilder executeBuildingBlockBuilder;
137
138     @Rule
139     public ExpectedException thrown = ExpectedException.none();
140
141     private String RESOURCE_PATH = "src/test/resources/__files/";
142
143     private List<OrchestrationFlow> replaceVfModuleOrchFlows =
144             createFlowList("DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
145                     "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
146                     "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
147                     "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
148     private List<OrchestrationFlow> replaceRetainAssignmentsVfModuleOrchFlows = createFlowList("DeactivateVfModuleBB",
149             "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "UnassignVolumeGroupBB",
150             "AssignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
151             "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
152     private List<OrchestrationFlow> replaceVfModuleWithFabricOrchFlows = createFlowList("DeleteFabricConfigurationBB",
153             "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB",
154             "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "AssignVfModuleBB",
155             "CreateVfModuleBB", "ActivateVfModuleBB", "AddFabricConfigurationBB", "CreateVolumeGroupBB",
156             "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
157
158     @Before
159     public void before() throws Exception {
160         execution = new DelegateExecutionFake();
161         org.onap.aai.domain.yang.ServiceInstance servInstance = new org.onap.aai.domain.yang.ServiceInstance();
162         servInstance.setServiceInstanceId("TEST");
163         when(bbSetupUtils.getAAIServiceInstanceByName(anyString(), anyObject())).thenReturn(servInstance);
164         workflowAction.setBbInputSetupUtils(bbSetupUtils);
165         workflowAction.setBbInputSetup(bbInputSetup);
166
167     }
168
169     /**
170      * ALACARTE TESTS
171      */
172     @Test
173     public void selectExecutionListALaCarteNetworkCreateTest() throws Exception {
174         String gAction = "createInstance";
175         String resource = "Network";
176         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
177         initExecution(gAction, bpmnRequest, true);
178         execution.setVariable("requestUri", "v6/networks/123");
179
180         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
181         List<OrchestrationFlow> orchFlows =
182                 createFlowList("AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
183         northBoundRequest.setOrchestrationFlowList(orchFlows);
184
185         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
186                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
187
188         workflowAction.selectExecutionList(execution);
189         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
190         assertEqualsBulkFlowName(ebbs, "AssignNetwork1802BB", "CreateNetworkBB", "ActivateNetworkBB");
191     }
192
193     @Test
194     public void selectExecutionListALaCarteNetworkDeleteTest() throws Exception {
195         String gAction = "deleteInstance";
196         String resource = "Network";
197         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
198         initExecution(gAction, bpmnRequest, true);
199         execution.setVariable("requestUri", "v6/networks/123");
200
201         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
202         List<OrchestrationFlow> orchFlows =
203                 createFlowList("DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
204         northBoundRequest.setOrchestrationFlowList(orchFlows);
205
206         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
207                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
208
209         workflowAction.selectExecutionList(execution);
210         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
211         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetwork1802BB");
212     }
213
214     @Test
215     public void selectExecutionListALaCarteServiceCreateTest() throws Exception {
216         String gAction = "createInstance";
217         String resource = "Service";
218         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
219         initExecution(gAction, bpmnRequest, true);
220         execution.setVariable("requestUri", "v6/serviceInstances/123");
221
222
223         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
224         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "ActivateServiceInstanceBB");
225         northBoundRequest.setOrchestrationFlowList(orchFlows);
226
227         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
228                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
229
230         workflowAction.selectExecutionList(execution);
231         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
232         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
233     }
234
235     @Test
236     public void selectExecutionListDuplicateNameExceptionTest() throws Exception {
237         String gAction = "createInstance";
238         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
239         initExecution(gAction, bpmnRequest, true);
240         execution.setVariable("requestUri", "v6/serviceInstances");
241
242         doThrow(new DuplicateNameException(
243                 "serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique."))
244                         .when(aaiResourceIdValidator).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE),
245                                 eq("test"), any(RequestDetails.class), any(WorkflowResourceIds.class));
246
247         SPY_workflowAction.selectExecutionList(execution);
248         assertEquals(execution.getVariable("WorkflowActionErrorMessage"),
249                 "Exception while setting execution list. serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique.");
250
251         // verify default values are present in failure case
252         assertEquals(true, execution.getVariable("isTopLevelFlow"));
253         assertEquals(false, execution.getVariable("sentSyncResponse"));
254     }
255
256     /**
257      * SERVICE MACRO TESTS
258      */
259     @Test
260     public void selectExecutionListServiceMacroAssignTest() throws Exception {
261         String gAction = "assignInstance";
262         String resource = "Service";
263         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
264         initExecution(gAction, bpmnRequest, false);
265         execution.setVariable("requestUri", "v6/serviceInstances/123");
266
267         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
268         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
269                 "AssignVolumeGroupBB", "AssignVfModuleBB");
270         northBoundRequest.setOrchestrationFlowList(orchFlows);
271
272         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
273         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
274         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
275         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
276         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
277         HeatTemplate volumeHeatTemplate = new HeatTemplate();
278         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
279         vfModuleCustomization.setVfModule(vfModule);
280
281         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
282         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
283         HeatEnvironment heatEnvironment = new HeatEnvironment();
284         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
285         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
286         HeatTemplate moduleHeatTemplate = new HeatTemplate();
287         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
288         vfModuleCustomization2.setVfModule(vfModule2);
289
290         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
291         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
292
293         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
294                 .thenReturn(prepareListWithResources());
295         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
296                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
297         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
298                 .thenReturn(vfModuleCustomization);
299         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
300                 .thenReturn(vfModuleCustomization2);
301         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
302                 .thenReturn(vfModuleCustomization3);
303
304         workflowAction.selectExecutionList(execution);
305         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
306         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
307                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
308     }
309
310     @Test
311     public void selectExecutionListServiceMacroAssignNoCloudTest() throws Exception {
312         String gAction = "assignInstance";
313         String resource = "Service";
314         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_NO_CLOUD_JSON);
315         initExecution(gAction, bpmnRequest, false);
316         execution.setVariable("requestUri", "v6/serviceInstances/123");
317
318         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
319         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "AssignNetworkBB", "AssignVnfBB",
320                 "AssignVolumeGroupBB", "AssignVfModuleBB");
321         northBoundRequest.setOrchestrationFlowList(orchFlows);
322
323         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
324         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
325         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
326         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
327         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
328         HeatTemplate volumeHeatTemplate = new HeatTemplate();
329         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
330         vfModuleCustomization.setVfModule(vfModule);
331
332         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
333         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
334         HeatEnvironment heatEnvironment = new HeatEnvironment();
335         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
336         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
337         HeatTemplate moduleHeatTemplate = new HeatTemplate();
338         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
339         vfModuleCustomization2.setVfModule(vfModule2);
340
341         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
342         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
343
344         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
345                 .thenReturn(prepareListWithResources());
346         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
347         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
348                 false, "att-aic")).thenReturn(northBoundRequest);
349         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
350                 .thenReturn(vfModuleCustomization);
351         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
352                 .thenReturn(vfModuleCustomization2);
353         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
354                 .thenReturn(vfModuleCustomization3);
355         workflowAction.selectExecutionList(execution);
356         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
357         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
358                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB");
359     }
360
361     @Test
362     public void selectExecutionListServiceMacroActivateTest() throws Exception {
363         String gAction = "activateInstance";
364         String resource = "Service";
365         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
366         initExecution(gAction, bpmnRequest, false);
367         execution.setVariable("requestUri", "v6/serviceInstances/si0");
368
369         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
370         List<OrchestrationFlow> orchFlows =
371                 createFlowList("CreateNetworkBB", "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
372                         "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "ActivateServiceInstanceBB");
373         northBoundRequest.setOrchestrationFlowList(orchFlows);
374
375         ServiceInstance serviceInstanceAAI = new ServiceInstance();
376         serviceInstanceAAI.setServiceInstanceId("si0");
377         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
378                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
379         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
380                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
381         vnf.setVnfId("vnf0");
382
383         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
384         vnf.getVfModules().add(vfModule);
385         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
386         vnf.getVfModules().add(vfModule2);
387
388         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
389                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
390         volumeGroup.setVolumeGroupId("volumeGroup0");
391         vnf.getVolumeGroups().add(volumeGroup);
392
393         serviceInstanceMSO.getVnfs().add(vnf);
394
395         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
396         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
397         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
398                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
399         workflowAction.selectExecutionList(execution);
400         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
401         assertEqualsBulkFlowName(ebbs, "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
402                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
403                 "ActivateServiceInstanceBB");
404         assertEquals("volumeGroup0", ebbs.get(0).getWorkflowResourceIds().getVolumeGroupId());
405         assertEquals("volumeGroup0", ebbs.get(1).getWorkflowResourceIds().getVolumeGroupId());
406         assertEquals("testVfModuleId1", ebbs.get(2).getWorkflowResourceIds().getVfModuleId());
407         assertEquals("testVfModuleId2", ebbs.get(3).getWorkflowResourceIds().getVfModuleId());
408         assertEquals("testVfModuleId1", ebbs.get(4).getWorkflowResourceIds().getVfModuleId());
409         assertEquals("testVfModuleId2", ebbs.get(5).getWorkflowResourceIds().getVfModuleId());
410         assertEquals("vnf0", ebbs.get(6).getWorkflowResourceIds().getVnfId());
411         assertEquals("si0", ebbs.get(7).getWorkflowResourceIds().getServiceInstanceId());
412     }
413
414     @Test
415     public void selectExecutionListServiceMacroDeactivateTest() throws Exception {
416         String gAction = "deactivateInstance";
417         String resource = "Service";
418         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
419         initExecution(gAction, bpmnRequest, false);
420         execution.setVariable("requestUri", "v6/serviceInstances/123");
421
422         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
423         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateServiceInstanceBB");
424         northBoundRequest.setOrchestrationFlowList(orchFlows);
425
426         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
427                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
428         workflowAction.selectExecutionList(execution);
429         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
430         assertEquals(ebbs.get(0).getBuildingBlock().getBpmnFlowName(), "DeactivateServiceInstanceBB");
431     }
432
433     @Test
434     public void selectExecutionListServiceMacroEmptyServiceTest() throws Exception {
435         String gAction = "createInstance";
436         String resource = "Service";
437         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
438         initExecution(gAction, bpmnRequest, false);
439         execution.setVariable("requestUri", "v6/serviceInstances/123");
440
441         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
442         northBoundRequest.setIsToplevelflow(true);
443         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
444                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
445                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
446                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
447                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
448         northBoundRequest.setOrchestrationFlowList(orchFlows);
449
450         Service service = new Service();
451         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
452         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
453                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
454         workflowAction.selectExecutionList(execution);
455         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
456         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "ActivateServiceInstanceBB");
457     }
458
459     @Test
460     public void selectExecutionListServiceMacroCreateJustNetworkTest() throws Exception {
461         String gAction = "createInstance";
462         String resource = "Service";
463         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
464         initExecution(gAction, bpmnRequest, false);
465         execution.setVariable("requestUri", "v6/serviceInstances/123");
466
467         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
468         northBoundRequest.setIsToplevelflow(true);
469         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
470                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
471                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
472                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
473                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
474         northBoundRequest.setOrchestrationFlowList(orchFlows);
475
476         Service service = new Service();
477         NetworkResourceCustomization networkCustomization = new NetworkResourceCustomization();
478         networkCustomization.setModelCustomizationUUID("1234");
479         service.getNetworkCustomizations().add(networkCustomization);
480         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
481         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
482                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
483
484         workflowAction.selectExecutionList(execution);
485         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
486         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignNetworkBB", "CreateNetworkBB",
487                 "ActivateNetworkBB", "ActivateServiceInstanceBB");
488     }
489
490     @Test
491     public void selectExecutionListServiceMacroCreateWithNetworkCollectionTest() throws Exception {
492         String gAction = "createInstance";
493         String resource = "Service";
494         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
495         initExecution(gAction, bpmnRequest, false);
496         execution.setVariable("requestUri", "v6/serviceInstances/123");
497
498         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
499         northBoundRequest.setIsToplevelflow(true);
500         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
501                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
502                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
503                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
504                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
505         northBoundRequest.setOrchestrationFlowList(orchFlows);
506
507         Service service = new Service();
508         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
509         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
510         networkCust.setModelCustomizationUUID("123");
511         networkCustomizations.add(networkCust);
512         service.setNetworkCustomizations(networkCustomizations);
513         NetworkCollectionResourceCustomization collectionResourceCustomization =
514                 new NetworkCollectionResourceCustomization();
515         collectionResourceCustomization.setModelCustomizationUUID("123");
516
517         CollectionResource collectionResource = new CollectionResource();
518         collectionResource.setToscaNodeType("NetworkCollection");
519         InstanceGroup instanceGroup = new InstanceGroup();
520         instanceGroup.setToscaNodeType("NetworkCollectionResource");
521         instanceGroup.setCollectionNetworkResourceCustomizations(new ArrayList<>());
522         CollectionNetworkResourceCustomization collectionNetworkResourceCust =
523                 new CollectionNetworkResourceCustomization();
524         collectionNetworkResourceCust.setModelCustomizationUUID("123");
525         collectionNetworkResourceCust.setNetworkResourceCustomization(collectionResourceCustomization);
526         instanceGroup.getCollectionNetworkResourceCustomizations().add(collectionNetworkResourceCust);
527         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
528         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
529                 new CollectionResourceInstanceGroupCustomization();
530         collectionInstanceGroupCustomization.setModelCustomizationUUID("123");
531         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
532         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
533         collectionInstanceGroupCustomization.setInstanceGroup(instanceGroup);
534         collectionInstanceGroupCustomization.setCollectionResourceCust(collectionResourceCustomization);
535         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
536         collectionResource.setInstanceGroup(instanceGroup);
537         collectionResourceCustomization.setCollectionResource(collectionResource);;
538         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
539         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
540         doReturn(collectionResourceCustomization).when(catalogDbClient)
541                 .getNetworkCollectionResourceCustomizationByID("123");
542         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
543                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
544         workflowAction.selectExecutionList(execution);
545         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
546         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "CreateNetworkCollectionBB", "AssignNetworkBB",
547                 "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
548                 "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB",
549                 "ActivateServiceInstanceBB");
550         assertEquals("Network id not empty", !ebbs.get(2).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
551         assertEquals("Network id not empty", !ebbs.get(3).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
552         assertEquals("Network id not empty", !ebbs.get(4).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
553         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
554                 ebbs.get(2).getWorkflowResourceIds().getNetworkId() == ebbs.get(3).getWorkflowResourceIds()
555                         .getNetworkId()
556                         && ebbs.get(3).getWorkflowResourceIds().getNetworkId() == ebbs.get(4).getWorkflowResourceIds()
557                                 .getNetworkId(),
558                 true);
559         assertEquals("Network id not empty", !ebbs.get(5).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
560         assertEquals("Network id not empty", !ebbs.get(6).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
561         assertEquals("Network id not empty", !ebbs.get(7).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
562         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
563                 ebbs.get(5).getWorkflowResourceIds().getNetworkId() == ebbs.get(6).getWorkflowResourceIds()
564                         .getNetworkId()
565                         && ebbs.get(6).getWorkflowResourceIds().getNetworkId() == ebbs.get(7).getWorkflowResourceIds()
566                                 .getNetworkId(),
567                 true);
568         assertEquals("Network id not empty", !ebbs.get(8).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
569         assertEquals("Network id not empty", !ebbs.get(9).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
570         assertEquals("Network id not empty", !ebbs.get(10).getWorkflowResourceIds().getNetworkId().isEmpty(), true);
571         assertEquals("Network id same for AssignNetworkBB CreateNetworkBB ActivateNetworkBB",
572                 ebbs.get(8).getWorkflowResourceIds().getNetworkId() == ebbs.get(9).getWorkflowResourceIds()
573                         .getNetworkId()
574                         && ebbs.get(9).getWorkflowResourceIds().getNetworkId() == ebbs.get(10).getWorkflowResourceIds()
575                                 .getNetworkId(),
576                 true);
577     }
578
579     @Test
580     public void selectExecutionListServiceMacroCreateWithUserParams() throws Exception {
581         String gAction = "createInstance";
582         String resource = "Service";
583         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
584         initExecution(gAction, bpmnRequest, false);
585         execution.setVariable("requestUri", "v6/serviceInstances/123");
586
587         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
588         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB", "CreateNetworkCollectionBB",
589                 "AssignNetworkBB", "AssignVnfBB", "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateNetworkBB",
590                 "ActivateNetworkBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
591                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB",
592                 "ActivateNetworkCollectionBB", "ActivateServiceInstanceBB");
593         northBoundRequest.setOrchestrationFlowList(orchFlows);
594
595         Service service = new Service();
596         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
597
598         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
599         vfModuleCustomization.setModelCustomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
600         HeatEnvironment volumeHeatEnv = new HeatEnvironment();
601         vfModuleCustomization.setVolumeHeatEnv(volumeHeatEnv);
602         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
603         HeatTemplate volumeHeatTemplate = new HeatTemplate();
604         vfModule.setVolumeHeatTemplate(volumeHeatTemplate);
605         vfModuleCustomization.setVfModule(vfModule);
606
607         VfModuleCustomization vfModuleCustomization2 = new VfModuleCustomization();
608         vfModuleCustomization2.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
609         HeatEnvironment heatEnvironment = new HeatEnvironment();
610         vfModuleCustomization2.setHeatEnvironment(heatEnvironment);
611         org.onap.so.db.catalog.beans.VfModule vfModule2 = new org.onap.so.db.catalog.beans.VfModule();
612         HeatTemplate moduleHeatTemplate = new HeatTemplate();
613         vfModule2.setModuleHeatTemplate(moduleHeatTemplate);
614         vfModuleCustomization2.setVfModule(vfModule2);
615
616         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
617         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
618
619         when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
620                 .thenReturn(prepareListWithResources());
621         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
622                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
623         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
624                 .thenReturn(vfModuleCustomization);
625         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8"))
626                 .thenReturn(vfModuleCustomization2);
627         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("da4d4327-fb7d-4311-ac7a-be7ba60cf969"))
628                 .thenReturn(vfModuleCustomization3);
629         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
630         workflowAction.selectExecutionList(execution);
631         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
632         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB", "AssignVnfBB", "AssignVolumeGroupBB",
633                 "AssignVfModuleBB", "AssignVfModuleBB", "AssignVfModuleBB", "CreateVolumeGroupBB",
634                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
635                 "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
636                 "ActivateServiceInstanceBB");
637
638         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
639         int randomUUIDLength = UUID.randomUUID().toString().length();
640         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
641         assertEquals(randomUUIDLength, ebbs.get(2).getWorkflowResourceIds().getVolumeGroupId().length());
642         assertEquals(randomUUIDLength, ebbs.get(3).getWorkflowResourceIds().getVfModuleId().length());
643         assertEquals(randomUUIDLength, ebbs.get(4).getWorkflowResourceIds().getVfModuleId().length());
644         assertEquals(randomUUIDLength, ebbs.get(5).getWorkflowResourceIds().getVfModuleId().length());
645         assertEquals(randomUUIDLength, ebbs.get(6).getWorkflowResourceIds().getVolumeGroupId().length());
646         assertEquals(randomUUIDLength, ebbs.get(7).getWorkflowResourceIds().getVolumeGroupId().length());
647         assertEquals(randomUUIDLength, ebbs.get(8).getWorkflowResourceIds().getVfModuleId().length());
648         assertEquals(randomUUIDLength, ebbs.get(9).getWorkflowResourceIds().getVfModuleId().length());
649         assertEquals(randomUUIDLength, ebbs.get(10).getWorkflowResourceIds().getVfModuleId().length());
650         assertEquals(randomUUIDLength, ebbs.get(11).getWorkflowResourceIds().getVfModuleId().length());
651         assertEquals(randomUUIDLength, ebbs.get(12).getWorkflowResourceIds().getVfModuleId().length());
652         assertEquals(randomUUIDLength, ebbs.get(13).getWorkflowResourceIds().getVfModuleId().length());
653         assertEquals(randomUUIDLength, ebbs.get(14).getWorkflowResourceIds().getVnfId().length());
654         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
655         assertEquals(true, execution.getVariable("homing"));
656     }
657
658     @Test
659     public void selectExecutionListServiceMacroDeleteTest() throws Exception {
660         String gAction = "deleteInstance";
661         String resource = "Service";
662         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
663         initExecution(gAction, bpmnRequest, false);
664         execution.setVariable("requestUri", "v6/serviceInstances/123");
665
666         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
667         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
668                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
669                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
670                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
671                 "UnassignServiceInstanceBB");
672         northBoundRequest.setOrchestrationFlowList(orchFlows);
673
674         ServiceInstance serviceInstanceAAI = new ServiceInstance();
675         serviceInstanceAAI.setServiceInstanceId("aaisi123");
676         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
677                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
678         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
679                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
680         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
681                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
682         vnf.setVnfId("vnfId123");
683         pnf.setPnfId("pnfId123");
684
685         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
686         vnf.getVfModules().add(vfModule);
687         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
688         vnf.getVfModules().add(vfModule2);
689
690         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
691                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
692         volumeGroup.setVolumeGroupId("vg123");
693         vnf.getVolumeGroups().add(volumeGroup);
694
695         serviceInstanceMSO.getVnfs().add(vnf);
696         serviceInstanceMSO.getPnfs().add(pnf);
697
698         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
699         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
700         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
701                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
702         workflowAction.selectExecutionList(execution);
703         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
704         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
705                 "DeleteVfModuleBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB",
706                 "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB", "UnassignVfModuleBB",
707                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignServiceInstanceBB");
708     }
709
710     @Test
711     public void selectExecutionListServiceMacroDeleteWithPnfTest() throws Exception {
712         String gAction = "deleteInstance";
713         String resource = "Service";
714         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
715         initExecution(gAction, bpmnRequest, false);
716         execution.setVariable("requestUri", "v6/serviceInstances/123");
717
718         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
719         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
720                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivatePnfBB",
721                 "DeactivateNetworkBB", "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB",
722                 "UnassignVfModuleBB", "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB",
723                 "UnassignServiceInstanceBB");
724         northBoundRequest.setOrchestrationFlowList(orchFlows);
725
726         ServiceInstance serviceInstanceAAI = new ServiceInstance();
727         serviceInstanceAAI.setServiceInstanceId("aaisi123");
728         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
729                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
730         org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf =
731                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf();
732         pnf.setPnfId("pnfId123");
733
734         serviceInstanceMSO.getPnfs().add(pnf);
735
736         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
737         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
738         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
739                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
740         workflowAction.selectExecutionList(execution);
741         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
742         assertEqualsBulkFlowName(ebbs, "DeactivatePnfBB", "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
743     }
744
745     @Test
746     public void selectExecutionListServiceMacroUnassignTest() throws Exception {
747         String gAction = "unassignInstance";
748         String resource = "Service";
749         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
750         initExecution(gAction, bpmnRequest, false);
751         execution.setVariable("requestUri", "v6/serviceInstances/123");
752
753         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
754         List<OrchestrationFlow> orchFlows = createFlowList("UnassignVfModuleBB", "UnassignVolumeGroupBB",
755                 "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
756         northBoundRequest.setOrchestrationFlowList(orchFlows);
757
758         ServiceInstance serviceInstanceAAI = new ServiceInstance();
759         serviceInstanceAAI.setServiceInstanceId("aaisi123");
760         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
761                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
762         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
763                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
764         vnf.setVnfId("vnfId123");
765
766         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule = buildVfModule();
767         vnf.getVfModules().add(vfModule);
768         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 = buildVfModule();
769         vnf.getVfModules().add(vfModule2);
770
771         org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup volumeGroup =
772                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup();
773         volumeGroup.setVolumeGroupId("vg123");
774         vnf.getVolumeGroups().add(volumeGroup);
775
776         serviceInstanceMSO.getVnfs().add(vnf);
777
778         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
779         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
780         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
781                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
782         workflowAction.selectExecutionList(execution);
783         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
784         assertEqualsBulkFlowName(ebbs, "UnassignVfModuleBB", "UnassignVfModuleBB", "UnassignVolumeGroupBB",
785                 "UnassignVnfBB", "UnassignServiceInstanceBB");
786     }
787
788     @Test
789     public void selectExecutionListServiceMacroDeleteNetworkCollectionTest() throws Exception {
790         String gAction = "deleteInstance";
791         String resource = "Service";
792         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
793         initExecution(gAction, bpmnRequest, false);
794         execution.setVariable("requestUri", "v6/serviceInstances/123");
795
796         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
797         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
798                 "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "DeactivateVnfBB", "DeactivateNetworkBB",
799                 "DeleteNetworkBB", "DeleteNetworkCollectionBB", "DeactivateServiceInstanceBB", "UnassignVfModuleBB",
800                 "UnassignVolumeGroupBB", "UnassignVnfBB", "UnassignNetworkBB", "UnassignServiceInstanceBB");
801         northBoundRequest.setOrchestrationFlowList(orchFlows);
802
803         ServiceInstance serviceInstanceAAI = new ServiceInstance();
804         serviceInstanceAAI.setServiceInstanceId("aaisi123");
805         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
806                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
807
808         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network =
809                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
810         network.setNetworkId("123");
811         serviceInstanceMSO.getNetworks().add(network);
812         org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network2 =
813                 new org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network();
814         network2.setNetworkId("321");
815         serviceInstanceMSO.getNetworks().add(network2);
816
817         Collection collection = new Collection();
818         serviceInstanceMSO.setCollection(collection);
819
820         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
821         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
822         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
823                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
824         workflowAction.selectExecutionList(execution);
825         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
826         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
827                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeleteNetworkCollectionBB",
828                 "DeactivateServiceInstanceBB", "UnassignServiceInstanceBB");
829     }
830
831     @Test
832     public void selectExecutionListVnfMacroRecreateTest() throws Exception {
833         String gAction = "recreateInstance";
834         String resource = "Vnf";
835         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
836         initExecution(gAction, bpmnRequest, false);
837         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/recreate");
838         execution.setVariable("serviceInstanceId", "123");
839         execution.setVariable("vnfId", "1234");
840
841         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
842         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
843                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
844                 "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB",
845                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
846                 "AAIUnsetVnfInMaintBB");
847         northBoundRequest.setOrchestrationFlowList(orchFlows);
848
849         ServiceInstance serviceInstanceAAI = new ServiceInstance();
850         serviceInstanceAAI.setServiceInstanceId("123");
851         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
852                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
853         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
854                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
855         vnf.setVnfId("1234");
856
857         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
858                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
859         vfModule.setVfModuleId("vfModule1");
860         vnf.getVfModules().add(vfModule);
861         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
862                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
863         vfModule2.setVfModuleId("vfModule2");
864         vnf.getVfModules().add(vfModule2);
865
866         serviceInstanceMSO.getVnfs().add(vnf);
867
868         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
869         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
870         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
871                 false, "cloud-owner")).thenReturn(northBoundRequest);
872         workflowAction.selectExecutionList(execution);
873         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
874         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateVfModuleBB",
875                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "DeleteVfModuleBB", "DeactivateVnfBB", "CreateVfModuleBB",
876                 "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB", "SDNOVnfHealthCheckBB",
877                 "AAIUnsetVnfInMaintBB");
878     }
879
880     @Test
881     public void selectExecutionListVnfMacroReplaceTest() throws Exception {
882         String gAction = "replaceInstance";
883         String resource = "Vnf";
884         String bpmnRequest = readBpmnRequestFromFile(MACRO_VNF_MACRO_REPLACE_JSON);
885         initExecution(gAction, bpmnRequest, false);
886         execution.setVariable("requestUri", "v7/serviceInstances/123/vnfs/1234/replace");
887         execution.setVariable("serviceInstanceId", "123");
888         execution.setVariable("vnfId", "1234");
889
890         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
891         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
892                 "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB", "DeactivateVfModuleBB",
893                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
894                 "ActivateVfModuleBB", "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB",
895                 "ChangeModelVnfBB", "ActivateVnfBB", "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB",
896                 "AAIUnsetVnfInMaintBB");
897         northBoundRequest.setOrchestrationFlowList(orchFlows);
898
899         ServiceInstance serviceInstanceAAI = new ServiceInstance();
900         serviceInstanceAAI.setServiceInstanceId("123");
901         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstanceMSO =
902                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
903         org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf vnf =
904                 new org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf();
905         vnf.setVnfId("1234");
906         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
907                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
908         vfModule.setVfModuleId("vfModule1");
909         vnf.getVfModules().add(vfModule);
910         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule2 =
911                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
912         vfModule2.setVfModuleId("vfModule2");
913         vnf.getVfModules().add(vfModule2);
914         serviceInstanceMSO.getVnfs().add(vnf);
915         VfModule vfModuleAAI = new VfModule();
916         vfModuleAAI.setVfModuleId("vfModule2");
917         RelationshipList relationshipList = new RelationshipList();
918         Relationship relationship = new Relationship();
919         relationshipList.getRelationship().add(relationship);
920         vfModuleAAI.setRelationshipList(relationshipList);
921         Relationships relationships = new Relationships("abc");
922         Configuration config = new Configuration();
923         config.setConfigurationId("configId");
924         Optional<Configuration> configOp = Optional.of(config);
925         Optional<Relationships> relationshipsOp = Optional.of(relationships);
926
927         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
928         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
929         doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
930         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
931         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
932         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
933                 false, "cloud-owner")).thenReturn(northBoundRequest);
934         workflowAction.selectExecutionList(execution);
935         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
936         assertEqualsBulkFlowName(ebbs, "AAICheckVnfInMaintBB", "AAISetVnfInMaintBB", "DeactivateFabricConfigurationBB",
937                 "UnassignFabricConfigurationBB", "DeactivateVfModuleBB", "DeactivateVfModuleBB", "DeleteVfModuleBB",
938                 "DeleteVfModuleBB", "DeactivateVnfBB", "ChangeModelVfModuleBB", "ChangeModelVfModuleBB",
939                 "CreateVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB",
940                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "ChangeModelVnfBB", "ActivateVnfBB",
941                 "ChangeModelServiceInstanceBB", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
942         for (ExecuteBuildingBlock executeBuildingBlock : ebbs) {
943             assertEquals("123", executeBuildingBlock.getWorkflowResourceIds().getServiceInstanceId());
944         }
945     }
946
947     @Ignore
948     @Test
949     public void selectExecutionListNetworkCollectionMacroCreate() throws Exception {
950         String gAction = "createInstance";
951         String resource = "NetworkCollection";
952         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
953         initExecution(gAction, bpmnRequest, false);
954         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
955
956         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
957         List<OrchestrationFlow> orchFlows = createFlowList("CreateNetworkCollectionBB", "AssignNetworkBB",
958                 "CreateNetworkBB", "ActivateNetworkBB", "ActivateNetworkCollectionBB");
959         northBoundRequest.setOrchestrationFlowList(orchFlows);
960
961         Service service = new Service();
962         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
963         CollectionResource collectionResource = new CollectionResource();
964         collectionResource.setToscaNodeType("Data NetworkCollection Data");
965         collectionResourceCustomization.setCollectionResource(collectionResource);
966         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
967
968         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
969                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
970         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
971         workflowAction.selectExecutionList(execution);
972         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
973         assertEqualsBulkFlowName(ebbs, "CreateNetworkCollectionBB", "AssignNetworkBB", "CreateNetworkBB",
974                 "ActivateNetworkBB", "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB",
975                 "ActivateNetworkCollectionBB");
976     }
977
978     @Ignore
979     @Test
980     public void selectExecutionListNetworkCollectionMacroDelete() throws Exception {
981         String gAction = "deleteInstance";
982         String resource = "NetworkCollection";
983         String bpmnRequest = readBpmnRequestFromFile(MACRO_CREATE_NETWORK_COLLECTION_JSON);
984         initExecution(gAction, bpmnRequest, false);
985         execution.setVariable("requestUri", "v6/serviceInstances/123/networkCollections/123");
986
987         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
988         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateNetworkBB", "DeleteNetworkBB",
989                 "UnassignNetworkBB", "DeactivateNetworkCollectionBB", "DeleteNetworkCollectionBB");
990         northBoundRequest.setOrchestrationFlowList(orchFlows);
991
992         Service service = new Service();
993         CollectionResourceCustomization collectionResourceCustomization = new CollectionResourceCustomization();
994         CollectionResource collectionResource = new CollectionResource();
995         collectionResource.setToscaNodeType("Data NetworkCollection Data");
996         collectionResourceCustomization.setCollectionResource(collectionResource);
997         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
998
999         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1000                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1001         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1002         workflowAction.selectExecutionList(execution);
1003         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1004         assertEqualsBulkFlowName(ebbs, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1005                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB", "DeactivateNetworkCollectionBB",
1006                 "DeleteNetworkCollectionBB");
1007     }
1008
1009     @Test
1010     public void selectExecutionListALaCarteVfModuleNoFabricCreateTest() throws Exception {
1011         String gAction = "createInstance";
1012         String resource = "VfModule";
1013         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1014         initExecution(gAction, bpmnRequest, true);
1015         execution.setVariable("requestUri",
1016                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1017
1018         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1019         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1020                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1021         northBoundRequest.setOrchestrationFlowList(orchFlows);
1022
1023         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1024                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1025         workflowAction.selectExecutionList(execution);
1026         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1027         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB");
1028     }
1029
1030     @Test
1031     public void selectExecutionListALaCarteVfModuleFabricCreateTest() throws Exception {
1032         String gAction = "createInstance";
1033         String resource = "VfModule";
1034         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1035         initExecution(gAction, bpmnRequest, true);
1036         execution.setVariable("requestUri",
1037                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1038
1039         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1040         List<OrchestrationFlow> orchFlows = createFlowList("AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1041                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB");
1042         northBoundRequest.setOrchestrationFlowList(orchFlows);
1043
1044         List<CvnfcCustomization> cvnfcCustomizations = new ArrayList<CvnfcCustomization>();
1045         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
1046         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization =
1047                 new CvnfcConfigurationCustomization();
1048         ConfigurationResource configurationResource = new ConfigurationResource();
1049         configurationResource.setToscaNodeType("FabricConfiguration");
1050         vnfVfmoduleCvnfcConfigurationCustomization.setConfigurationResource(configurationResource);
1051         vnfVfmoduleCvnfcConfigurationCustomization.setModelInstanceName("modelInstanceName1");
1052         vnfVfmoduleCvnfcConfigurationCustomization.setCvnfcCustomization(cvnfcCustomization);
1053         List<CvnfcConfigurationCustomization> custSet = new ArrayList<CvnfcConfigurationCustomization>();
1054         custSet.add(vnfVfmoduleCvnfcConfigurationCustomization);
1055         cvnfcCustomization.setCvnfcConfigurationCustomization(custSet);
1056         cvnfcCustomization.setDescription("description");
1057         cvnfcCustomizations.add(cvnfcCustomization);
1058
1059         CvnfcCustomization cvnfcCustomization2 = new CvnfcCustomization();
1060         CvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization2 =
1061                 new CvnfcConfigurationCustomization();
1062         ConfigurationResource configurationResource2 = new ConfigurationResource();
1063         configurationResource2.setToscaNodeType("FabricConfiguration");
1064         vnfVfmoduleCvnfcConfigurationCustomization2.setConfigurationResource(configurationResource2);
1065         vnfVfmoduleCvnfcConfigurationCustomization2.setModelInstanceName("modelInstanceName2");
1066         vnfVfmoduleCvnfcConfigurationCustomization2.setCvnfcCustomization(cvnfcCustomization2);
1067         List<CvnfcConfigurationCustomization> custSet2 = new ArrayList<CvnfcConfigurationCustomization>();
1068         custSet2.add(vnfVfmoduleCvnfcConfigurationCustomization2);
1069         cvnfcCustomization2.setCvnfcConfigurationCustomization(custSet2);
1070         cvnfcCustomization2.setDescription("description2");
1071         cvnfcCustomizations.add(cvnfcCustomization2);
1072
1073         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1074                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1075         // when(catalogDbClient.getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID("fc25201d-36d6-43a3-8d39-fdae88e526ae",
1076         // "9a6d01fd-19a7-490a-9800-460830a12e0b")).thenReturn(cvnfcCustomizations);
1077         workflowAction.selectExecutionList(execution);
1078         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1079         assertEqualsBulkFlowName(ebbs, "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1080                 "AssignFabricConfigurationBB", "ActivateFabricConfigurationBB", "AssignFabricConfigurationBB",
1081                 "ActivateFabricConfigurationBB");
1082     }
1083
1084     @Test
1085     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceTest() throws Exception {
1086         String gAction = "replaceInstance";
1087         String resource = "VfModule";
1088         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1089         initExecution(gAction, bpmnRequest, true);
1090         execution.setVariable("requestUri",
1091                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1092
1093         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1094         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1095         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1096                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1097         workflowAction.selectExecutionList(execution);
1098         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1099
1100         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1101                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1102                 "ChangeModelServiceInstanceBB");
1103     }
1104
1105     @Test
1106     public void selectExecutionListALaCarteVfModuleNoVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1107         String gAction = "replaceInstanceRetainAssignments";
1108         String resource = "VfModule";
1109         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1110         initExecution(gAction, bpmnRequest, true);
1111         execution.setVariable("requestUri",
1112                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1113
1114         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1115         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1116         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1117                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1118         workflowAction.selectExecutionList(execution);
1119         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1120
1121         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
1122                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1123     }
1124
1125     @Test
1126     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceTest() throws Exception {
1127         String gAction = "replaceInstance";
1128         String resource = "VfModule";
1129         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1130         initExecution(gAction, bpmnRequest, true);
1131         execution.setVariable("requestUri",
1132                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1133         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1134         execution.setVariable("vfModuleId", "1234");
1135
1136         VolumeGroup volumeGroup = new VolumeGroup();
1137         volumeGroup.setVolumeGroupId("volumeGroupId");
1138         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1139                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1140         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1141         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1142         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1143                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1144         workflowAction.selectExecutionList(execution);
1145         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1146
1147         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1148                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVfModuleBB",
1149                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1150     }
1151
1152     @Test
1153     public void selectExecutionListALaCarteVfModuleVolumeGroupToNoVolumeGroupReplaceRetainAssignmentsTest()
1154             throws Exception {
1155         String gAction = "replaceInstanceRetainAssignments";
1156         String resource = "VfModule";
1157         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1158         initExecution(gAction, bpmnRequest, true);
1159         execution.setVariable("requestUri",
1160                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1161         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1162         execution.setVariable("vfModuleId", "1234");
1163
1164         VolumeGroup volumeGroup = new VolumeGroup();
1165         volumeGroup.setVolumeGroupId("volumeGroupId");
1166         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1167                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1168
1169         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1170         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1171         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1172                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1173         workflowAction.selectExecutionList(execution);
1174         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1175
1176         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1177                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVfModuleBB",
1178                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1179     }
1180
1181     @Test
1182     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceTest() throws Exception {
1183         String gAction = "replaceInstance";
1184         String resource = "VfModule";
1185         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1186         initExecution(gAction, bpmnRequest, true);
1187         execution.setVariable("requestUri",
1188                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1189         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1190         execution.setVariable("vfModuleId", "1234");
1191
1192         VolumeGroup volumeGroup = new VolumeGroup();
1193         volumeGroup.setVolumeGroupId("volumeGroupId");
1194         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1195                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1196
1197         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1198         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1199         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1200         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1201         vfModuleCustomization.setVfModule(vfModule);
1202         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1203                 .thenReturn(vfModuleCustomization);
1204
1205         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1206         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1207         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1208                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1209         workflowAction.selectExecutionList(execution);
1210         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1211
1212         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1213                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1214                 "ChangeModelServiceInstanceBB");
1215     }
1216
1217     @Test
1218     public void selectExecutionListALaCarteVfModuleWithFabricKeepVolumeGroupReplaceTest() throws Exception {
1219         String gAction = "replaceInstance";
1220         String resource = "VfModule";
1221         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1222         initExecution(gAction, bpmnRequest, true);
1223         execution.setVariable("requestUri",
1224                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1225         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1226         execution.setVariable("vfModuleId", "1234");
1227
1228         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1229         vnf.setVnfId("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1230         vnf.setModelCustomizationId("modelCustomizationId");
1231         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1232
1233         org.onap.aai.domain.yang.VfModule vfModuleFromAAI = new org.onap.aai.domain.yang.VfModule();
1234         vfModuleFromAAI.setModelCustomizationId("modelCustomizationId");
1235         vfModuleFromAAI.setVfModuleId("1234");
1236         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModuleFromAAI);
1237
1238         VolumeGroup volumeGroup = new VolumeGroup();
1239         volumeGroup.setVolumeGroupId("volumeGroupId");
1240         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1241                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1242
1243         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1244         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1245         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1246         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1247         vfModuleCustomization.setVfModule(vfModule);
1248         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1249                 .thenReturn(vfModuleCustomization);
1250         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1251         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1252         vnfc.setModelInvariantId("modelInvariantId");
1253         vnfc.setVnfcName("testVnfcName");
1254         vnfcs.add(vnfc);
1255         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
1256
1257         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1258         configuration.setConfigurationId("configurationId");
1259         configuration.setModelCustomizationId("modelCustimizationId");
1260         configuration.setConfigurationName("testConfigurationName");
1261         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(any(), any(), any());
1262
1263         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1264         northBoundRequest.setOrchestrationFlowList(replaceVfModuleWithFabricOrchFlows);
1265         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1266                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1267         SPY_workflowAction.selectExecutionList(execution);
1268         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1269
1270         assertEqualsBulkFlowName(ebbs, "DeleteFabricConfigurationBB", "DeactivateVfModuleBB", "DeleteVfModuleATTBB",
1271                 "UnassignVFModuleBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB",
1272                 "ChangeModelServiceInstanceBB");
1273     }
1274
1275     @Test
1276     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1277         String gAction = "replaceInstanceRetainAssignments";
1278         String resource = "VfModule";
1279         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1280         initExecution(gAction, bpmnRequest, true);
1281         execution.setVariable("requestUri",
1282                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1283         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1284         execution.setVariable("vfModuleId", "1234");
1285
1286         VolumeGroup volumeGroup = new VolumeGroup();
1287         volumeGroup.setVolumeGroupId("volumeGroupId");
1288         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1289                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1290
1291         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1292         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1293         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1294         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1295         vfModuleCustomization.setVfModule(vfModule);
1296         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1297                 .thenReturn(vfModuleCustomization);
1298
1299         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1300         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1301         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1302                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1303         workflowAction.selectExecutionList(execution);
1304         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1305
1306         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "ChangeModelVfModuleBB",
1307                 "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1308     }
1309
1310     @Test
1311     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceTest() throws Exception {
1312         String gAction = "replaceInstance";
1313         String resource = "VfModule";
1314         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1315         initExecution(gAction, bpmnRequest, true);
1316         execution.setVariable("requestUri",
1317                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1318         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1319         execution.setVariable("vfModuleId", "1234");
1320
1321         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1322         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1323         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1324         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1325         vfModuleCustomization.setVfModule(vfModule);
1326         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1327                 .thenReturn(vfModuleCustomization);
1328
1329         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1330         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1331         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1332                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1333         workflowAction.selectExecutionList(execution);
1334         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1335
1336         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "UnassignVFModuleBB",
1337                 "AssignVolumeGroupBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1338                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1339     }
1340
1341     @Test
1342     public void selectExecutionListALaCarteVfModuleNoVolumeGroupToVolumeGroupReplaceRetainAssignmentsTest()
1343             throws Exception {
1344         String gAction = "replaceInstanceRetainAssignments";
1345         String resource = "VfModule";
1346         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1347         initExecution(gAction, bpmnRequest, true);
1348         execution.setVariable("requestUri",
1349                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1350         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1351         execution.setVariable("vfModuleId", "1234");
1352
1353         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1354         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1355         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1356         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1357         vfModuleCustomization.setVfModule(vfModule);
1358         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1359                 .thenReturn(vfModuleCustomization);
1360
1361         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1362         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1363         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1364                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1365         workflowAction.selectExecutionList(execution);
1366         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1367
1368         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "AssignVolumeGroupBB",
1369                 "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB",
1370                 "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1371     }
1372
1373     @Test
1374     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceTest() throws Exception {
1375         String gAction = "replaceInstance";
1376         String resource = "VfModule";
1377         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
1378         initExecution(gAction, bpmnRequest, true);
1379         execution.setVariable("requestUri",
1380                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1381         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1382         execution.setVariable("vfModuleId", "1234");
1383
1384         VolumeGroup volumeGroup = new VolumeGroup();
1385         volumeGroup.setVolumeGroupId("volumeGroupId");
1386         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1387                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1388
1389         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1390         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1391         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1392         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1393         vfModuleCustomization.setVfModule(vfModule);
1394         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1395                 .thenReturn(vfModuleCustomization);
1396
1397         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1398         northBoundRequest.setOrchestrationFlowList(replaceVfModuleOrchFlows);
1399         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1400                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1401         workflowAction.selectExecutionList(execution);
1402         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1403
1404         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1405                 "DeleteVolumeGroupBB", "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB",
1406                 "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB", "CreateVolumeGroupBB",
1407                 "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1408     }
1409
1410     @Test
1411     public void selectExecutionListALaCarteVfModuleRebuildVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
1412         String gAction = "replaceInstanceRetainAssignments";
1413         String resource = "VfModule";
1414         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_REPLACE_REBUILD_VOLUME_GROUPS_JSON);
1415         initExecution(gAction, bpmnRequest, true);
1416         execution.setVariable("requestUri",
1417                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
1418         execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
1419         execution.setVariable("vfModuleId", "1234");
1420
1421         VolumeGroup volumeGroup = new VolumeGroup();
1422         volumeGroup.setVolumeGroupId("volumeGroupId");
1423         doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
1424                 .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
1425
1426         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
1427         vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
1428         org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
1429         vfModule.setVolumeHeatTemplate(new HeatTemplate());
1430         vfModuleCustomization.setVfModule(vfModule);
1431         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
1432                 .thenReturn(vfModuleCustomization);
1433
1434         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1435         northBoundRequest.setOrchestrationFlowList(replaceRetainAssignmentsVfModuleOrchFlows);
1436         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1437                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1438         workflowAction.selectExecutionList(execution);
1439         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1440
1441         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB",
1442                 "DeleteVolumeGroupBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "ChangeModelVfModuleBB",
1443                 "CreateVolumeGroupBB", "ActivateVolumeGroupBB", "CreateVfModuleBB", "ActivateVfModuleBB",
1444                 "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
1445     }
1446
1447
1448     @Test
1449     public void selectExecutionListALaCarteVfModuleFabricDeleteTest() throws Exception {
1450         String gAction = "deleteInstance";
1451         String resource = "VfModule";
1452         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1453         initExecution(gAction, bpmnRequest, true);
1454         execution.setVariable("requestUri",
1455                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1456
1457         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1458         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1459                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1460         northBoundRequest.setOrchestrationFlowList(orchFlows);
1461
1462         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1463                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1464
1465         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1466         vnf.setVnfId("vnf0");
1467         vnf.setModelCustomizationId("modelCustomizationId");
1468         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1469
1470         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1471         vfModule.setModelCustomizationId("modelCustomizationId");
1472         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1473
1474         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1475         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1476         vnfc.setModelInvariantId("modelInvariantId");
1477         vnfc.setVnfcName("testVnfcName");
1478         vnfcs.add(vnfc);
1479         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1480                 anyObject());
1481
1482         org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
1483         configuration.setConfigurationId("configurationId");
1484         configuration.setModelCustomizationId("modelCustimizationId");
1485         configuration.setConfigurationName("testConfigurationName");
1486         doReturn(configuration).when(SPY_workflowAction).getRelatedResourcesInVnfc(anyObject(), anyObject(),
1487                 anyObject());
1488
1489         SPY_workflowAction.selectExecutionList(execution);
1490         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1491         assertEqualsBulkFlowName(ebbs, "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB",
1492                 "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1493     }
1494
1495     @Test
1496     public void getConfigBuildingBlocksNoVfModuleFabricDeleteTest() throws Exception {
1497         String gAction = "deleteInstance";
1498         ObjectMapper mapper = new ObjectMapper();
1499         WorkflowType resourceType = WorkflowType.VFMODULE;
1500         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1501         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1502         execution.setVariable("requestAction", gAction);
1503         execution.setVariable("bpmnRequest", bpmnRequest);
1504         execution.setVariable("vnfId", "1234");
1505         execution.setVariable("vfModuleId", "vfModuleId1234");
1506         execution.setVariable("requestUri",
1507                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1508         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1509         RequestDetails requestDetails = sIRequest.getRequestDetails();
1510         String requestAction = "deleteInstance";
1511         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1512         boolean aLaCarte = true;
1513         String apiVersion = "7";
1514         String vnfType = "vnfType";
1515         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1516         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1517         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
1518         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1519
1520         thrown.expect(AAIEntityNotFoundException.class);
1521         thrown.expectMessage(containsString(
1522                 "No matching VfModule is found in Generic-Vnf in AAI for vnfId: 1234 and vfModuleId : vfModuleId1234"));
1523
1524         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1525                 "UnassignVfModuleBB", "DeactivateFabricConfigurationBB", "UnassignFabricConfigurationBB");
1526
1527         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1528                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1529                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1530                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1531
1532         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1533         vnf.setVnfId("vnf0");
1534         vnf.setModelCustomizationId("modelCustomizationId");
1535         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1536
1537         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1538         vfModule.setModelCustomizationId("modelCustomizationId");
1539         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(null);
1540
1541         SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1542     }
1543
1544     @Test
1545     public void getConfigBuildingBlocksTest() throws Exception {
1546         String gAction = "deleteInstance";
1547         ObjectMapper mapper = new ObjectMapper();
1548         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
1549
1550         WorkflowType resourceType = WorkflowType.VFMODULE;
1551         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1552         execution.setVariable("requestAction", gAction);
1553         String bpmnRequest =
1554                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1555         execution.setVariable("bpmnRequest", bpmnRequest);
1556         execution.setVariable("vnfId", "1234");
1557         execution.setVariable("vfModuleId", "vfModuleId1234");
1558         execution.setVariable("requestUri",
1559                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1560         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1561         RequestDetails requestDetails = sIRequest.getRequestDetails();
1562         String requestAction = "deleteInstance";
1563         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1564         boolean aLaCarte = true;
1565         String apiVersion = "7";
1566         String vnfType = "vnfType";
1567         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1568         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1569         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
1570         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1571
1572         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1573                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1574
1575         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1576                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1577                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1578                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1579
1580         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1581         vnf.setVnfId("vnf0");
1582         vnf.setModelCustomizationId("modelCustomizationId");
1583         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1584
1585         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1586         vfModule.setModelCustomizationId("modelCustomizationId");
1587
1588         org.onap.aai.domain.yang.Configuration config1 = new org.onap.aai.domain.yang.Configuration();
1589         config1.setConfigurationId("config1");
1590         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
1591         config2.setConfigurationId("config2");
1592
1593         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1594         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
1595         vnfc1.setVnfcName("zauk53avetd02svm001");
1596         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
1597         vnfc2.setVnfcName("zauk53avetd02tvm001");
1598         vnfcs.add(vnfc1);
1599         vnfcs.add(vnfc2);
1600
1601         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
1602         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
1603                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
1604         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
1605                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1606         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
1607                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1608
1609         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1610
1611         assertFalse(results.isEmpty());
1612         assertEquals(2, results.size());
1613         assertEquals("config1", results.get(0).getWorkflowResourceIds().getConfigurationId());
1614         assertEquals("config2", results.get(1).getWorkflowResourceIds().getConfigurationId());
1615         assertEquals("zauk53avetd02svm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
1616         assertEquals("zauk53avetd02tvm001", results.get(1).getConfigurationResourceKeys().getVnfcName());
1617     }
1618
1619     @Test
1620     public void getConfigBuildingBlocksNullConfigurationTest() throws Exception {
1621         String gAction = "deleteInstance";
1622         ObjectMapper mapper = new ObjectMapper();
1623         mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
1624
1625         WorkflowType resourceType = WorkflowType.VFMODULE;
1626         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
1627         execution.setVariable("requestAction", gAction);
1628         String bpmnRequest =
1629                 new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
1630         execution.setVariable("bpmnRequest", bpmnRequest);
1631         execution.setVariable("vnfId", "1234");
1632         execution.setVariable("vfModuleId", "vfModuleId1234");
1633         execution.setVariable("requestUri",
1634                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1635         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
1636         RequestDetails requestDetails = sIRequest.getRequestDetails();
1637         String requestAction = "deleteInstance";
1638         String requestId = "9c944122-d161-4280-8594-48c06a9d96d5";
1639         boolean aLaCarte = true;
1640         String apiVersion = "7";
1641         String vnfType = "vnfType";
1642         String key = "00d15ebb-c80e-43c1-80f0-90c40dde70b0";
1643         String resourceId = "d1d35800-783d-42d3-82f6-d654c5054a6e";
1644         Resource resourceKey = new Resource(resourceType, key, aLaCarte);
1645         WorkflowResourceIds workflowResourceIds = SPY_workflowAction.populateResourceIdsFromApiHandler(execution);
1646
1647         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1648                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1649
1650         ConfigBuildingBlocksDataObject dataObj = new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
1651                 .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
1652                 .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(aLaCarte).setVnfType(vnfType)
1653                 .setWorkflowResourceIds(workflowResourceIds).setRequestDetails(requestDetails).setExecution(execution);
1654
1655         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1656         vnf.setVnfId("vnf0");
1657         vnf.setModelCustomizationId("modelCustomizationId");
1658         when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
1659
1660         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1661         vfModule.setModelCustomizationId("modelCustomizationId");
1662
1663         /* this is a test case where configuration for vnfc is null */
1664         org.onap.aai.domain.yang.Configuration config1 = null;
1665         org.onap.aai.domain.yang.Configuration config2 = new org.onap.aai.domain.yang.Configuration();
1666         config2.setConfigurationId("config2");
1667
1668         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1669         org.onap.aai.domain.yang.Vnfc vnfc1 = new org.onap.aai.domain.yang.Vnfc();
1670         vnfc1.setVnfcName("zauk53avetd02svm001");
1671         org.onap.aai.domain.yang.Vnfc vnfc2 = new org.onap.aai.domain.yang.Vnfc();
1672         vnfc2.setVnfcName("zauk53avetd02tvm001");
1673         vnfcs.add(vnfc1);
1674         vnfcs.add(vnfc2);
1675
1676         when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModule);
1677         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(),
1678                 eq(org.onap.aai.domain.yang.Vnfc.class), eq(Types.VNFC));
1679         doReturn(config1).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc1),
1680                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1681         doReturn(config2).when(SPY_workflowAction).getRelatedResourcesInVnfc(eq(vnfc2),
1682                 eq(org.onap.aai.domain.yang.Configuration.class), eq(Types.CONFIGURATION));
1683
1684         List<ExecuteBuildingBlock> results = SPY_workflowAction.getConfigBuildingBlocks(dataObj);
1685
1686         assertFalse(results.isEmpty());
1687         assertEquals(1, results.size());
1688         assertEquals("config2", results.get(0).getWorkflowResourceIds().getConfigurationId());
1689         assertEquals("zauk53avetd02tvm001", results.get(0).getConfigurationResourceKeys().getVnfcName());
1690     }
1691
1692     @Test
1693     public void selectExecutionListALaCarteVfModuleNoFabricDeleteTest() throws Exception {
1694         String gAction = "deleteInstance";
1695         String resource = "VfModule";
1696         String bpmnRequest = readBpmnRequestFromFile(VF_MODULE_CREATE_WITH_FABRIC_JSON);
1697         initExecution(gAction, bpmnRequest, true);
1698         execution.setVariable("requestUri",
1699                 "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules");
1700
1701         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1702         List<OrchestrationFlow> orchFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1703                 "UnassignVfModuleBB", "DeleteFabricConfigurationBB");
1704         northBoundRequest.setOrchestrationFlowList(orchFlows);
1705
1706         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
1707                 true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1708
1709         org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
1710         vnf.setVnfId("vnf0");
1711         vnf.setModelCustomizationId("modelCustomizationId");
1712         when(bbSetupUtils.getAAIGenericVnf(anyObject())).thenReturn(vnf);
1713
1714         org.onap.aai.domain.yang.VfModule vfModule = new org.onap.aai.domain.yang.VfModule();
1715         vfModule.setModelCustomizationId("modelCustomizationId");
1716         when(bbSetupUtils.getAAIVfModule(anyObject(), anyObject())).thenReturn(vfModule);
1717
1718         List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
1719
1720         doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(anyObject(), anyObject(), anyObject(),
1721                 anyObject());
1722
1723         SPY_workflowAction.selectExecutionList(execution);
1724         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1725         assertEqualsBulkFlowName(ebbs, "DeactivateVfModuleBB", "DeleteVfModuleBB", "UnassignVfModuleBB");
1726     }
1727
1728     @Test
1729     public void selectExecutionListMacroResumeTest() throws Exception {
1730         String gAction = "createInstance";
1731         String resource = "Service";
1732         String bpmnRequest = readBpmnRequestFromFile(MACRO_ASSIGN_JSON);
1733         initExecution(gAction, bpmnRequest, false);
1734         execution.setVariable("requestUri", "v6/serviceInstances/123");
1735
1736         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1737         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1738         northBoundRequest.setOrchestrationFlowList(orchFlows);
1739
1740         Service service = new Service();
1741         service.setModelUUID("3c40d244-808e-42ca-b09a-256d83d19d0a");
1742
1743         ServiceInstance si = new ServiceInstance();
1744
1745         when(bbSetupUtils.getAAIServiceInstanceById("123")).thenReturn(si);
1746         when(catalogDbClient.getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a")).thenReturn(service);
1747
1748         String flowsToExecuteString =
1749                 "[{\"buildingBlock\":{\"mso-id\":\"2f9ddc4b-4dcf-4129-a35f-be1625ae0176\",\"bpmn-flow-name\":\"AssignServiceInstanceBB\",\"key\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"is-virtual-link\":false,\"virtual-link-key\":null},\"requestId\":\"9c944122-d161-4280-8594-48c06a9d96d5\",\"apiVersion\":\"7\",\"resourceId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"requestAction\":\"deleteInstance\",\"vnfType\":\"\",\"aLaCarte\":true,\"homing\":false,\"workflowResourceIds\":{\"serviceInstanceId\":\"ff9dae72-05bb-4277-ad2b-1b082467c138\",\"vnfId\":\"84a29830-e533-4f20-a838-910c740bf24c\",\"networkId\":\"\",\"volumeGroupId\":\"\",\"vfModuleId\":\"d1d35800-783d-42d3-82f6-d654c5054a6e\",\"networkCollectionId\":null,\"configurationId\":\"10f8a3a3-91bf-4821-9515-c01b2864dff0\",\"instanceGroupId\":\"\"},\"requestDetails\":{\"modelInfo\":{\"modelCustomizationName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelInvariantId\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelType\":\"vfModule\",\"modelId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\",\"modelVersion\":\"1\",\"modelCustomizationUuid\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelVersionId\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelCustomizationId\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"modelUuid\":\"00d15ebb-c80e-43c1-80f0-90c40dde70b0\",\"modelInvariantUuid\":\"8028fcc0-96dc-427d-a4de-4536245943da\",\"modelInstanceName\":\"McmrNcUpVnf20191..cr_mccm_fc_base..module-0\"},\"requestInfo\":{\"source\":\"VID\",\"suppressRollback\":false,\"requestorId\":\"pj8646\"},\"cloudConfiguration\":{\"tenantId\":\"e2a6af59d1cb43b2874e943bbbf8470a\",\"cloudOwner\":\"att-nc\",\"lcpCloudRegionId\":\"auk51b\"},\"requestParameters\":{\"testApi\":\"GR_API\"}},\"configurationResourceKeys\":{\"vfModuleCustomizationUUID\":\"7adc7c29-21a3-40a2-b8b6-5d4ad08b68e9\",\"vnfResourceCustomizationUUID\":\"a80f05b8-d651-44af-b999-8ed78fb4582f\",\"cvnfcCustomizationUUID\":\"69cce457-9ffd-4359-962b-0596a1e83ad1\",\"vnfcName\":\"zauk51bmcmr01mcm001\"}}]";
1750         ObjectMapper om = new ObjectMapper();
1751         List<ExecuteBuildingBlock> flowsToExecute = null;
1752         try {
1753             ExecuteBuildingBlock[] asArray = om.readValue(flowsToExecuteString, ExecuteBuildingBlock[].class);
1754             flowsToExecute = Arrays.asList(asArray);
1755         } catch (Exception e) {
1756             e.printStackTrace();
1757         }
1758
1759         when(bbSetupUtils.loadOriginalFlowExecutionPath(anyString())).thenReturn(flowsToExecute);
1760
1761         workflowAction.selectExecutionList(execution);
1762         List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
1763         assertEqualsBulkFlowName(ebbs, "AssignServiceInstanceBB");
1764     }
1765
1766     @Test
1767     public void getRelatedResourcesInVfModuleTest() throws Exception {
1768         org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
1769         vnfc.setModelInvariantId("modelInvariantId");
1770         vnfc.setVnfcName("testVnfcName");
1771
1772         String vfncPayload =
1773                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/vnfcResponse.json")));
1774         AAIResultWrapper vfncWrapper = new AAIResultWrapper(vfncPayload);
1775
1776         String configurationPayload =
1777                 new String(Files.readAllBytes(Paths.get(RESOURCE_PATH + "/BuildingBlocks/configurationResponse.json")));
1778         AAIResultWrapper configurationWrapper = new AAIResultWrapper(configurationPayload);
1779         List<AAIResultWrapper> configurationResultWrappers = new ArrayList<AAIResultWrapper>();
1780         configurationResultWrappers.add(configurationWrapper);
1781
1782         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc(vnfc.getVnfcName()));
1783         when(bbSetupUtils.getAAIResourceDepthOne(uri)).thenReturn(vfncWrapper);
1784
1785         doReturn(configurationResultWrappers).when(SPY_workflowAction).getResultWrappersFromRelationships(anyObject(),
1786                 anyObject());
1787         org.onap.aai.domain.yang.Configuration configuration = SPY_workflowAction.getRelatedResourcesInVnfc(vnfc,
1788                 org.onap.aai.domain.yang.Configuration.class, Types.CONFIGURATION);
1789         assertEquals("testConfigurationId", configuration.getConfigurationId());
1790     }
1791
1792     /**
1793      * WorkflowActionBB Tests
1794      */
1795
1796     @Test
1797     public void pluralTest() {
1798         List<String> items = Arrays.asList("serviceInstances, Service", "vnfs, Vnf", "vfModules, VfModule",
1799                 "networks, Network", "invalidNames, invalidNames");
1800         items.forEach(item -> {
1801             String[] split = item.split(",");
1802             String type = split[0].trim();
1803             String expected = split[1].trim();
1804             assertThat(workflowAction.convertTypeFromPlural(type), equalTo(expected));
1805         });
1806     }
1807
1808     @Test
1809     public void sortExecutionPathByObjectForVlanTaggingCreateTest() throws Exception {
1810         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1811
1812         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("0");
1813         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
1814         executeFlows.add(ebb);
1815
1816         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("AssignNetworkBB").setKey("1");
1817         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
1818         executeFlows.add(ebb2);
1819
1820         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("0");
1821         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
1822         executeFlows.add(ebb3);
1823
1824         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("CreateNetworkBB").setKey("1");
1825         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
1826         executeFlows.add(ebb4);
1827
1828         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("0");
1829         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
1830         executeFlows.add(ebb5);
1831
1832         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("ActivateNetworkBB").setKey("1");
1833         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
1834         executeFlows.add(ebb6);
1835
1836         List<ExecuteBuildingBlock> sorted =
1837                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "createInstance");
1838         assertEqualsBulkFlowName(sorted, "AssignNetworkBB", "CreateNetworkBB", "ActivateNetworkBB", "AssignNetworkBB",
1839                 "CreateNetworkBB", "ActivateNetworkBB");
1840     }
1841
1842     @Test
1843     public void sortExecutionPathByObjectForVlanTaggingDeleteTest() throws Exception {
1844         List<ExecuteBuildingBlock> executeFlows = new ArrayList<>();
1845
1846         BuildingBlock bb = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("0");
1847         ExecuteBuildingBlock ebb = new ExecuteBuildingBlock().setBuildingBlock(bb);
1848         executeFlows.add(ebb);
1849
1850         BuildingBlock bb2 = new BuildingBlock().setBpmnFlowName("DeactivateNetworkBB").setKey("1");
1851         ExecuteBuildingBlock ebb2 = new ExecuteBuildingBlock().setBuildingBlock(bb2);
1852         executeFlows.add(ebb2);
1853
1854         BuildingBlock bb3 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("0");
1855         ExecuteBuildingBlock ebb3 = new ExecuteBuildingBlock().setBuildingBlock(bb3);
1856         executeFlows.add(ebb3);
1857
1858         BuildingBlock bb4 = new BuildingBlock().setBpmnFlowName("DeleteNetworkBB").setKey("1");
1859         ExecuteBuildingBlock ebb4 = new ExecuteBuildingBlock().setBuildingBlock(bb4);
1860         executeFlows.add(ebb4);
1861
1862         BuildingBlock bb5 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("0");
1863         ExecuteBuildingBlock ebb5 = new ExecuteBuildingBlock().setBuildingBlock(bb5);
1864         executeFlows.add(ebb5);
1865
1866         BuildingBlock bb6 = new BuildingBlock().setBpmnFlowName("UnassignNetworkBB").setKey("1");
1867         ExecuteBuildingBlock ebb6 = new ExecuteBuildingBlock().setBuildingBlock(bb6);
1868         executeFlows.add(ebb6);
1869
1870         List<ExecuteBuildingBlock> sorted =
1871                 workflowAction.sortExecutionPathByObjectForVlanTagging(executeFlows, "deleteInstance");
1872         assertEqualsBulkFlowName(sorted, "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB",
1873                 "DeactivateNetworkBB", "DeleteNetworkBB", "UnassignNetworkBB");
1874     }
1875
1876     @Test
1877     public void queryNorthBoundRequestCatalogDbNestedTest() throws MalformedURLException {
1878         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1879         List<OrchestrationFlow> orchFlows = createFlowList("AAICheckVnfInMaintBB", "AAISetVnfInMaintBB",
1880                 "VNF-Macro-Replace", "SDNOVnfHealthCheckBB", "AAIUnsetVnfInMaintBB");
1881         northBoundRequest.setOrchestrationFlowList(orchFlows);
1882         List<OrchestrationFlow> macroFlows = createFlowList("DeactivateVfModuleBB", "DeleteVfModuleBB",
1883                 "DeactivateVnfBB", "CreateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB");
1884
1885         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("replaceInstance",
1886                 "Vnf", false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
1887         when(catalogDbClient.getOrchestrationFlowByAction("VNF-Macro-Replace")).thenReturn(macroFlows);
1888         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "replaceInstance",
1889                 WorkflowType.VNF, false, "my-custom-cloud-owner");
1890         assertEquals(flows.get(0).getFlowName(), "AAICheckVnfInMaintBB");
1891         assertEquals(flows.get(1).getFlowName(), "AAISetVnfInMaintBB");
1892         assertEquals(flows.get(2).getFlowName(), "DeactivateVfModuleBB");
1893         assertEquals(flows.get(3).getFlowName(), "DeleteVfModuleBB");
1894         assertEquals(flows.get(4).getFlowName(), "DeactivateVnfBB");
1895         assertEquals(flows.get(5).getFlowName(), "CreateVfModuleBB");
1896         assertEquals(flows.get(6).getFlowName(), "ActivateVfModuleBB");
1897         assertEquals(flows.get(7).getFlowName(), "ActivateVnfBB");
1898         assertEquals(flows.get(8).getFlowName(), "SDNOVnfHealthCheckBB");
1899         assertEquals(flows.get(9).getFlowName(), "AAIUnsetVnfInMaintBB");
1900     }
1901
1902     @Test
1903     public void queryNorthBoundRequestCatalogDbTransportTest() throws MalformedURLException {
1904         NorthBoundRequest northBoundRequest = new NorthBoundRequest();
1905         List<OrchestrationFlow> orchFlows = createFlowList("AssignServiceInstanceBB");
1906         northBoundRequest.setOrchestrationFlowList(orchFlows);
1907         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
1908                 "createInstance", "Service", true, "my-custom-cloud-owner", "TRANSPORT")).thenReturn(northBoundRequest);
1909
1910         List<OrchestrationFlow> flows = workflowAction.queryNorthBoundRequestCatalogDb(execution, "createInstance",
1911                 WorkflowType.SERVICE, true, "my-custom-cloud-owner", "TRANSPORT");
1912         assertEquals(flows.get(0).getFlowName(), "AssignServiceInstanceBB");
1913     }
1914
1915     @Test
1916     public void extractResourceIdAndTypeFromUriTest() {
1917         String uri = "/v6/serviceInstances/123";
1918         String uri2 = "/v6/serviceInstances/123/vnfs/1234";
1919         String uri3 = "/v6/serviceInstances";
1920         String uri4 = "/v6/serviceInstances/assign";
1921         String uri5 = "'/v6/serviceInstances/123/vnfs";
1922         String uri6 = "/v6/serviceInstances/123/vnfs/1234/someAction";
1923         String uri7 = "/v6/serviceInstances/123/vnfs/1234/vfModules/5678/replace";
1924         String uri8 = "/v6/serviceInstances/123/vnfs/1234/vfModules/scaleOut";
1925         Resource expected1 = new Resource(WorkflowType.SERVICE, "123", true);
1926         Resource expected2 = new Resource(WorkflowType.VNF, "1234", false);
1927         Resource expected3 = new Resource(WorkflowType.VNF, "1234", false);
1928         Resource expected4 = new Resource(WorkflowType.VFMODULE, "5678", false);
1929         Resource result = workflowAction.extractResourceIdAndTypeFromUri(uri);
1930         assertEquals(expected1.getResourceId(), result.getResourceId());
1931         assertEquals(expected1.getResourceType(), result.getResourceType());
1932         result = workflowAction.extractResourceIdAndTypeFromUri(uri2);
1933         assertEquals(expected2.getResourceId(), result.getResourceId());
1934         assertEquals(expected2.getResourceType(), result.getResourceType());
1935         result = workflowAction.extractResourceIdAndTypeFromUri(uri3);
1936         assertEquals("Service", result.getResourceType().toString());
1937         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1938         result = workflowAction.extractResourceIdAndTypeFromUri(uri4);
1939         assertEquals("Service", result.getResourceType().toString());
1940         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1941         result = workflowAction.extractResourceIdAndTypeFromUri(uri5);
1942         assertEquals("Vnf", result.getResourceType().toString());
1943         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1944         result = workflowAction.extractResourceIdAndTypeFromUri(uri6);
1945         assertEquals(expected3.getResourceId(), result.getResourceId());
1946         assertEquals(expected3.getResourceType(), result.getResourceType());
1947         result = workflowAction.extractResourceIdAndTypeFromUri(uri7);
1948         assertEquals(expected4.getResourceId(), result.getResourceId());
1949         assertEquals(expected4.getResourceType(), result.getResourceType());
1950         result = workflowAction.extractResourceIdAndTypeFromUri(uri8);
1951         assertEquals(UUID.randomUUID().toString().length(), result.getResourceId().length());
1952         assertEquals("VfModule", result.getResourceType().toString());
1953
1954     }
1955
1956     @Test
1957     public void extractResourceIdAndTypeFromUriInvalidTypeTest() {
1958         this.expectedException.expect(IllegalArgumentException.class);
1959         this.expectedException.expectMessage(containsString("Uri could not be parsed. No type found."));
1960         workflowAction.extractResourceIdAndTypeFromUri("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace");
1961     }
1962
1963     @Test
1964     public void extractResourceIdAndTypeFromUriInvalidUriTest() {
1965         this.expectedException.expect(IllegalArgumentException.class);
1966         this.expectedException.expectMessage(containsString("Uri could not be parsed:"));
1967         workflowAction.extractResourceIdAndTypeFromUri("something that doesn't match anything");
1968     }
1969
1970     @Test
1971     public void extractResourceIdAndTypeFromUriResumeTest() {
1972         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
1973                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume");
1974         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
1975     }
1976
1977     @Test
1978     public void extractResourceIdAndTypeFromUriReplaceResumeTest() {
1979         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
1980                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/deactivateAndCloudDelete/resume");
1981         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
1982     }
1983
1984     @Test
1985     public void extractResourceIdAndTypeFromUriDeActiveResumeTest() {
1986         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
1987                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/replace/resume");
1988         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
1989     }
1990
1991     @Test
1992     public void extractResourceIdAndTypeFromUriResumeIdOnly() {
1993         Resource resource = workflowAction.extractResourceIdAndTypeFromUri(
1994                 "http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume");
1995         assertEquals(resource.getResourceId(), "33cb74cd-9cb3-4090-a3c0-1b8c8e235847");
1996     }
1997
1998     @Test
1999     public void isUriResumeTest() {
2000         assertTrue(workflowAction.isUriResume(
2001                 "http://localhost:9100/onap/so/infra/orchestrationRequests/v7/requests/2f8ab587-ef6a-4456-b7b2-d73f9363dabd/resume"));
2002         assertTrue(workflowAction.isUriResume(
2003                 "        http://localhost:9100/onap/so/infra/serviceInstantiation/v7/serviceInstances/4ff87c63-461b-4d83-8121-d351e6db216c/vnfs/eea9b93b-b5b9-4fad-9c35-12d52e4b683f/vfModules/33cb74cd-9cb3-4090-a3c0-1b8c8e235847/resume"));
2004
2005         assertFalse(workflowAction.isUriResume("/v6/serviceInstances/123/vnfs/1234/vfmodules/5678/replace"));
2006     }
2007
2008     @Test
2009     public void isRequestMacroServiceResumeTest() {
2010         ServiceInstance si = new ServiceInstance();
2011         when(bbSetupUtils.getAAIServiceInstanceById(anyString())).thenReturn(si);
2012         assertFalse(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", ""));
2013         assertTrue(workflowAction.isRequestMacroServiceResume(false, WorkflowType.SERVICE, "createInstance", "123"));
2014     }
2015
2016     @Test
2017     public void populateResourceIdsFromApiHandlerTest() {
2018         execution.setVariable("serviceInstanceId", "123");
2019         execution.setVariable("vnfId", "888");
2020         WorkflowResourceIds x = workflowAction.populateResourceIdsFromApiHandler(execution);
2021         assertEquals("123", x.getServiceInstanceId());
2022         assertEquals("888", x.getVnfId());
2023         assertNull(x.getVolumeGroupId());
2024     }
2025
2026     @Test
2027     public void handleRuntimeExceptionTest() {
2028         execution.setVariable("BPMN_javaExpMsg", "test runtime error message");
2029         execution.setVariable("testProcessKey", "testProcessKeyValue");
2030         try {
2031             workflowAction.handleRuntimeException(execution);
2032         } catch (BpmnError wfe) {
2033             assertEquals("MSOWorkflowException", wfe.getErrorCode());
2034         }
2035     }
2036
2037     @Ignore
2038     @Test
2039     public void traverseCatalogDbServiceMultipleNetworkTest() throws IOException, VrfBondingServiceException {
2040         execution.setVariable("testProcessKey", "testProcessKeyValue");
2041         Service service = new Service();
2042         List<NetworkResourceCustomization> networkCustomizations = new ArrayList<>();
2043         NetworkResourceCustomization networkCust = new NetworkResourceCustomization();
2044         networkCust.setModelCustomizationUUID("123");
2045         networkCustomizations.add(networkCust);
2046         service.setNetworkCustomizations(networkCustomizations);
2047         NetworkCollectionResourceCustomization collectionResourceCustomization =
2048                 new NetworkCollectionResourceCustomization();
2049         collectionResourceCustomization.setModelCustomizationUUID("123");
2050         CollectionResource collectionResource = new CollectionResource();
2051         collectionResource.setToscaNodeType("NetworkCollection");
2052         InstanceGroup instanceGroup = new InstanceGroup();
2053         List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustomizations = new ArrayList<>();
2054         CollectionResourceInstanceGroupCustomization collectionInstanceGroupCustomization =
2055                 new CollectionResourceInstanceGroupCustomization();
2056         collectionInstanceGroupCustomization.setSubInterfaceNetworkQuantity(3);
2057         collectionInstanceGroupCustomizations.add(collectionInstanceGroupCustomization);
2058         instanceGroup.setCollectionInstanceGroupCustomizations(collectionInstanceGroupCustomizations);
2059         collectionResource.setInstanceGroup(instanceGroup);
2060         collectionResourceCustomization.setCollectionResource(collectionResource);;
2061         service.setModelUUID("abc");
2062         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
2063         service.getCollectionResourceCustomizations().add(collectionResourceCustomization);
2064         doReturn(service).when(catalogDbClient).getServiceByID("3c40d244-808e-42ca-b09a-256d83d19d0a");
2065         doReturn(collectionResourceCustomization).when(catalogDbClient)
2066                 .getNetworkCollectionResourceCustomizationByID("123");
2067         String bpmnRequest = readBpmnRequestFromFile(MACRO_ACTIVATE_DELETE_UNASSIGN_JSON);
2068         ObjectMapper mapper = new ObjectMapper();
2069         ServiceInstancesRequest sIRequest = mapper.readValue(bpmnRequest, ServiceInstancesRequest.class);
2070         List<Resource> resourceCounter = new ArrayList<>();
2071         thrown.expect(BpmnError.class);
2072         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
2073         workflowAction.traverseCatalogDbService(execution, sIRequest, resourceCounter, aaiResourceIds);
2074     }
2075
2076
2077
2078     @Test
2079     public void findCatalogNetworkCollectionTest() {
2080         Service service = new Service();
2081         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
2082         networkCustomization.setModelCustomizationUUID("123");
2083         service.getCollectionResourceCustomizations().add(networkCustomization);
2084         doReturn(networkCustomization).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
2085         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
2086         assertNotNull(customization);
2087     }
2088
2089     @Test
2090     public void findCatalogNetworkCollectionEmptyTest() {
2091         Service service = new Service();
2092         NetworkCollectionResourceCustomization networkCustomization = new NetworkCollectionResourceCustomization();
2093         networkCustomization.setModelCustomizationUUID("123");
2094         service.getCollectionResourceCustomizations().add(networkCustomization);
2095         CollectionResourceCustomization customization = workflowAction.findCatalogNetworkCollection(execution, service);
2096         assertNull(customization);
2097     }
2098
2099     @Test
2100     public void findCatalogNetworkCollectionMoreThanOneTest() {
2101         Service service = new Service();
2102         NetworkCollectionResourceCustomization networkCustomization1 = new NetworkCollectionResourceCustomization();
2103         networkCustomization1.setModelCustomizationUUID("123");
2104         NetworkCollectionResourceCustomization networkCustomization2 = new NetworkCollectionResourceCustomization();
2105         networkCustomization2.setModelCustomizationUUID("321");
2106         service.getCollectionResourceCustomizations().add(networkCustomization1);
2107         service.getCollectionResourceCustomizations().add(networkCustomization2);
2108         doReturn(networkCustomization1).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("123");
2109         doReturn(networkCustomization2).when(catalogDbClient).getNetworkCollectionResourceCustomizationByID("321");
2110         workflowAction.findCatalogNetworkCollection(execution, service);
2111         assertEquals("Found multiple Network Collections in the Service model, only one per Service is supported.",
2112                 execution.getVariable("WorkflowActionErrorMessage"));
2113     }
2114
2115
2116     @Test
2117     public void traverseAAIServiceTest() {
2118         List<Resource> resourceCounter = new ArrayList<>();
2119         String resourceId = "si0";
2120         List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
2121
2122         ServiceInstance serviceInstanceAAI = new ServiceInstance();
2123         serviceInstanceAAI.setServiceInstanceId(resourceId);
2124
2125         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = setServiceInstance();
2126         setGenericVnf();
2127         setVfModule(true);
2128         setVolumeGroup();
2129         setL3Network();
2130         setCollection();
2131         setConfiguration();
2132
2133         Configuration config = new Configuration();
2134         config.setConfigurationId("testConfigurationId2");
2135         serviceInstance.getConfigurations().add(config);
2136
2137         Relationship relationship1 = new Relationship();
2138         relationship1.setRelatedTo("vnfc");
2139         RelationshipList relationshipList1 = new RelationshipList();
2140         relationshipList1.getRelationship().add(relationship1);
2141
2142         Relationship relationship2 = new Relationship();
2143         relationship2.setRelatedTo("vpn-binding");
2144         RelationshipList relationshipList2 = new RelationshipList();
2145         relationshipList2.getRelationship().add(relationship2);
2146
2147         org.onap.aai.domain.yang.Configuration aaiConfiguration1 = new org.onap.aai.domain.yang.Configuration();
2148         aaiConfiguration1.setConfigurationId("testConfigurationId");
2149         aaiConfiguration1.setRelationshipList(relationshipList1);
2150
2151         org.onap.aai.domain.yang.Configuration aaiConfiguration2 = new org.onap.aai.domain.yang.Configuration();
2152         aaiConfiguration2.setConfigurationId("testConfigurationId2");
2153         aaiConfiguration2.setRelationshipList(relationshipList1);
2154
2155         try {
2156             doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById(resourceId);
2157             doReturn(serviceInstance).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
2158             doReturn(Optional.of(aaiConfiguration1)).when(aaiConfigurationResources)
2159                     .getConfiguration("testConfigurationId");
2160             doReturn(Optional.of(aaiConfiguration2)).when(aaiConfigurationResources)
2161                     .getConfiguration("testConfigurationId2");
2162             workflowAction.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
2163             assertEquals(8, resourceCounter.size());
2164             assertTrue(resourceCounter.get(2).isBaseVfModule());
2165             assertThat(aaiResourceIds, sameBeanAs(getExpectedResourceIds()));
2166         } catch (Exception e) {
2167             fail("Unexpected exception was thrown.");
2168         }
2169     }
2170
2171     @Test
2172     public void foundRelatedTest() {
2173         List<Resource> resourceList = new ArrayList<>();
2174         resourceList.add(new Resource(WorkflowType.PNF, "model customization id", false));
2175         resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
2176         resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
2177         resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
2178
2179         assertEquals(workflowAction.foundRelated(resourceList), true);
2180     }
2181
2182     @Test
2183     public void containsWorkflowTypeTest() {
2184         List<Resource> resourceList = new ArrayList<>();
2185         resourceList.add(new Resource(WorkflowType.PNF, "resource id", false));
2186         resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
2187         resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
2188         resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
2189
2190         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.PNF), true);
2191         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.VNF), true);
2192         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORK), true);
2193         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION), true);
2194         assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.CONFIGURATION), false);
2195     }
2196
2197     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
2198         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
2199         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
2200         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VFMODULE, "testVfModuleId1"));
2201         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VOLUMEGROUP, "testVolumeGroupId1"));
2202         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORK, "testNetworkId1"));
2203         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.NETWORKCOLLECTION, "testId"));
2204         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId"));
2205         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.CONFIGURATION, "testConfigurationId2"));
2206         return resourceIds;
2207     }
2208
2209     private List<OrchestrationFlow> createFlowList(String... flowNames) {
2210         List<OrchestrationFlow> result = new ArrayList<>();
2211         int sequenceNumber = 1;
2212         for (String flowName : flowNames) {
2213             OrchestrationFlow orchFlow = new OrchestrationFlow();
2214             orchFlow.setFlowName(flowName);
2215             orchFlow.setSequenceNumber(sequenceNumber++);
2216             result.add(orchFlow);
2217         }
2218         return result;
2219     }
2220
2221     private void assertEqualsBulkFlowName(List<ExecuteBuildingBlock> ebbs, String... flowNames) {
2222         for (int i = 0; i < ebbs.size(); i++) {
2223             assertEquals(ebbs.get(i).getBuildingBlock().getBpmnFlowName(), flowNames[i]);
2224         }
2225     }
2226
2227     private void initExecution(String gAction, String bpmnRequest, boolean isAlaCarte) {
2228         execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
2229         execution.setVariable("requestAction", gAction);
2230         execution.setVariable("bpmnRequest", bpmnRequest);
2231         execution.setVariable("aLaCarte", isAlaCarte);
2232         execution.setVariable("apiVersion", "7");
2233     }
2234
2235     private String readBpmnRequestFromFile(String fileName) throws IOException {
2236         return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
2237     }
2238
2239     private List<Resource> prepareListWithResources() {
2240         List<Resource> resourceList = new ArrayList<>();
2241         resourceList.add(new Resource(WorkflowType.SERVICE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
2242         resourceList.add(new Resource(WorkflowType.VNF, "ab153b6e-c364-44c0-bef6-1f2982117f04", false));
2243         resourceList.add(new Resource(WorkflowType.VOLUMEGROUP, "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", false));
2244         resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
2245         resourceList.add(new Resource(WorkflowType.VFMODULE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
2246         resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
2247         return resourceList;
2248     }
2249 }