Replaced all tabs with spaces in java and pom.xml
[so.git] / bpmn / MSOCommonBPMN / src / test / java / org / onap / so / bpmn / servicedecomposition / tasks / ExecuteBuildlingBlockRainyDayTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.so.bpmn.servicedecomposition.tasks;
22
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;
43
44 public class ExecuteBuildlingBlockRainyDayTest extends BaseTest {
45     @Autowired
46     private ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
47
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 = "*";
54
55     @Before
56     public void before() {
57         serviceInstance = setServiceInstance();
58         customer = setCustomer();
59         vnf = setGenericVnf();
60
61         buildingBlock = new BuildingBlock();
62         buildingBlock.setBpmnFlowName("AssignServiceInstanceBB");
63
64         executeBuildingBlock = new ExecuteBuildingBlock();
65         executeBuildingBlock.setBuildingBlock(buildingBlock);
66
67         delegateExecution.setVariable("gBBInput", gBBInput);
68         delegateExecution.setVariable("WorkflowException", new WorkflowException("", 7000, ""));
69         delegateExecution.setVariable("buildingBlock", executeBuildingBlock);
70         delegateExecution.setVariable("lookupKeyMap", lookupKeyMap);
71     }
72
73     @Test
74     public void setRetryTimerTest() throws Exception {
75         delegateExecution.setVariable("retryCount", 2);
76         executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
77         assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
78     }
79
80     @Test
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);
86     }
87
88     @Test
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);
103
104         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
105                 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
106                         "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
107
108         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
109
110         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
111     }
112
113     @Test
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);
128
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);
135
136         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
137
138         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
139         assertEquals(5, delegateExecution.getVariable("maxRetries"));
140     }
141
142     @Test
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);
152
153         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
154
155         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
156     }
157
158     @Test
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);
166
167         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
168     }
169
170     @Test
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");
186
187         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
188                 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
189                         "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
190
191         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
192
193         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
194     }
195
196     @Test
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");
212
213         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
214                 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
215                         "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
216
217         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
218
219         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
220     }
221
222     @Test
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");
238
239         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient)
240                 .getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
241                         "AssignServiceInstanceBB", "st1", "vnft1", "7000", "*");
242
243         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
244
245         assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
246     }
247
248     @Test
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"));
254     }
255
256 }