2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.bpmn.infrastructure.workflow.tasks;
23 import static org.junit.Assert.assertEquals;
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.doReturn;
27 import static org.mockito.Mockito.doThrow;
28 import static org.mockito.Mockito.when;
30 import java.util.ArrayList;
31 import java.util.HashMap;
32 import java.util.List;
34 import org.camunda.bpm.engine.delegate.BpmnError;
35 import org.junit.Before;
36 import org.junit.Ignore;
37 import org.junit.Test;
38 import org.mockito.ArgumentMatchers;
39 import org.mockito.InjectMocks;
40 import org.onap.so.bpmn.BaseTaskTest;
41 import org.onap.so.bpmn.common.BuildingBlockExecution;
42 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
44 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
45 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
46 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
47 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
48 import org.onap.so.db.catalog.beans.OrchestrationAction;
49 import org.onap.so.db.catalog.beans.OrchestrationStatus;
50 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
51 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
52 import org.onap.so.db.catalog.beans.ResourceType;
53 import org.springframework.beans.factory.annotation.Autowired;
56 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
58 protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
63 public void test_validateOrchestrationStatus() throws Exception {
64 String flowToBeCalled = "AssignServiceInstanceBB";
65 setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
67 execution.setVariable("flowToBeCalled", flowToBeCalled);
69 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
70 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
71 buildingBlockDetail.setId(1);
72 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
73 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
75 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
77 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
78 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
79 orchestrationStatusStateTransitionDirective.setId(1);
80 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
81 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
82 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
84 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
86 orchestrationStatusValidator.validateOrchestrationStatus(execution);
88 assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult"));
92 public void test_validateOrchestrationStatusConfiguration() throws Exception {
93 lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
94 String flowToBeCalled = "UnassignFabricConfigurationBB";
95 ServiceInstance si = setServiceInstance();
96 List<Configuration> configurations = new ArrayList<>();
97 Configuration config = new Configuration();
99 si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
100 config.setConfigurationId("configurationId");
101 config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
102 configurations.add(config);
103 si.setConfigurations(configurations);
105 execution.setVariable("flowToBeCalled", flowToBeCalled);
107 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
108 buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
109 buildingBlockDetail.setId(1);
110 buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
111 buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
113 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
115 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
116 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
117 orchestrationStatusStateTransitionDirective.setId(1);
118 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
119 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
120 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
122 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION, OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
124 orchestrationStatusValidator.validateOrchestrationStatus(execution);
126 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
130 public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
131 expectedException.expect(BpmnError.class);
133 String flowToBeCalled = "AssignServiceInstanceBB";
135 execution.setVariable("flowToBeCalled", flowToBeCalled);
137 doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
139 orchestrationStatusValidator.validateOrchestrationStatus(execution);
143 public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
144 expectedException.expect(BpmnError.class);
146 String flowToBeCalled = "AssignServiceInstanceBB";
148 execution.setVariable("flowToBeCalled", flowToBeCalled);
150 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
151 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
152 buildingBlockDetail.setId(1);
153 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
154 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
156 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
158 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
159 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
160 orchestrationStatusStateTransitionDirective.setId(1);
161 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
162 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
163 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
165 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
167 orchestrationStatusValidator.validateOrchestrationStatus(execution);
171 public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
172 expectedException.expect(BpmnError.class);
174 String flowToBeCalled = "AssignServiceInstanceBB";
176 execution.setVariable("flowToBeCalled", flowToBeCalled);
178 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
179 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
180 buildingBlockDetail.setId(1);
181 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
182 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
184 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
186 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
187 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
188 orchestrationStatusStateTransitionDirective.setId(1);
189 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
190 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
191 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
193 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
195 orchestrationStatusValidator.validateOrchestrationStatus(execution);
199 public void test_validateOrchestrationStatus_unassignNotFound() throws Exception{
200 String flowToBeCalled = "UnassignServiceInstanceBB";
202 execution.setVariable("flowToBeCalled", flowToBeCalled);
204 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
205 buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
206 buildingBlockDetail.setId(1);
207 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
208 buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
210 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
212 lookupKeyMap = new HashMap<ResourceKey, String>();
214 orchestrationStatusValidator.validateOrchestrationStatus(execution);
216 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,execution.getVariable("orchestrationStatusValidationResult"));
220 public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
221 String flowToBeCalled = "CreateVfModuleBB";
223 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
225 execution.setVariable("flowToBeCalled", flowToBeCalled);
227 GenericVnf genericVnf = buildGenericVnf();
228 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
229 modelInfoGenericVnf.setMultiStageDesign("true");
230 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
231 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
233 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
234 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
235 buildingBlockDetail.setId(1);
236 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
237 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
239 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
241 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
242 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
243 orchestrationStatusStateTransitionDirective.setId(1);
244 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
245 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
246 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
248 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
250 orchestrationStatusValidator.validateOrchestrationStatus(execution);
252 assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult"));
257 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
258 String flowToBeCalled = "CreateVfModuleBB";
260 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
262 execution.setVariable("flowToBeCalled", flowToBeCalled);
264 GenericVnf genericVnf = buildGenericVnf();
265 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
266 modelInfoGenericVnf.setMultiStageDesign("true");
267 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
268 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
270 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
271 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
272 buildingBlockDetail.setId(1);
273 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
274 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
276 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
278 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
279 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
280 orchestrationStatusStateTransitionDirective.setId(1);
281 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
282 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
283 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
285 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
287 orchestrationStatusValidator.validateOrchestrationStatus(execution);
289 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
293 public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
294 String flowToBeCalled = "CreateVfModuleBB";
296 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
298 execution.setVariable("flowToBeCalled", flowToBeCalled);
300 GenericVnf genericVnf = buildGenericVnf();
301 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
302 modelInfoGenericVnf.setMultiStageDesign("false");
303 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
304 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
306 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
307 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
308 buildingBlockDetail.setId(1);
309 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
310 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
312 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
314 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
315 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
316 orchestrationStatusStateTransitionDirective.setId(1);
317 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
318 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
319 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
321 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
323 orchestrationStatusValidator.validateOrchestrationStatus(execution);
325 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
329 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
330 String flowToBeCalled = "CreateVfModuleBB";
332 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
334 execution.setVariable("flowToBeCalled", flowToBeCalled);
336 GenericVnf genericVnf = buildGenericVnf();
337 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
338 modelInfoGenericVnf.setMultiStageDesign("true");
339 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
340 setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
342 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
343 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
344 buildingBlockDetail.setId(1);
345 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
346 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
348 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
350 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
351 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
352 orchestrationStatusStateTransitionDirective.setId(1);
353 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
354 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
355 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
357 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED, OrchestrationAction.CREATE);
359 orchestrationStatusValidator.validateOrchestrationStatus(execution);
361 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
365 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
366 String flowToBeCalled = "CreateVfModuleBB";
368 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
370 execution.setVariable("flowToBeCalled", flowToBeCalled);
372 GenericVnf genericVnf = buildGenericVnf();
373 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
374 modelInfoGenericVnf.setMultiStageDesign("true");
375 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
376 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
378 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
379 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
380 buildingBlockDetail.setId(1);
381 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
382 buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
384 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
386 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
387 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
388 orchestrationStatusStateTransitionDirective.setId(1);
389 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
390 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
391 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
393 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
395 orchestrationStatusValidator.validateOrchestrationStatus(execution);
397 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));