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.db.catalog.beans.macro.RainyDayHandlerStatus;
42 import org.springframework.beans.factory.annotation.Autowired;
44 public class ExecuteBuildlingBlockRainyDayTest extends BaseTest {
46 private ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
48 private ServiceInstance serviceInstance;
49 private Customer customer; // will build service sub
50 private GenericVnf vnf;
51 private BuildingBlock buildingBlock;
52 private ExecuteBuildingBlock executeBuildingBlock;
53 private static final String ASTERISK = "*";
56 public void before() {
57 serviceInstance = setServiceInstance();
58 customer = setCustomer();
59 vnf = setGenericVnf();
61 buildingBlock = new BuildingBlock();
62 buildingBlock.setBpmnFlowName("AssignServiceInstanceBB");
64 executeBuildingBlock = new ExecuteBuildingBlock();
65 executeBuildingBlock.setBuildingBlock(buildingBlock);
67 delegateExecution.setVariable("gBBInput", gBBInput);
68 delegateExecution.setVariable("WorkflowException", new WorkflowException("", 7000, ""));
69 delegateExecution.setVariable("buildingBlock", executeBuildingBlock);
70 delegateExecution.setVariable("lookupKeyMap", lookupKeyMap);
72 delegateExecution.setVariable("WorkflowException", new WorkflowException("processKey", 7000, "errorMessage"));
76 public void setRetryTimerTest() throws Exception {
77 delegateExecution.setVariable("retryCount", 2);
78 executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
79 assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
83 public void setRetryTimerExceptionTest() {
84 expectedException.expect(BpmnError.class);
85 DelegateExecution execution = mock(DelegateExecution.class);
86 when(execution.getVariable(eq("retryCount"))).thenThrow(BpmnError.class);
87 executeBuildingBlockRainyDay.setRetryTimer(execution);
91 public void queryRainyDayTableExists() throws Exception {
92 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
93 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
94 vnf.setVnfType("vnft1");
95 delegateExecution.setVariable("aLaCarte", true);
96 delegateExecution.setVariable("suppressRollback", false);
97 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
98 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
99 rainyDayHandlerStatus.setErrorCode("7000");
100 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
101 rainyDayHandlerStatus.setServiceType("st1");
102 rainyDayHandlerStatus.setVnfType("vnft1");
103 rainyDayHandlerStatus.setPolicy("Rollback");
104 rainyDayHandlerStatus.setWorkStep(ASTERISK);
106 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
107 "st1", "vnft1", "7000", "*", "errorMessage");
109 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
110 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
114 public void queryRainyDayTableDefault() throws Exception {
115 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
116 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
117 vnf.setVnfType("vnft1");
118 delegateExecution.setVariable("aLaCarte", true);
119 delegateExecution.setVariable("suppressRollback", false);
120 delegateExecution.setVariable("WorkflowExceptionCode", ASTERISK);
121 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
122 rainyDayHandlerStatus.setErrorCode(ASTERISK);
123 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
124 rainyDayHandlerStatus.setServiceType(ASTERISK);
125 rainyDayHandlerStatus.setVnfType(ASTERISK);
126 rainyDayHandlerStatus.setPolicy("Rollback");
127 rainyDayHandlerStatus.setWorkStep(ASTERISK);
129 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
130 "st1", "vnft1", ASTERISK, ASTERISK, "errorMessage");
131 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
132 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
133 assertEquals(5, delegateExecution.getVariable("maxRetries"));
137 public void queryRainyDayTableDoesNotExist() throws Exception {
138 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
139 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
140 vnf.setVnfType("vnft1");
141 delegateExecution.setVariable("aLaCarte", true);
142 doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class), isA(String.class),
143 isA(String.class), isA(String.class), isA(String.class), isA(String.class));
144 delegateExecution.setVariable("suppressRollback", false);
146 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
148 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
152 public void queryRainyDayTableExceptionTest() {
153 doThrow(RuntimeException.class).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class),
154 isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
155 delegateExecution.setVariable("aLaCarte", true);
156 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
157 delegateExecution.setVariable("suppressRollback", false);
159 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
163 public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
164 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
165 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
166 vnf.setVnfType("vnft1");
167 delegateExecution.setVariable("aLaCarte", true);
168 delegateExecution.setVariable("suppressRollback", false);
169 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
170 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
171 rainyDayHandlerStatus.setErrorCode("7000");
172 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
173 rainyDayHandlerStatus.setServiceType("st1");
174 rainyDayHandlerStatus.setVnfType("vnft1");
175 rainyDayHandlerStatus.setPolicy("Retry");
176 rainyDayHandlerStatus.setWorkStep(ASTERISK);
177 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
179 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
180 "st1", "vnft1", "7000", "*", "errorMessage");
182 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
184 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
188 public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
189 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
190 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
191 vnf.setVnfType("vnft1");
192 delegateExecution.setVariable("aLaCarte", false);
193 delegateExecution.setVariable("suppressRollback", false);
194 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
195 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
196 rainyDayHandlerStatus.setErrorCode("7000");
197 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
198 rainyDayHandlerStatus.setServiceType("st1");
199 rainyDayHandlerStatus.setVnfType("vnft1");
200 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
201 rainyDayHandlerStatus.setWorkStep(ASTERISK);
202 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
204 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
205 "st1", "vnft1", "7000", "*", "errorMessage");
207 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
209 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
213 public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
214 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
215 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
216 vnf.setVnfType("vnft1");
217 delegateExecution.setVariable("aLaCarte", true);
218 delegateExecution.setVariable("suppressRollback", false);
219 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
220 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
221 rainyDayHandlerStatus.setErrorCode("7000");
222 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
223 rainyDayHandlerStatus.setServiceType("st1");
224 rainyDayHandlerStatus.setVnfType("vnft1");
225 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
226 rainyDayHandlerStatus.setWorkStep(ASTERISK);
227 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
229 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
230 "st1", "vnft1", "7000", "*", "errorMessage");
232 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
234 assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
238 public void suppressRollbackTest() throws Exception {
239 delegateExecution.setVariable("suppressRollback", true);
240 delegateExecution.setVariable("aLaCarte", true);
241 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
242 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));