c5da3cbd5179a0804ffda8d5ee267278f4740ed5
[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         delegateExecution.setVariable("WorkflowException", new WorkflowException("processKey", 7000, "errorMessage"));
73     }
74
75     @Test
76     public void setRetryTimerTest() throws Exception {
77         delegateExecution.setVariable("retryCount", 2);
78         executeBuildingBlockRainyDay.setRetryTimer(delegateExecution);
79         assertEquals("PT40S", delegateExecution.getVariable("RetryDuration"));
80     }
81
82     @Test
83     public void setRetryTimerExceptionTest() {
84         expectedException.expect(BpmnError.class);
85         DelegateExecution execution = mock(DelegateExecution.class);
86         when(execution.getVariable(eq("retryCount"))).thenThrow(BpmnError.class);
87         executeBuildingBlockRainyDay.setRetryTimer(execution);
88     }
89
90     @Test
91     public void queryRainyDayTableExists() throws Exception {
92         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
93         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
94         vnf.setVnfType("vnft1");
95         delegateExecution.setVariable("aLaCarte", true);
96         delegateExecution.setVariable("suppressRollback", false);
97         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
98         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
99         rainyDayHandlerStatus.setErrorCode("7000");
100         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
101         rainyDayHandlerStatus.setServiceType("st1");
102         rainyDayHandlerStatus.setVnfType("vnft1");
103         rainyDayHandlerStatus.setPolicy("Rollback");
104         rainyDayHandlerStatus.setWorkStep(ASTERISK);
105
106         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
107                 "st1", "vnft1", "7000", "*", "errorMessage");
108
109         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
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(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
130                 "st1", "vnft1", ASTERISK, ASTERISK, "errorMessage");
131         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
132         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
133         assertEquals(5, delegateExecution.getVariable("maxRetries"));
134     }
135
136     @Test
137     public void queryRainyDayTableDoesNotExist() throws Exception {
138         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
139         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
140         vnf.setVnfType("vnft1");
141         delegateExecution.setVariable("aLaCarte", true);
142         doReturn(null).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class), isA(String.class),
143                 isA(String.class), isA(String.class), isA(String.class), isA(String.class));
144         delegateExecution.setVariable("suppressRollback", false);
145
146         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
147
148         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
149     }
150
151     @Test
152     public void queryRainyDayTableExceptionTest() {
153         doThrow(RuntimeException.class).when(MOCK_catalogDbClient).getRainyDayHandlerStatus(isA(String.class),
154                 isA(String.class), isA(String.class), isA(String.class), isA(String.class), isA(String.class));
155         delegateExecution.setVariable("aLaCarte", true);
156         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
157         delegateExecution.setVariable("suppressRollback", false);
158
159         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
160     }
161
162     @Test
163     public void queryRainyDayTableSecondaryPolicyExists() throws Exception {
164         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
165         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
166         vnf.setVnfType("vnft1");
167         delegateExecution.setVariable("aLaCarte", true);
168         delegateExecution.setVariable("suppressRollback", false);
169         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
170         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
171         rainyDayHandlerStatus.setErrorCode("7000");
172         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
173         rainyDayHandlerStatus.setServiceType("st1");
174         rainyDayHandlerStatus.setVnfType("vnft1");
175         rainyDayHandlerStatus.setPolicy("Retry");
176         rainyDayHandlerStatus.setWorkStep(ASTERISK);
177         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
178
179         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
180                 "st1", "vnft1", "7000", "*", "errorMessage");
181
182         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, false);
183
184         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
185     }
186
187     @Test
188     public void queryRainyDayTableRollbackToAssignedMacro() throws Exception {
189         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
190         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
191         vnf.setVnfType("vnft1");
192         delegateExecution.setVariable("aLaCarte", false);
193         delegateExecution.setVariable("suppressRollback", false);
194         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
195         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
196         rainyDayHandlerStatus.setErrorCode("7000");
197         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
198         rainyDayHandlerStatus.setServiceType("st1");
199         rainyDayHandlerStatus.setVnfType("vnft1");
200         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
201         rainyDayHandlerStatus.setWorkStep(ASTERISK);
202         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
203
204         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
205                 "st1", "vnft1", "7000", "*", "errorMessage");
206
207         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
208
209         assertEquals("Rollback", delegateExecution.getVariable("handlingCode"));
210     }
211
212     @Test
213     public void queryRainyDayTableRollbackToAssignedALaCarte() throws Exception {
214         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
215         serviceInstance.getModelInfoServiceInstance().setServiceType("st1");
216         vnf.setVnfType("vnft1");
217         delegateExecution.setVariable("aLaCarte", true);
218         delegateExecution.setVariable("suppressRollback", false);
219         delegateExecution.setVariable("WorkflowExceptionCode", "7000");
220         RainyDayHandlerStatus rainyDayHandlerStatus = new RainyDayHandlerStatus();
221         rainyDayHandlerStatus.setErrorCode("7000");
222         rainyDayHandlerStatus.setFlowName("AssignServiceInstanceBB");
223         rainyDayHandlerStatus.setServiceType("st1");
224         rainyDayHandlerStatus.setVnfType("vnft1");
225         rainyDayHandlerStatus.setPolicy("RollbackToAssigned");
226         rainyDayHandlerStatus.setWorkStep(ASTERISK);
227         rainyDayHandlerStatus.setSecondaryPolicy("Abort");
228
229         doReturn(rainyDayHandlerStatus).when(MOCK_catalogDbClient).getRainyDayHandlerStatus("AssignServiceInstanceBB",
230                 "st1", "vnft1", "7000", "*", "errorMessage");
231
232         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
233
234         assertEquals("RollbackToAssigned", delegateExecution.getVariable("handlingCode"));
235     }
236
237     @Test
238     public void suppressRollbackTest() throws Exception {
239         delegateExecution.setVariable("suppressRollback", true);
240         delegateExecution.setVariable("aLaCarte", true);
241         executeBuildingBlockRainyDay.queryRainyDayTable(delegateExecution, true);
242         assertEquals("Abort", delegateExecution.getVariable("handlingCode"));
243     }
244
245 }