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);
74 public void setRetryTimerTest() throws Exception {
75 delegateExecution.setVariable("retryCount", 2);
76 executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
77 assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
81 public void setRetryTimerExceptionTest() {
82 expectedException.expect(BpmnError.class);
83 DelegateExecution execution = mock(DelegateExecution.class);
84 when(execution.getVariable(eq("retryCount"))).thenThrow(BpmnError.class);
85 executeBuildingBlockRainyDay.setRetryTimer(execution);
89 public void queryRainyDayTableExists() throws Exception {
90 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
91 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
92 vnf.setVnfType("vnft1");
93 delegateExecution.setVariable("aLaCarte", true);
94 delegateExecution.setVariable("suppressRollback", false);
95 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
96 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
97 rainyDayHandlerStatus.setErrorCode("7000");
98 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
99 rainyDayHandlerStatus.setServiceType("st1");
100 rainyDayHandlerStatus.setVnfType("vnft1");
101 rainyDayHandlerStatus.setPolicy("Rollback");
102 rainyDayHandlerStatus.setWorkStep(ASTERISK);
104 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
105 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
106 "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
108 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(null).when(MOCK_catalogDbClient)
130 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
131 "AssignServiceInstanceBB", "st1", "vnft1", "7000", ASTERISK);
132 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
133 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
134 "AssignServiceInstanceBB", ASTERISK, ASTERISK, ASTERISK, ASTERISK);
136 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
138 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
139 assertEquals(5, delegateExecution.getVariable("maxRetries"));
143 public void queryRainyDayTableDoesNotExist() throws Exception {
144 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
145 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
146 vnf.setVnfType("vnft1");
147 delegateExecution.setVariable("aLaCarte", true);
148 doReturn(null).when(MOCK_catalogDbClient)
149 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(isA(String.class),
150 isA(String.class), isA(String.class), isA(String.class), isA(String.class));
151 delegateExecution.setVariable("suppressRollback", false);
153 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
155 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
159 public void queryRainyDayTableExceptionTest() {
160 doThrow(RuntimeException.class).when(MOCK_catalogDbClient)
161 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(isA(String.class),
162 isA(String.class), isA(String.class), isA(String.class), isA(String.class));
163 delegateExecution.setVariable("aLaCarte", true);
164 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
165 delegateExecution.setVariable("suppressRollback", false);
167 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
171 public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
172 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
173 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
174 vnf.setVnfType("vnft1");
175 delegateExecution.setVariable("aLaCarte", true);
176 delegateExecution.setVariable("suppressRollback", false);
177 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
178 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
179 rainyDayHandlerStatus.setErrorCode("7000");
180 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
181 rainyDayHandlerStatus.setServiceType("st1");
182 rainyDayHandlerStatus.setVnfType("vnft1");
183 rainyDayHandlerStatus.setPolicy("Retry");
184 rainyDayHandlerStatus.setWorkStep(ASTERISK);
185 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
187 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
188 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
189 "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
191 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
193 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
197 public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
198 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
199 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
200 vnf.setVnfType("vnft1");
201 delegateExecution.setVariable("aLaCarte", false);
202 delegateExecution.setVariable("suppressRollback", false);
203 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
204 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
205 rainyDayHandlerStatus.setErrorCode("7000");
206 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
207 rainyDayHandlerStatus.setServiceType("st1");
208 rainyDayHandlerStatus.setVnfType("vnft1");
209 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
210 rainyDayHandlerStatus.setWorkStep(ASTERISK);
211 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
213 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
214 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
215 "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
217 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
219 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
223 public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
224 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
225 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
226 vnf.setVnfType("vnft1");
227 delegateExecution.setVariable("aLaCarte", true);
228 delegateExecution.setVariable("suppressRollback", false);
229 delegateExecution.setVariable("WorkflowExceptionCode", "7000");
230 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
231 rainyDayHandlerStatus.setErrorCode("7000");
232 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
233 rainyDayHandlerStatus.setServiceType("st1");
234 rainyDayHandlerStatus.setVnfType("vnft1");
235 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
236 rainyDayHandlerStatus.setWorkStep(ASTERISK);
237 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
239 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
240 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
241 "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
243 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
245 assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
249 public void suppressRollbackTest() throws Exception {
250 delegateExecution.setVariable("suppressRollback", true);
251 delegateExecution.setVariable("aLaCarte", true);
252 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
253 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));