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.Matchers.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;
31 import org.camunda.bpm.engine.delegate.BpmnError;
32 import org.camunda.bpm.engine.delegate.DelegateExecution;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.so.BaseTest;
36 import org.onap.so.bpmn.core.WorkflowException;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
38 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
39 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
40 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
41 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
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);
75 public void setRetryTimerTest() throws Exception{
76 delegateExecution.setVariable("retryCount", 2);
77 executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
78 assertEquals("PT40S",delegateExecution.getVariable("RetryDuration"));
82 public void setRetryTimerExceptionTest() {
83 expectedException.expect(BpmnError.class);
84 DelegateExecution execution = mock(DelegateExecution.class);
85 when(execution.getVariable(eq("retryCount"))).thenThrow(BpmnError.class);
86 executeBuildingBlockRainyDay.setRetryTimer(execution);
90 public void queryRainyDayTableExists() throws Exception{
91 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
92 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
93 vnf.setVnfType("vnft1");
94 delegateExecution.setVariable("aLaCarte", true);
95 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
96 rainyDayHandlerStatus.setErrorCode("7000");
97 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
98 rainyDayHandlerStatus.setServiceType("st1");
99 rainyDayHandlerStatus.setVnfType("vnft1");
100 rainyDayHandlerStatus.setPolicy("Rollback");
101 rainyDayHandlerStatus.setWorkStep(ASTERISK);
103 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
105 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
107 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
111 public void queryRainyDayTableDefault() throws Exception{
112 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
113 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
114 vnf.setVnfType("vnft1");
115 delegateExecution.setVariable("aLaCarte", true);
116 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
117 rainyDayHandlerStatus.setErrorCode(ASTERISK);
118 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
119 rainyDayHandlerStatus.setServiceType(ASTERISK);
120 rainyDayHandlerStatus.setVnfType(ASTERISK);
121 rainyDayHandlerStatus.setPolicy("Rollback");
122 rainyDayHandlerStatus.setWorkStep(ASTERISK);
124 doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", "st1", "vnft1", "7000", ASTERISK);
125 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", ASTERISK, ASTERISK, ASTERISK, ASTERISK);
127 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
129 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
133 public void queryRainyDayTableDoesNotExist() throws Exception{
134 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
135 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
136 vnf.setVnfType("vnft1");
137 delegateExecution.setVariable("aLaCarte", true);
138 doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
140 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
142 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
146 public void queryRainyDayTableExceptionTest() {
147 doThrow(RuntimeException.class).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
148 delegateExecution.setVariable("aLaCarte", true);
149 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
151 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
155 public void queryRainyDayTableSecondaryPolicyExists() throws Exception{
156 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
157 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
158 vnf.setVnfType("vnft1");
159 delegateExecution.setVariable("aLaCarte", true);
161 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
162 rainyDayHandlerStatus.setErrorCode("7000");
163 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
164 rainyDayHandlerStatus.setServiceType("st1");
165 rainyDayHandlerStatus.setVnfType("vnft1");
166 rainyDayHandlerStatus.setPolicy("Retry");
167 rainyDayHandlerStatus.setWorkStep(ASTERISK);
168 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
170 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
172 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,false);
174 assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
178 public void queryRainyDayTableRollbackToAssignedMacro() throws Exception{
179 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
180 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
181 vnf.setVnfType("vnft1");
182 delegateExecution.setVariable("aLaCarte", false);
184 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
185 rainyDayHandlerStatus.setErrorCode("7000");
186 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
187 rainyDayHandlerStatus.setServiceType("st1");
188 rainyDayHandlerStatus.setVnfType("vnft1");
189 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
190 rainyDayHandlerStatus.setWorkStep(ASTERISK);
191 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
193 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
195 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
197 assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
201 public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception{
202 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
203 serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
204 vnf.setVnfType("vnft1");
205 delegateExecution.setVariable("aLaCarte", true);
207 RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
208 rainyDayHandlerStatus.setErrorCode("7000");
209 rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
210 rainyDayHandlerStatus.setServiceType("st1");
211 rainyDayHandlerStatus.setVnfType("vnft1");
212 rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
213 rainyDayHandlerStatus.setWorkStep(ASTERISK);
214 rainyDayHandlerStatus.setSecondaryPolicy("Abort");
216 doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep("AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
218 executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution,true);
220 assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));