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