ffe48876c4dda5fbaa8a087cefc41b638ca61d28
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.workflow.tasks;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNull;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.doReturn;
28 import static org.mockito.Mockito.doThrow;
29 import static org.mockito.Mockito.when;
30 import java.util.ArrayList;
31 import java.util.HashMap;
32 import java.util.List;
33 import org.camunda.bpm.engine.delegate.BpmnError;
34 import org.junit.Before;
35 import org.junit.Ignore;
36 import org.junit.Test;
37 import org.mockito.ArgumentMatchers;
38 import org.mockito.InjectMocks;
39 import org.onap.so.bpmn.BaseTaskTest;
40 import org.onap.so.bpmn.common.BuildingBlockExecution;
41 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
42 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
44 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
45 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
46 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
47 import org.onap.so.db.catalog.beans.OrchestrationAction;
48 import org.onap.so.db.catalog.beans.OrchestrationStatus;
49 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
50 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
51 import org.onap.so.db.catalog.beans.ResourceType;
52 import org.springframework.beans.factory.annotation.Autowired;
53
54 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
55     @InjectMocks
56     protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
57
58
59
60     @Test
61     public void test_validateOrchestrationStatus() throws Exception {
62         String flowToBeCalled = "AssignServiceInstanceBB";
63         setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
64         execution.setVariable("aLaCarte", true);
65         execution.setVariable("flowToBeCalled", flowToBeCalled);
66
67         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
68         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
69         buildingBlockDetail.setId(1);
70         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
71         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
72
73         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
74
75         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance =
76                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
77         serviceInstance.setServiceInstanceId("serviceInstanceId");
78         serviceInstance.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
79         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
80                 .thenReturn(serviceInstance);
81
82         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
83                 new OrchestrationStatusStateTransitionDirective();
84         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
85         orchestrationStatusStateTransitionDirective.setId(1);
86         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
87         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
88         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
89
90         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
91                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
92                         OrchestrationAction.ASSIGN);
93
94         orchestrationStatusValidator.validateOrchestrationStatus(execution);
95
96         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
97                 execution.getVariable("orchestrationStatusValidationResult"));
98     }
99
100     @Test
101     public void test_validateOrchestrationStatusConfiguration() throws Exception {
102         lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
103         String flowToBeCalled = "UnassignFabricConfigurationBB";
104         ServiceInstance si = setServiceInstance();
105         List<Configuration> configurations = new ArrayList<>();
106         Configuration config = new Configuration();
107
108         si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
109         config.setConfigurationId("configurationId");
110         config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
111         configurations.add(config);
112         si.setConfigurations(configurations);
113
114         execution.setVariable("flowToBeCalled", flowToBeCalled);
115         execution.setVariable("aLaCarte", true);
116
117         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
118         buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
119         buildingBlockDetail.setId(1);
120         buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
121         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
122
123         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
124
125         org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration configuration =
126                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration();
127         configuration.setConfigurationId("configurationId");
128         configuration.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
129         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.CONFIGURATION_ID)))
130                 .thenReturn(configuration);
131
132         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
133                 new OrchestrationStatusStateTransitionDirective();
134         orchestrationStatusStateTransitionDirective
135                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
136         orchestrationStatusStateTransitionDirective.setId(1);
137         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
138         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
139         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
140
141         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
142                 .getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION,
143                         OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
144
145         orchestrationStatusValidator.validateOrchestrationStatus(execution);
146
147         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
148                 execution.getVariable("orchestrationStatusValidationResult"));
149     }
150
151     @Ignore
152     @Test
153     public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
154         expectedException.expect(BpmnError.class);
155
156         String flowToBeCalled = "AssignServiceInstanceBB";
157
158         execution.setVariable("flowToBeCalled", flowToBeCalled);
159
160         doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
161
162         orchestrationStatusValidator.validateOrchestrationStatus(execution);
163     }
164
165     @Ignore
166     @Test
167     public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
168         expectedException.expect(BpmnError.class);
169
170         String flowToBeCalled = "AssignServiceInstanceBB";
171
172         execution.setVariable("flowToBeCalled", flowToBeCalled);
173
174         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
175         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
176         buildingBlockDetail.setId(1);
177         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
178         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
179
180         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
181
182         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
183                 new OrchestrationStatusStateTransitionDirective();
184         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
185         orchestrationStatusStateTransitionDirective.setId(1);
186         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
187         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
188         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
189
190         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
191                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
192                         OrchestrationAction.ASSIGN);
193
194         orchestrationStatusValidator.validateOrchestrationStatus(execution);
195     }
196
197     @Ignore
198     @Test
199     public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
200         expectedException.expect(BpmnError.class);
201
202         String flowToBeCalled = "AssignServiceInstanceBB";
203
204         execution.setVariable("flowToBeCalled", flowToBeCalled);
205
206         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
207         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
208         buildingBlockDetail.setId(1);
209         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
210         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
211
212         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
213
214         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
215                 new OrchestrationStatusStateTransitionDirective();
216         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
217         orchestrationStatusStateTransitionDirective.setId(1);
218         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
219         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
220         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
221
222         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
223                 .getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED,
224                         OrchestrationAction.ASSIGN);
225
226         orchestrationStatusValidator.validateOrchestrationStatus(execution);
227     }
228
229     @Test
230     public void test_validateOrchestrationStatus_unassignNotFound() throws Exception {
231         String flowToBeCalled = "UnassignServiceInstanceBB";
232
233         execution.setVariable("flowToBeCalled", flowToBeCalled);
234         execution.setVariable("aLaCarte", true);
235
236         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
237         buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
238         buildingBlockDetail.setId(1);
239         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
240         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
241
242         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
243
244         lookupKeyMap = new HashMap<ResourceKey, String>();
245
246         orchestrationStatusValidator.validateOrchestrationStatus(execution);
247
248         assertNull(execution.getVariable("orchestrationStatusValidationResult"));
249     }
250
251     @Test
252     public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
253         String flowToBeCalled = "CreateVfModuleBB";
254
255         execution.setVariable("orchestrationStatusValidationResult",
256                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
257         execution.setVariable("aLaCarte", true);
258         execution.setVariable("flowToBeCalled", flowToBeCalled);
259
260         GenericVnf genericVnf = buildGenericVnf();
261         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
262         modelInfoGenericVnf.setMultiStageDesign("true");
263         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
264         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
265
266         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
267                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
268         vfModule.setVfModuleId("vfModuleId");
269         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
270         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
271
272         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
273         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
274         buildingBlockDetail.setId(1);
275         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
276         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
277
278         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
279
280         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
281                 new OrchestrationStatusStateTransitionDirective();
282         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
283         orchestrationStatusStateTransitionDirective.setId(1);
284         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
285         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
286         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
287
288         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
289                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
290                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
291
292         orchestrationStatusValidator.validateOrchestrationStatus(execution);
293
294         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
295                 execution.getVariable("orchestrationStatusValidationResult"));
296     }
297
298
299     @Test
300     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
301         String flowToBeCalled = "CreateVfModuleBB";
302
303         execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
304         execution.setVariable("aLaCarte", true);
305         execution.setVariable("flowToBeCalled", flowToBeCalled);
306
307         GenericVnf genericVnf = buildGenericVnf();
308         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
309         modelInfoGenericVnf.setMultiStageDesign("true");
310         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
311         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
312
313         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
314                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
315         vfModule.setVfModuleId("vfModuleId");
316         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
317         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
318
319         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
320         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
321         buildingBlockDetail.setId(1);
322         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
323         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
324
325         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
326
327         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
328                 new OrchestrationStatusStateTransitionDirective();
329         orchestrationStatusStateTransitionDirective
330                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
331         orchestrationStatusStateTransitionDirective.setId(1);
332         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
333         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
334         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
335
336         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
337                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
338                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
339
340         orchestrationStatusValidator.validateOrchestrationStatus(execution);
341
342         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
343                 execution.getVariable("orchestrationStatusValidationResult"));
344     }
345
346     @Test
347     public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
348         String flowToBeCalled = "CreateVfModuleBB";
349
350         execution.setVariable("orchestrationStatusValidationResult",
351                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
352         execution.setVariable("aLaCarte", true);
353         execution.setVariable("flowToBeCalled", flowToBeCalled);
354
355         GenericVnf genericVnf = buildGenericVnf();
356         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
357         modelInfoGenericVnf.setMultiStageDesign("false");
358         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
359         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
360
361         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
362         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
363         buildingBlockDetail.setId(1);
364         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
365         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
366
367         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
368
369         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
370                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
371         vfModule.setVfModuleId("vfModuleId");
372         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
373         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
374
375         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
376                 new OrchestrationStatusStateTransitionDirective();
377         orchestrationStatusStateTransitionDirective
378                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
379         orchestrationStatusStateTransitionDirective.setId(1);
380         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
381         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
382         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
383
384         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
385                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
386                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
387
388         orchestrationStatusValidator.validateOrchestrationStatus(execution);
389
390         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
391                 execution.getVariable("orchestrationStatusValidationResult"));
392     }
393
394     @Test
395     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
396         String flowToBeCalled = "CreateVfModuleBB";
397
398         execution.setVariable("orchestrationStatusValidationResult",
399                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
400         execution.setVariable("aLaCarte", true);
401         execution.setVariable("flowToBeCalled", flowToBeCalled);
402
403         GenericVnf genericVnf = buildGenericVnf();
404         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
405         modelInfoGenericVnf.setMultiStageDesign("true");
406         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
407         setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
408
409         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
410         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
411         buildingBlockDetail.setId(1);
412         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
413         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
414
415         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
416
417         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
418                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
419         vfModule.setVfModuleId("vfModuleId");
420         vfModule.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
421         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
422
423         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
424                 new OrchestrationStatusStateTransitionDirective();
425         orchestrationStatusStateTransitionDirective
426                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
427         orchestrationStatusStateTransitionDirective.setId(1);
428         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
429         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
430         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
431
432         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
433                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED,
434                         OrchestrationAction.CREATE);
435
436         orchestrationStatusValidator.validateOrchestrationStatus(execution);
437
438         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
439                 execution.getVariable("orchestrationStatusValidationResult"));
440     }
441
442     @Test
443     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
444         String flowToBeCalled = "CreateVfModuleBB";
445
446         execution.setVariable("orchestrationStatusValidationResult",
447                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
448         execution.setVariable("aLaCarte", true);
449         execution.setVariable("flowToBeCalled", flowToBeCalled);
450
451         GenericVnf genericVnf = buildGenericVnf();
452         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
453         modelInfoGenericVnf.setMultiStageDesign("true");
454         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
455         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
456
457         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
458         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
459         buildingBlockDetail.setId(1);
460         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
461         buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
462
463         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
464
465         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
466                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
467         vfModule.setVfModuleId("vfModuleId");
468         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
469         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
470
471         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
472                 new OrchestrationStatusStateTransitionDirective();
473         orchestrationStatusStateTransitionDirective
474                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
475         orchestrationStatusStateTransitionDirective.setId(1);
476         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
477         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
478         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
479
480         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
481                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
482                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
483
484         orchestrationStatusValidator.validateOrchestrationStatus(execution);
485
486         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
487                 execution.getVariable("orchestrationStatusValidationResult"));
488     }
489
490     @Test
491     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongAlacarteValueVfModule() throws Exception {
492         String flowToBeCalled = "CreateVfModuleBB";
493
494         execution.setVariable("orchestrationStatusValidationResult",
495                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
496         execution.setVariable("aLaCarte", false);
497         execution.setVariable("flowToBeCalled", flowToBeCalled);
498
499         GenericVnf genericVnf = buildGenericVnf();
500         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
501         modelInfoGenericVnf.setMultiStageDesign("true");
502         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
503         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
504
505         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
506         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
507         buildingBlockDetail.setId(1);
508         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
509         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
510
511         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
512
513         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
514                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
515         vfModule.setVfModuleId("vfModuleId");
516         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
517         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
518
519         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
520                 new OrchestrationStatusStateTransitionDirective();
521         orchestrationStatusStateTransitionDirective
522                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
523         orchestrationStatusStateTransitionDirective.setId(1);
524         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
525         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
526         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
527
528         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
529                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
530                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
531
532         orchestrationStatusValidator.validateOrchestrationStatus(execution);
533
534         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
535                 execution.getVariable("orchestrationStatusValidationResult"));
536     }
537
538     @Test
539     public void continueValidationActivatedTest() throws Exception {
540         String flowToBeCalled = "DeactivateVnfBB";
541         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
542         buildingBlockDetail.setBuildingBlockName(flowToBeCalled);
543         buildingBlockDetail.setId(1);
544         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
545         buildingBlockDetail.setTargetAction(OrchestrationAction.DEACTIVATE);
546         when(catalogDbClient.getBuildingBlockDetail(flowToBeCalled)).thenReturn(buildingBlockDetail);
547
548         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
549                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
550         vfModule.setVfModuleId("vfModuleId");
551         vfModule.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
552         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
553
554         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
555                 new OrchestrationStatusStateTransitionDirective();
556         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
557         orchestrationStatusStateTransitionDirective.setId(1);
558         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
559         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
560         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.DEACTIVATE);
561         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
562                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ACTIVATED,
563                         OrchestrationAction.DEACTIVATE);
564
565         execution.setVariable("aLaCarte", true);
566         execution.setVariable("flowToBeCalled", flowToBeCalled);
567         orchestrationStatusValidator.validateOrchestrationStatus(execution);
568
569         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
570                 execution.getVariable("orchestrationStatusValidationResult"));
571     }
572 }