18e08917ed6a150c2598e679f09e78a31d584e7a
[so.git] /
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.constants.Status;
42 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
43 import org.springframework.beans.factory.annotation.Autowired;
44
45 public class ExecuteBuildlingBlockRainyDayTest extends BaseTest {
46     @Autowired
47     private ExecuteBuildingBlockRainyDay executeBuildingBlockRainyDay;
48
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 = "*";
55
56     @Before
57     public void before() {
58         serviceInstance = setServiceInstance();
59         customer = setCustomer();
60         vnf = setGenericVnf();
61
62         buildingBlock = new BuildingBlock();
63         buildingBlock.setBpmnFlowName("AssignServiceInstanceBB");
64
65         executeBuildingBlock = new ExecuteBuildingBlock();
66         executeBuildingBlock.setBuildingBlock(buildingBlock);
67
68         delegateExecution.setVariable("gBBInput", gBBInput);
69         delegateExecution.setVariable("WorkflowException", new WorkflowException("", 7000, ""));
70         delegateExecution.setVariable("buildingBlock", executeBuildingBlock);
71         delegateExecution.setVariable("lookupKeyMap", lookupKeyMap);
72
73         delegateExecution.setVariable("WorkflowException", new WorkflowException("processKey", 7000, "errorMessage"));
74     }
75
76     @Test
77     public void setRetryTimerTest() throws Exception {
78         delegateExecution.setVariable("retryCount", 2);
79         executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
80         assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
81     }
82
83     @Test
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);
89     }
90
91     @Test
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);
106
107         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
108                 "st1", "vnft1", "7000", "*", "errorMessage", "*");
109
110         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
111         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
112     }
113
114     @Test
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);
129
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"));
135     }
136
137     @Test
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), isA(String.class));
145         delegateExecution.setVariable("suppressRollback", false);
146
147         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
148
149         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
150     }
151
152     @Test
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                 isA(String.class));
157         delegateExecution.setVariable("aLaCarte", true);
158         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
159         delegateExecution.setVariable("suppressRollback", false);
160
161         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
162     }
163
164     @Test
165     public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
166         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
167         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
168         vnf.setVnfType("vnft1");
169         delegateExecution.setVariable("aLaCarte", true);
170         delegateExecution.setVariable("suppressRollback", false);
171         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
172         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
173         rainyDayHandlerStatus.setErrorCode("7000");
174         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
175         rainyDayHandlerStatus.setServiceType("st1");
176         rainyDayHandlerStatus.setVnfType("vnft1");
177         rainyDayHandlerStatus.setPolicy("Retry");
178         rainyDayHandlerStatus.setWorkStep(ASTERISK);
179         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
180
181         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
182                 "st1", "vnft1", "7000", "*", "errorMessage", "*");
183
184         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
185
186         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
187     }
188
189     @Test
190     public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
191         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
192         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
193         vnf.setVnfType("vnft1");
194         delegateExecution.setVariable("aLaCarte", false);
195         delegateExecution.setVariable("suppressRollback", false);
196         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
197         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
198         rainyDayHandlerStatus.setErrorCode("7000");
199         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
200         rainyDayHandlerStatus.setServiceType("st1");
201         rainyDayHandlerStatus.setVnfType("vnft1");
202         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
203         rainyDayHandlerStatus.setWorkStep(ASTERISK);
204         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
205
206         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
207                 "st1", "vnft1", "7000", "*", "errorMessage", "*");
208
209         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
210
211         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
212         assertEquals(Status.ROLLED_BACK.toString(), delegateExecution.getVariable("rollbackTargetState"));
213     }
214
215     @Test
216     public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
217         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
218         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
219         vnf.setVnfType("vnft1");
220         delegateExecution.setVariable("aLaCarte", true);
221         delegateExecution.setVariable("suppressRollback", false);
222         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
223         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
224         rainyDayHandlerStatus.setErrorCode("7000");
225         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
226         rainyDayHandlerStatus.setServiceType("st1");
227         rainyDayHandlerStatus.setVnfType("vnft1");
228         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
229         rainyDayHandlerStatus.setWorkStep(ASTERISK);
230         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
231
232         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
233                 "st1", "vnft1", "7000", "*", "errorMessage", "*");
234
235         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
236
237         assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
238         assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), delegateExecution.getVariable("rollbackTargetState"));
239     }
240
241     @Test
242     public void queryRainyDayTableRollbackToCreated() throws Exception {
243         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
244         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
245         vnf.setVnfType("vnft1");
246         delegateExecution.setVariable("aLaCarte", true);
247         delegateExecution.setVariable("suppressRollback", false);
248         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
249         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
250         rainyDayHandlerStatus.setErrorCode("7000");
251         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
252         rainyDayHandlerStatus.setServiceType("st1");
253         rainyDayHandlerStatus.setVnfType("vnft1");
254         rainyDayHandlerStatus.setPolicy("RollbackToCreated");
255         rainyDayHandlerStatus.setWorkStep(ASTERISK);
256         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
257
258         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
259                 "st1", "vnft1", "7000", "*", "errorMessage", "*");
260
261         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
262
263         assertEquals("RollbackToCreated", delegateExecution.getVariable("handlingCode"));
264         assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), delegateExecution.getVariable("rollbackTargetState"));
265     }
266
267
268     @Test
269     public void suppressRollbackTest() throws Exception {
270         delegateExecution.setVariable("suppressRollback", true);
271         delegateExecution.setVariable("aLaCarte", true);
272         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
273         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
274     }
275
276     @Test
277     public void queryRainyDayTableServiceRoleNotDefined() throws Exception {
278         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
279         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
280         serviceInstance.getModelInfoServiceInstance().setServiceRole("sr1");
281         vnf.setVnfType("vnft1");
282         delegateExecution.setVariable("aLaCarte", true);
283         delegateExecution.setVariable("suppressRollback", false);
284         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
285         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
286         rainyDayHandlerStatus.setErrorCode("7000");
287         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
288         rainyDayHandlerStatus.setServiceType("st1");
289         rainyDayHandlerStatus.setVnfType("vnft1");
290         rainyDayHandlerStatus.setPolicy("Rollback");
291         rainyDayHandlerStatus.setWorkStep(ASTERISK);
292
293         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
294                 "st1", "vnft1", "7000", "*", "errorMessage", "sr1");
295
296         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
297         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
298     }
299
300     @Test
301     public void queryRainyDayTableServiceRoleNC() throws Exception {
302         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
303         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
304         serviceInstance.getModelInfoServiceInstance().setServiceRole("NETWORK-COLLECTION");
305         vnf.setVnfType("vnft1");
306         delegateExecution.setVariable("aLaCarte", true);
307         delegateExecution.setVariable("suppressRollback", false);
308         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
309         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
310         rainyDayHandlerStatus.setErrorCode("7000");
311         rainyDayHandlerStatus.setFlowName("ActivateServiceInstanceBB");
312         rainyDayHandlerStatus.setServiceType("st1");
313         rainyDayHandlerStatus.setVnfType("vnft1");
314         rainyDayHandlerStatus.setPolicy("Abort");
315         rainyDayHandlerStatus.setWorkStep(ASTERISK);
316
317         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
318                 "st1", "vnft1", "7000", "*", "errorMessage", "NETWORK-COLLECTION");
319
320         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
321         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
322     }
323
324 }