80373eb760a6a712a57bfe5ca37e6cfd7f308365
[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));
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         delegateExecution.setVariable("aLaCarte", true);
157         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
158         delegateExecution.setVariable("suppressRollback", false);
159
160         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
161     }
162
163     @Test
164     public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
165         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
166         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
167         vnf.setVnfType("vnft1");
168         delegateExecution.setVariable("aLaCarte", true);
169         delegateExecution.setVariable("suppressRollback", false);
170         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
171         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
172         rainyDayHandlerStatus.setErrorCode("7000");
173         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
174         rainyDayHandlerStatus.setServiceType("st1");
175         rainyDayHandlerStatus.setVnfType("vnft1");
176         rainyDayHandlerStatus.setPolicy("Retry");
177         rainyDayHandlerStatus.setWorkStep(ASTERISK);
178         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
179
180         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
181                 "st1", "vnft1", "7000", "*", "errorMessage");
182
183         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
184
185         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
186     }
187
188     @Test
189     public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
190         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
191         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
192         vnf.setVnfType("vnft1");
193         delegateExecution.setVariable("aLaCarte", false);
194         delegateExecution.setVariable("suppressRollback", false);
195         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
196         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
197         rainyDayHandlerStatus.setErrorCode("7000");
198         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
199         rainyDayHandlerStatus.setServiceType("st1");
200         rainyDayHandlerStatus.setVnfType("vnft1");
201         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
202         rainyDayHandlerStatus.setWorkStep(ASTERISK);
203         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
204
205         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
206                 "st1", "vnft1", "7000", "*", "errorMessage");
207
208         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
209
210         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
211         assertEquals(Status.ROLLED_BACK.toString(), delegateExecution.getVariable("rollbackTargetState"));
212     }
213
214     @Test
215     public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
216         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
217         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
218         vnf.setVnfType("vnft1");
219         delegateExecution.setVariable("aLaCarte", true);
220         delegateExecution.setVariable("suppressRollback", false);
221         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
222         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
223         rainyDayHandlerStatus.setErrorCode("7000");
224         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
225         rainyDayHandlerStatus.setServiceType("st1");
226         rainyDayHandlerStatus.setVnfType("vnft1");
227         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
228         rainyDayHandlerStatus.setWorkStep(ASTERISK);
229         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
230
231         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
232                 "st1", "vnft1", "7000", "*", "errorMessage");
233
234         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
235
236         assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
237         assertEquals(Status.ROLLED_BACK_TO_ASSIGNED.toString(), delegateExecution.getVariable("rollbackTargetState"));
238     }
239
240     @Test
241     public void queryRainyDayTableRollbackToCreated() throws Exception {
242         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
243         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
244         vnf.setVnfType("vnft1");
245         delegateExecution.setVariable("aLaCarte", true);
246         delegateExecution.setVariable("suppressRollback", false);
247         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
248         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
249         rainyDayHandlerStatus.setErrorCode("7000");
250         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
251         rainyDayHandlerStatus.setServiceType("st1");
252         rainyDayHandlerStatus.setVnfType("vnft1");
253         rainyDayHandlerStatus.setPolicy("RollbackToCreated");
254         rainyDayHandlerStatus.setWorkStep(ASTERISK);
255         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
256
257         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
258                 "st1", "vnft1", "7000", "*", "errorMessage");
259
260         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
261
262         assertEquals("RollbackToCreated", delegateExecution.getVariable("handlingCode"));
263         assertEquals(Status.ROLLED_BACK_TO_CREATED.toString(), delegateExecution.getVariable("rollbackTargetState"));
264     }
265
266
267     @Test
268     public void suppressRollbackTest() throws Exception {
269         delegateExecution.setVariable("suppressRollback", true);
270         delegateExecution.setVariable("aLaCarte", true);
271         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
272         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
273     }
274
275 }