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));
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));
156 delegateExecution.setVariable("aLaCarte", true);
157 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
158 delegateExecution.setVariable("suppressRollback", false);
160 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
164 public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
165 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
166 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
167 vnf.setVnfType("vnft1");
168 delegateExecution.setVariable("aLaCarte", true);
169 delegateExecution.setVariable("suppressRollback", false);
170 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
171 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
172 rainyDayHandlerStatus.setErrorCode("7000");
173 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
174 rainyDayHandlerStatus.setServiceType("st1");
175 rainyDayHandlerStatus.setVnfType("vnft1");
176 rainyDayHandlerStatus.setPolicy("Retry");
177 rainyDayHandlerStatus.setWorkStep(ASTERISK);
178 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
180 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
181 "st1", "vnft1", "7000", "*", "errorMessage");
183 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
185 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
189 public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
190 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
191 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
192 vnf.setVnfType("vnft1");
193 delegateExecution.setVariable("aLaCarte", false);
194 delegateExecution.setVariable("suppressRollback", false);
195 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
196 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
197 rainyDayHandlerStatus.setErrorCode("7000");
198 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
199 rainyDayHandlerStatus.setServiceType("st1");
200 rainyDayHandlerStatus.setVnfType("vnft1");
201 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
202 rainyDayHandlerStatus.setWorkStep(ASTERISK);
203 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
205 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
206 "st1", "vnft1", "7000", "*", "errorMessage");
208 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
210 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
211 assertEquals(Status.ROLLED_BACK.toString(), delegateExecution.getVariable("rollbackTargetState"));
215 public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
216 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
217 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
218 vnf.setVnfType("vnft1");
219 delegateExecution.setVariable("aLaCarte", true);
220 delegateExecution.setVariable("suppressRollback", false);
221 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
222 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
223 rainyDayHandlerStatus.setErrorCode("7000");
224 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
225 rainyDayHandlerStatus.setServiceType("st1");
226 rainyDayHandlerStatus.setVnfType("vnft1");
227 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
228 rainyDayHandlerStatus.setWorkStep(ASTERISK);
229 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
231 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
232 "st1", "vnft1", "7000", "*", "errorMessage");
234 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
236 assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
237 assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), delegateExecution.getVariable("rollbackTargetState"));
241 public void queryRainyDayTableRollbackToCreated() throws Exception {
242 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
243 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
244 vnf.setVnfType("vnft1");
245 delegateExecution.setVariable("aLaCarte", true);
246 delegateExecution.setVariable("suppressRollback", false);
247 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
248 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
249 rainyDayHandlerStatus.setErrorCode("7000");
250 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
251 rainyDayHandlerStatus.setServiceType("st1");
252 rainyDayHandlerStatus.setVnfType("vnft1");
253 rainyDayHandlerStatus.setPolicy("RollbackToCreated");
254 rainyDayHandlerStatus.setWorkStep(ASTERISK);
255 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
257 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
258 "st1", "vnft1", "7000", "*", "errorMessage");
260 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
262 assertEquals("RollbackToCreated", delegateExecution.getVariable("handlingCode"));
263 assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), delegateExecution.getVariable("rollbackTargetState"));
268 public void suppressRollbackTest() throws Exception {
269 delegateExecution.setVariable("suppressRollback", true);
270 delegateExecution.setVariable("aLaCarte", true);
271 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
272 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));