b9feeedc143a5ec17d965a006589938f29f5b894
[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.ArgumentCaptor;
38 import org.mockito.ArgumentMatchers;
39 import org.mockito.InjectMocks;
40 import org.mockito.Mockito;
41 import org.onap.so.bpmn.BaseTaskTest;
42 import org.onap.so.bpmn.common.BuildingBlockExecution;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
44 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
45 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
46 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
47 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
48 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
49 import org.onap.so.db.catalog.beans.OrchestrationAction;
50 import org.onap.so.db.catalog.beans.OrchestrationStatus;
51 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
52 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
53 import org.onap.so.db.catalog.beans.ResourceType;
54 import org.onap.so.db.request.beans.InfraActiveRequests;
55 import org.springframework.beans.factory.annotation.Autowired;
56
57 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
58
59     private static final String vfModuleExistExpectedMessage =
60             "The VfModule was found to already exist, thus no new VfModule was created in the cloud via this request";
61
62     private static final String vfModuleNotExistExpectedMessage =
63             "The VfModule was not found, thus no VfModule was deleted in the cloud via this request";
64
65     @InjectMocks
66     protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
67
68     @Test
69     public void test_validateOrchestrationStatus() throws Exception {
70         String flowToBeCalled = "AssignServiceInstanceBB";
71         setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
72         execution.setVariable("aLaCarte", true);
73         execution.setVariable("flowToBeCalled", flowToBeCalled);
74
75         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
76         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
77         buildingBlockDetail.setId(1);
78         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
79         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
80
81         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
82
83         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance =
84                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
85         serviceInstance.setServiceInstanceId("serviceInstanceId");
86         serviceInstance.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
87         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
88                 .thenReturn(serviceInstance);
89
90         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
91                 new OrchestrationStatusStateTransitionDirective();
92         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
93         orchestrationStatusStateTransitionDirective.setId(1);
94         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
95         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
96         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
97
98         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
99                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
100                         OrchestrationAction.ASSIGN);
101
102         orchestrationStatusValidator.validateOrchestrationStatus(execution);
103
104         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
105                 execution.getVariable("orchestrationStatusValidationResult"));
106
107         Mockito.verifyZeroInteractions(requestsDbClient);
108     }
109
110     @Test
111     public void test_validateOrchestrationStatusConfiguration() throws Exception {
112         lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
113         String flowToBeCalled = "UnassignFabricConfigurationBB";
114         ServiceInstance si = setServiceInstance();
115         List<Configuration> configurations = new ArrayList<>();
116         Configuration config = new Configuration();
117
118         si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
119         config.setConfigurationId("configurationId");
120         config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
121         configurations.add(config);
122         si.setConfigurations(configurations);
123
124         execution.setVariable("flowToBeCalled", flowToBeCalled);
125         execution.setVariable("aLaCarte", true);
126
127         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
128         buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
129         buildingBlockDetail.setId(1);
130         buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
131         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
132
133         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
134
135         org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration configuration =
136                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration();
137         configuration.setConfigurationId("configurationId");
138         configuration.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
139         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.CONFIGURATION_ID)))
140                 .thenReturn(configuration);
141
142         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
143                 new OrchestrationStatusStateTransitionDirective();
144         orchestrationStatusStateTransitionDirective
145                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
146         orchestrationStatusStateTransitionDirective.setId(1);
147         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
148         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
149         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
150
151         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
152                 .getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION,
153                         OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
154
155         orchestrationStatusValidator.validateOrchestrationStatus(execution);
156
157         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
158                 execution.getVariable("orchestrationStatusValidationResult"));
159
160         Mockito.verifyZeroInteractions(requestsDbClient);
161     }
162
163     @Ignore
164     @Test
165     public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
166         expectedException.expect(BpmnError.class);
167
168         String flowToBeCalled = "AssignServiceInstanceBB";
169
170         execution.setVariable("flowToBeCalled", flowToBeCalled);
171
172         doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
173
174         orchestrationStatusValidator.validateOrchestrationStatus(execution);
175     }
176
177     @Ignore
178     @Test
179     public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
180         expectedException.expect(BpmnError.class);
181
182         String flowToBeCalled = "AssignServiceInstanceBB";
183
184         execution.setVariable("flowToBeCalled", flowToBeCalled);
185
186         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
187         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
188         buildingBlockDetail.setId(1);
189         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
190         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
191
192         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
193
194         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
195                 new OrchestrationStatusStateTransitionDirective();
196         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
197         orchestrationStatusStateTransitionDirective.setId(1);
198         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
199         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
200         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
201
202         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
203                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
204                         OrchestrationAction.ASSIGN);
205
206         orchestrationStatusValidator.validateOrchestrationStatus(execution);
207
208         Mockito.verifyZeroInteractions(requestsDbClient);
209     }
210
211     @Ignore
212     @Test
213     public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
214         expectedException.expect(BpmnError.class);
215
216         String flowToBeCalled = "AssignServiceInstanceBB";
217
218         execution.setVariable("flowToBeCalled", flowToBeCalled);
219
220         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
221         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
222         buildingBlockDetail.setId(1);
223         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
224         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
225
226         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
227
228         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
229                 new OrchestrationStatusStateTransitionDirective();
230         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
231         orchestrationStatusStateTransitionDirective.setId(1);
232         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
233         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
234         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
235
236         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
237                 .getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED,
238                         OrchestrationAction.ASSIGN);
239
240         orchestrationStatusValidator.validateOrchestrationStatus(execution);
241
242         Mockito.verifyZeroInteractions(requestsDbClient);
243     }
244
245     @Test
246     public void test_validateOrchestrationStatus_unassignNotFound() throws Exception {
247         String flowToBeCalled = "UnassignServiceInstanceBB";
248
249         execution.setVariable("flowToBeCalled", flowToBeCalled);
250         execution.setVariable("aLaCarte", true);
251
252         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
253         buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
254         buildingBlockDetail.setId(1);
255         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
256         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
257
258         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
259
260         lookupKeyMap = new HashMap<ResourceKey, String>();
261
262         orchestrationStatusValidator.validateOrchestrationStatus(execution);
263
264         assertNull(execution.getVariable("orchestrationStatusValidationResult"));
265     }
266
267     @Test
268     public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
269         String flowToBeCalled = "CreateVfModuleBB";
270
271         execution.setVariable("orchestrationStatusValidationResult",
272                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
273         execution.setVariable("aLaCarte", true);
274         execution.setVariable("flowToBeCalled", flowToBeCalled);
275
276         GenericVnf genericVnf = buildGenericVnf();
277         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
278         modelInfoGenericVnf.setMultiStageDesign("true");
279         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
280         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
281
282         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
283                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
284         vfModule.setVfModuleId("vfModuleId");
285         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
286         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
287
288         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
289         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
290         buildingBlockDetail.setId(1);
291         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
292         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
293
294         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
295
296         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
297                 new OrchestrationStatusStateTransitionDirective();
298         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
299         orchestrationStatusStateTransitionDirective.setId(1);
300         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
301         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
302         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
303
304         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
305                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
306                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
307
308         orchestrationStatusValidator.validateOrchestrationStatus(execution);
309
310         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
311                 execution.getVariable("orchestrationStatusValidationResult"));
312
313         Mockito.verifyZeroInteractions(requestsDbClient);
314     }
315
316
317     @Test
318     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
319         String flowToBeCalled = "CreateVfModuleBB";
320
321         execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
322         execution.setVariable("aLaCarte", true);
323         execution.setVariable("flowToBeCalled", flowToBeCalled);
324
325         GenericVnf genericVnf = buildGenericVnf();
326         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
327         modelInfoGenericVnf.setMultiStageDesign("true");
328         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
329         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
330
331         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
332                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
333         vfModule.setVfModuleId("vfModuleId");
334         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
335         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
336
337         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
338         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
339         buildingBlockDetail.setId(1);
340         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
341         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
342
343         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
344
345         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
346                 new OrchestrationStatusStateTransitionDirective();
347         orchestrationStatusStateTransitionDirective
348                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
349         orchestrationStatusStateTransitionDirective.setId(1);
350         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
351         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
352         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
353
354         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
355                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
356                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
357
358         InfraActiveRequests request = new InfraActiveRequests();
359         request.setRequestId("testVfModuleId1");
360         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
361
362         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
363
364         orchestrationStatusValidator.validateOrchestrationStatus(execution);
365
366         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
367                 execution.getVariable("orchestrationStatusValidationResult"));
368
369         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
370         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
371
372         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
373     }
374
375     @Test
376     public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
377         String flowToBeCalled = "CreateVfModuleBB";
378
379         execution.setVariable("orchestrationStatusValidationResult",
380                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
381         execution.setVariable("aLaCarte", true);
382         execution.setVariable("flowToBeCalled", flowToBeCalled);
383
384         GenericVnf genericVnf = buildGenericVnf();
385         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
386         modelInfoGenericVnf.setMultiStageDesign("false");
387         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
388         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
389
390         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
391         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
392         buildingBlockDetail.setId(1);
393         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
394         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
395
396         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
397
398         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
399                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
400         vfModule.setVfModuleId("vfModuleId");
401         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
402         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
403
404         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
405                 new OrchestrationStatusStateTransitionDirective();
406         orchestrationStatusStateTransitionDirective
407                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
408         orchestrationStatusStateTransitionDirective.setId(1);
409         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
410         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
411         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
412
413         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
414                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
415                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
416
417         InfraActiveRequests request = new InfraActiveRequests();
418         request.setRequestId("testVfModuleId1");
419         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
420
421         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
422
423         orchestrationStatusValidator.validateOrchestrationStatus(execution);
424
425         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
426                 execution.getVariable("orchestrationStatusValidationResult"));
427
428         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
429         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
430
431         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
432     }
433
434     @Test
435     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
436         String flowToBeCalled = "CreateVfModuleBB";
437
438         execution.setVariable("orchestrationStatusValidationResult",
439                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
440         execution.setVariable("aLaCarte", true);
441         execution.setVariable("flowToBeCalled", flowToBeCalled);
442
443         GenericVnf genericVnf = buildGenericVnf();
444         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
445         modelInfoGenericVnf.setMultiStageDesign("true");
446         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
447         setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
448
449         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
450         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
451         buildingBlockDetail.setId(1);
452         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
453         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
454
455         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
456
457         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
458                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
459         vfModule.setVfModuleId("vfModuleId");
460         vfModule.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
461         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
462
463         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
464                 new OrchestrationStatusStateTransitionDirective();
465         orchestrationStatusStateTransitionDirective
466                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
467         orchestrationStatusStateTransitionDirective.setId(1);
468         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
469         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
470         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
471
472         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
473                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED,
474                         OrchestrationAction.CREATE);
475
476         InfraActiveRequests request = new InfraActiveRequests();
477         request.setRequestId("testVfModuleId1");
478         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
479
480         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
481
482         orchestrationStatusValidator.validateOrchestrationStatus(execution);
483
484         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
485                 execution.getVariable("orchestrationStatusValidationResult"));
486
487         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
488         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
489
490         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
491     }
492
493     @Test
494     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
495         String flowToBeCalled = "CreateVfModuleBB";
496
497         execution.setVariable("orchestrationStatusValidationResult",
498                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
499         execution.setVariable("aLaCarte", true);
500         execution.setVariable("flowToBeCalled", flowToBeCalled);
501
502         GenericVnf genericVnf = buildGenericVnf();
503         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
504         modelInfoGenericVnf.setMultiStageDesign("true");
505         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
506         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
507
508         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
509         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
510         buildingBlockDetail.setId(1);
511         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
512         buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
513
514         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
515
516         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
517                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
518         vfModule.setVfModuleId("vfModuleId");
519         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
520         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
521
522         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
523                 new OrchestrationStatusStateTransitionDirective();
524         orchestrationStatusStateTransitionDirective
525                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
526         orchestrationStatusStateTransitionDirective.setId(1);
527         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
528         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
529         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
530
531         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
532                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
533                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
534
535         InfraActiveRequests request = new InfraActiveRequests();
536         request.setRequestId("testVfModuleId1");
537         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
538
539         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
540
541         orchestrationStatusValidator.validateOrchestrationStatus(execution);
542
543         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
544                 execution.getVariable("orchestrationStatusValidationResult"));
545
546         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
547         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
548
549         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
550     }
551
552     @Test
553     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongAlacarteValueVfModule() throws Exception {
554         String flowToBeCalled = "CreateVfModuleBB";
555
556         execution.setVariable("orchestrationStatusValidationResult",
557                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
558         execution.setVariable("aLaCarte", false);
559         execution.setVariable("flowToBeCalled", flowToBeCalled);
560
561         GenericVnf genericVnf = buildGenericVnf();
562         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
563         modelInfoGenericVnf.setMultiStageDesign("true");
564         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
565         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
566
567         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
568         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
569         buildingBlockDetail.setId(1);
570         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
571         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
572
573         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
574
575         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
576                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
577         vfModule.setVfModuleId("vfModuleId");
578         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
579         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
580
581         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
582                 new OrchestrationStatusStateTransitionDirective();
583         orchestrationStatusStateTransitionDirective
584                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
585         orchestrationStatusStateTransitionDirective.setId(1);
586         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
587         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
588         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
589
590         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
591                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
592                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
593
594         InfraActiveRequests request = new InfraActiveRequests();
595         request.setRequestId("testVfModuleId1");
596         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
597
598         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
599
600         orchestrationStatusValidator.validateOrchestrationStatus(execution);
601
602         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
603                 execution.getVariable("orchestrationStatusValidationResult"));
604
605         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
606         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
607
608         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
609     }
610
611     @Test
612     public void continueValidationActivatedTest() throws Exception {
613         String flowToBeCalled = "DeactivateVnfBB";
614         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
615         buildingBlockDetail.setBuildingBlockName(flowToBeCalled);
616         buildingBlockDetail.setId(1);
617         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
618         buildingBlockDetail.setTargetAction(OrchestrationAction.DEACTIVATE);
619         when(catalogDbClient.getBuildingBlockDetail(flowToBeCalled)).thenReturn(buildingBlockDetail);
620
621         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
622                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
623         vfModule.setVfModuleId("vfModuleId");
624         vfModule.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
625         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
626
627         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
628                 new OrchestrationStatusStateTransitionDirective();
629         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
630         orchestrationStatusStateTransitionDirective.setId(1);
631         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
632         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
633         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.DEACTIVATE);
634         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
635                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ACTIVATED,
636                         OrchestrationAction.DEACTIVATE);
637
638         execution.setVariable("aLaCarte", true);
639         execution.setVariable("flowToBeCalled", flowToBeCalled);
640         orchestrationStatusValidator.validateOrchestrationStatus(execution);
641
642         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
643                 execution.getVariable("orchestrationStatusValidationResult"));
644
645         Mockito.verifyZeroInteractions(requestsDbClient);
646     }
647
648     @Test
649     public void test_validateOrchestrationStatusDeleteVfModuleSilentSuccess() throws Exception {
650         String flowToBeCalled = "DeleteVfModuleBB";
651
652         execution.setVariable("orchestrationStatusValidationResult",
653                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
654         execution.setVariable("aLaCarte", true);
655         execution.setVariable("flowToBeCalled", flowToBeCalled);
656
657         GenericVnf genericVnf = buildGenericVnf();
658         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
659         modelInfoGenericVnf.setMultiStageDesign("true");
660         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
661         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
662
663         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
664                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
665         vfModule.setVfModuleId("vfModuleId");
666         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
667         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
668
669         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
670         buildingBlockDetail.setBuildingBlockName("DeleteVfModuleBB");
671         buildingBlockDetail.setId(1);
672         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
673         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
674
675         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
676
677         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
678                 new OrchestrationStatusStateTransitionDirective();
679         orchestrationStatusStateTransitionDirective
680                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
681         orchestrationStatusStateTransitionDirective.setId(1);
682         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
683         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
684         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
685
686         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
687                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
688                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
689
690         InfraActiveRequests request = new InfraActiveRequests();
691         request.setRequestId("testVfModuleId1");
692         request.setResourceStatusMessage(vfModuleNotExistExpectedMessage);
693
694         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
695
696         orchestrationStatusValidator.validateOrchestrationStatus(execution);
697
698         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
699                 execution.getVariable("orchestrationStatusValidationResult"));
700
701         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
702         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
703
704         assertEquals(vfModuleNotExistExpectedMessage, argument.getValue().getResourceStatusMessage());
705     }
706 }