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.servicedecomposition.tasks;
23 import static org.junit.Assert.assertEquals;
24 import static org.mockito.ArgumentMatchers.eq;
25 import static org.mockito.ArgumentMatchers.isA;
26 import static org.mockito.Mockito.doReturn;
27 import static org.mockito.Mockito.doThrow;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.when;
30 import org.camunda.bpm.engine.delegate.BpmnError;
31 import org.camunda.bpm.engine.delegate.DelegateExecution;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.so.BaseTest;
35 import org.onap.so.bpmn.core.WorkflowException;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
38 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
39 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
40 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
41 import org.onap.so.constants.Status;
42 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
43 import org.springframework.beans.factory.annotation.Autowired;
45 public class ExecuteBuildlingBlockRainyDayTest extends BaseTest {
47 private ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
49 private ServiceInstance serviceInstance;
50 private Customer customer; // will build service sub
51 private GenericVnf vnf;
52 private BuildingBlock buildingBlock;
53 private ExecuteBuildingBlock executeBuildingBlock;
54 private static final String ASTERISK = "*";
57 public void before() {
58 serviceInstance = setServiceInstance();
59 customer = setCustomer();
60 vnf = setGenericVnf();
62 buildingBlock = new BuildingBlock();
63 buildingBlock.setBpmnFlowName("AssignServiceInstanceBB");
65 executeBuildingBlock = new ExecuteBuildingBlock();
66 executeBuildingBlock.setBuildingBlock(buildingBlock);
68 delegateExecution.setVariable("gBBInput", gBBInput);
69 delegateExecution.setVariable("WorkflowException", new WorkflowException("", 7000, ""));
70 delegateExecution.setVariable("buildingBlock", executeBuildingBlock);
71 delegateExecution.setVariable("lookupKeyMap", lookupKeyMap);
73 delegateExecution.setVariable("WorkflowException", new WorkflowException("processKey", 7000, "errorMessage"));
77 public void setRetryTimerTest() throws Exception {
78 delegateExecution.setVariable("retryCount", 2);
79 executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
80 assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
84 public void setRetryTimerExceptionTest() {
85 expectedException.expect(BpmnError.class);
86 DelegateExecution execution = mock(DelegateExecution.class);
87 when(execution.getVariable(eq("retryCount"))).thenThrow(BpmnError.class);
88 executeBuildingBlockRainyDay.setRetryTimer(execution);
92 public void queryRainyDayTableExists() throws Exception {
93 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
94 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
95 vnf.setVnfType("vnft1");
96 delegateExecution.setVariable("aLaCarte", true);
97 delegateExecution.setVariable("suppressRollback", false);
98 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
99 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
100 rainyDayHandlerStatus.setErrorCode("7000");
101 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
102 rainyDayHandlerStatus.setServiceType("st1");
103 rainyDayHandlerStatus.setVnfType("vnft1");
104 rainyDayHandlerStatus.setPolicy("Rollback");
105 rainyDayHandlerStatus.setWorkStep(ASTERISK);
107 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
108 "st1", "vnft1", "7000", "*", "errorMessage", "*");
110 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
111 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
115 public void queryRainyDayTableDefault() throws Exception {
116 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
117 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
118 vnf.setVnfType("vnft1");
119 delegateExecution.setVariable("aLaCarte", true);
120 delegateExecution.setVariable("suppressRollback", false);
121 delegateExecution.setVariable("WorkflowExceptionCode", ASTERISK);
122 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
123 rainyDayHandlerStatus.setErrorCode(ASTERISK);
124 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
125 rainyDayHandlerStatus.setServiceType(ASTERISK);
126 rainyDayHandlerStatus.setVnfType(ASTERISK);
127 rainyDayHandlerStatus.setPolicy("Rollback");
128 rainyDayHandlerStatus.setWorkStep(ASTERISK);
130 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
131 "st1", "vnft1", ASTERISK, ASTERISK, "errorMessage", "*");
132 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
133 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
134 assertEquals(5, delegateExecution.getVariable("maxRetries"));
138 public void queryRainyDayTableDoesNotExist() throws Exception {
139 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
140 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
141 vnf.setVnfType("vnft1");
142 delegateExecution.setVariable("aLaCarte", true);
143 doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class), isA(String.class),
144 isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
145 delegateExecution.setVariable("suppressRollback", false);
147 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
149 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
153 public void queryRainyDayTableExceptionTest() {
154 doThrow(RuntimeException.class).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class),
155 isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class),
157 delegateExecution.setVariable("aLaCarte", true);
158 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
159 delegateExecution.setVariable("suppressRollback", false);
161 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
165 public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
166 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
167 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
168 vnf.setVnfType("vnft1");
169 delegateExecution.setVariable("aLaCarte", true);
170 delegateExecution.setVariable("suppressRollback", false);
171 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
172 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
173 rainyDayHandlerStatus.setErrorCode("7000");
174 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
175 rainyDayHandlerStatus.setServiceType("st1");
176 rainyDayHandlerStatus.setVnfType("vnft1");
177 rainyDayHandlerStatus.setPolicy("Retry");
178 rainyDayHandlerStatus.setWorkStep(ASTERISK);
179 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
181 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
182 "st1", "vnft1", "7000", "*", "errorMessage", "*");
184 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
186 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
190 public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
191 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
192 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
193 vnf.setVnfType("vnft1");
194 delegateExecution.setVariable("aLaCarte", false);
195 delegateExecution.setVariable("suppressRollback", false);
196 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
197 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
198 rainyDayHandlerStatus.setErrorCode("7000");
199 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
200 rainyDayHandlerStatus.setServiceType("st1");
201 rainyDayHandlerStatus.setVnfType("vnft1");
202 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
203 rainyDayHandlerStatus.setWorkStep(ASTERISK);
204 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
206 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
207 "st1", "vnft1", "7000", "*", "errorMessage", "*");
209 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
211 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
212 assertEquals(Status.ROLLED_BACK.toString(), delegateExecution.getVariable("rollbackTargetState"));
216 public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
217 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
218 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
219 vnf.setVnfType("vnft1");
220 delegateExecution.setVariable("aLaCarte", true);
221 delegateExecution.setVariable("suppressRollback", false);
222 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
223 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
224 rainyDayHandlerStatus.setErrorCode("7000");
225 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
226 rainyDayHandlerStatus.setServiceType("st1");
227 rainyDayHandlerStatus.setVnfType("vnft1");
228 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
229 rainyDayHandlerStatus.setWorkStep(ASTERISK);
230 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
232 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
233 "st1", "vnft1", "7000", "*", "errorMessage", "*");
235 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
237 assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
238 assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), delegateExecution.getVariable("rollbackTargetState"));
242 public void queryRainyDayTableRollbackToCreated() throws Exception {
243 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
244 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
245 vnf.setVnfType("vnft1");
246 delegateExecution.setVariable("aLaCarte", true);
247 delegateExecution.setVariable("suppressRollback", false);
248 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
249 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
250 rainyDayHandlerStatus.setErrorCode("7000");
251 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
252 rainyDayHandlerStatus.setServiceType("st1");
253 rainyDayHandlerStatus.setVnfType("vnft1");
254 rainyDayHandlerStatus.setPolicy("RollbackToCreated");
255 rainyDayHandlerStatus.setWorkStep(ASTERISK);
256 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
258 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
259 "st1", "vnft1", "7000", "*", "errorMessage", "*");
261 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
263 assertEquals("RollbackToCreated", delegateExecution.getVariable("handlingCode"));
264 assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), delegateExecution.getVariable("rollbackTargetState"));
269 public void suppressRollbackTest() throws Exception {
270 delegateExecution.setVariable("suppressRollback", true);
271 delegateExecution.setVariable("aLaCarte", true);
272 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
273 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
277 public void queryRainyDayTableServiceRoleNotDefined() throws Exception {
278 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
279 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
280 serviceInstance.getModelInfoServiceInstance().setServiceRole("sr1");
281 vnf.setVnfType("vnft1");
282 delegateExecution.setVariable("aLaCarte", true);
283 delegateExecution.setVariable("suppressRollback", false);
284 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
285 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
286 rainyDayHandlerStatus.setErrorCode("7000");
287 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
288 rainyDayHandlerStatus.setServiceType("st1");
289 rainyDayHandlerStatus.setVnfType("vnft1");
290 rainyDayHandlerStatus.setPolicy("Rollback");
291 rainyDayHandlerStatus.setWorkStep(ASTERISK);
293 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
294 "st1", "vnft1", "7000", "*", "errorMessage", "sr1");
296 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
297 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
301 public void queryRainyDayTableServiceRoleNC() throws Exception {
302 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
303 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
304 serviceInstance.getModelInfoServiceInstance().setServiceRole("NETWORK-COLLECTION");
305 vnf.setVnfType("vnft1");
306 delegateExecution.setVariable("aLaCarte", true);
307 delegateExecution.setVariable("suppressRollback", false);
308 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
309 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
310 rainyDayHandlerStatus.setErrorCode("7000");
311 rainyDayHandlerStatus.setFlowName("ActivateServiceInstanceBB");
312 rainyDayHandlerStatus.setServiceType("st1");
313 rainyDayHandlerStatus.setVnfType("vnft1");
314 rainyDayHandlerStatus.setPolicy("Abort");
315 rainyDayHandlerStatus.setWorkStep(ASTERISK);
317 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
318 "st1", "vnft1", "7000", "*", "errorMessage", "NETWORK-COLLECTION");
320 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
321 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));