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.Mockito.doReturn;
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
30 import org.camunda.bpm.engine.delegate.BpmnError;
31 import org.junit.Test;
32 import org.onap.so.bpmn.BaseTaskTest;
33 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
34 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
36 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
37 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
38 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
39 import org.onap.so.db.catalog.beans.OrchestrationAction;
40 import org.onap.so.db.catalog.beans.OrchestrationStatus;
41 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
42 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
43 import org.onap.so.db.catalog.beans.ResourceType;
44 import org.springframework.beans.factory.annotation.Autowired;
46 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
48 protected OrchestrationStatusValidator orchestrationStatusValidator;
51 public void test_validateOrchestrationStatus() throws Exception {
52 String flowToBeCalled = "AssignServiceInstanceBB";
53 setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
55 execution.setVariable("flowToBeCalled", flowToBeCalled);
57 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
58 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
59 buildingBlockDetail.setId(1);
60 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
61 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
63 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
65 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
66 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
67 orchestrationStatusStateTransitionDirective.setId(1);
68 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
69 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
70 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
72 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
74 orchestrationStatusValidator.validateOrchestrationStatus(execution);
76 assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult"));
80 public void test_validateOrchestrationStatusConfiguration() throws Exception {
81 lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
82 String flowToBeCalled = "UnassignFabricConfigurationBB";
83 ServiceInstance si = setServiceInstance();
84 List<Configuration> configurations = new ArrayList<>();
85 Configuration config = new Configuration();
87 si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
88 config.setConfigurationId("configurationId");
89 config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
90 configurations.add(config);
91 si.setConfigurations(configurations);
93 execution.setVariable("flowToBeCalled", flowToBeCalled);
95 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
96 buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
97 buildingBlockDetail.setId(1);
98 buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
99 buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
101 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
103 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
104 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
105 orchestrationStatusStateTransitionDirective.setId(1);
106 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
107 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
108 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
110 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION, OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
112 orchestrationStatusValidator.validateOrchestrationStatus(execution);
114 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
118 public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
119 expectedException.expect(BpmnError.class);
121 String flowToBeCalled = "AssignServiceInstanceBB";
123 execution.setVariable("flowToBeCalled", flowToBeCalled);
125 doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
127 orchestrationStatusValidator.validateOrchestrationStatus(execution);
131 public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
132 expectedException.expect(BpmnError.class);
134 String flowToBeCalled = "AssignServiceInstanceBB";
136 execution.setVariable("flowToBeCalled", flowToBeCalled);
138 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
139 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
140 buildingBlockDetail.setId(1);
141 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
142 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
144 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
146 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
147 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
148 orchestrationStatusStateTransitionDirective.setId(1);
149 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
150 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
151 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
153 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
155 orchestrationStatusValidator.validateOrchestrationStatus(execution);
159 public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
160 expectedException.expect(BpmnError.class);
162 String flowToBeCalled = "AssignServiceInstanceBB";
164 execution.setVariable("flowToBeCalled", flowToBeCalled);
166 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
167 buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
168 buildingBlockDetail.setId(1);
169 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
170 buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
172 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
174 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
175 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
176 orchestrationStatusStateTransitionDirective.setId(1);
177 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
178 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
179 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
181 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED, OrchestrationAction.ASSIGN);
183 orchestrationStatusValidator.validateOrchestrationStatus(execution);
187 public void test_validateOrchestrationStatus_unassignNotFound() throws Exception{
188 String flowToBeCalled = "UnassignServiceInstanceBB";
190 execution.setVariable("flowToBeCalled", flowToBeCalled);
192 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
193 buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
194 buildingBlockDetail.setId(1);
195 buildingBlockDetail.setResourceType(ResourceType.SERVICE);
196 buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
198 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
200 lookupKeyMap = new HashMap<ResourceKey, String>();
202 orchestrationStatusValidator.validateOrchestrationStatus(execution);
204 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,execution.getVariable("orchestrationStatusValidationResult"));
208 public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
209 String flowToBeCalled = "CreateVfModuleBB";
211 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
213 execution.setVariable("flowToBeCalled", flowToBeCalled);
215 GenericVnf genericVnf = buildGenericVnf();
216 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
217 modelInfoGenericVnf.setMultiStageDesign("true");
218 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
219 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
221 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
222 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
223 buildingBlockDetail.setId(1);
224 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
225 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
227 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
229 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
230 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
231 orchestrationStatusStateTransitionDirective.setId(1);
232 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
233 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
234 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
236 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
238 orchestrationStatusValidator.validateOrchestrationStatus(execution);
240 assertEquals(OrchestrationStatusValidationDirective.CONTINUE, execution.getVariable("orchestrationStatusValidationResult"));
245 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
246 String flowToBeCalled = "CreateVfModuleBB";
248 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
250 execution.setVariable("flowToBeCalled", flowToBeCalled);
252 GenericVnf genericVnf = buildGenericVnf();
253 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
254 modelInfoGenericVnf.setMultiStageDesign("true");
255 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
256 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
258 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
259 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
260 buildingBlockDetail.setId(1);
261 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
262 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
264 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
266 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
267 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
268 orchestrationStatusStateTransitionDirective.setId(1);
269 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
270 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
271 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
273 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
275 orchestrationStatusValidator.validateOrchestrationStatus(execution);
277 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
281 public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
282 String flowToBeCalled = "CreateVfModuleBB";
284 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
286 execution.setVariable("flowToBeCalled", flowToBeCalled);
288 GenericVnf genericVnf = buildGenericVnf();
289 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
290 modelInfoGenericVnf.setMultiStageDesign("false");
291 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
292 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
294 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
295 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
296 buildingBlockDetail.setId(1);
297 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
298 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
300 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
302 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
303 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
304 orchestrationStatusStateTransitionDirective.setId(1);
305 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
306 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
307 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
309 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
311 orchestrationStatusValidator.validateOrchestrationStatus(execution);
313 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
317 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
318 String flowToBeCalled = "CreateVfModuleBB";
320 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
322 execution.setVariable("flowToBeCalled", flowToBeCalled);
324 GenericVnf genericVnf = buildGenericVnf();
325 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
326 modelInfoGenericVnf.setMultiStageDesign("true");
327 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
328 setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
330 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
331 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
332 buildingBlockDetail.setId(1);
333 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
334 buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
336 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
338 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
339 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
340 orchestrationStatusStateTransitionDirective.setId(1);
341 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
342 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
343 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
345 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED, OrchestrationAction.CREATE);
347 orchestrationStatusValidator.validateOrchestrationStatus(execution);
349 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));
353 public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
354 String flowToBeCalled = "CreateVfModuleBB";
356 execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.SILENT_SUCCESS);
358 execution.setVariable("flowToBeCalled", flowToBeCalled);
360 GenericVnf genericVnf = buildGenericVnf();
361 ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
362 modelInfoGenericVnf.setMultiStageDesign("true");
363 setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
364 setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
366 BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
367 buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
368 buildingBlockDetail.setId(1);
369 buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
370 buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
372 doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
374 OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective = new OrchestrationStatusStateTransitionDirective();
375 orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
376 orchestrationStatusStateTransitionDirective.setId(1);
377 orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
378 orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
379 orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
381 doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient).getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
383 orchestrationStatusValidator.validateOrchestrationStatus(execution);
385 assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS, execution.getVariable("orchestrationStatusValidationResult"));