Merge branch 'recursive-orch'
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / adapter / vnf / tasks / VnfAdapterImplTest.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.infrastructure.adapter.vnf.tasks;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotEquals;
25 import static org.junit.Assert.assertNull;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.doThrow;
29 import static org.mockito.Mockito.when;
30 import org.camunda.bpm.engine.delegate.BpmnError;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.mockito.ArgumentMatchers;
35 import org.mockito.InjectMocks;
36 import org.mockito.Mock;
37 import org.mockito.junit.MockitoJUnitRunner;
38 import org.onap.so.FileUtil;
39 import org.onap.so.bpmn.common.BuildingBlockExecution;
40 import org.onap.so.bpmn.common.data.TestDataSetup;
41 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
42 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
44 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
45 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
46 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
47 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
48 import org.onap.so.client.exception.BBObjectNotFoundException;
49 import org.onap.so.client.exception.ExceptionBuilder;
50
51 @RunWith(MockitoJUnitRunner.Silent.class)
52 public class VnfAdapterImplTest extends TestDataSetup {
53     @Mock
54     protected ExceptionBuilder exceptionUtil;
55     @Mock
56     protected ExtractPojosForBB extractPojosForBB;
57     @InjectMocks
58     private VnfAdapterImpl vnfAdapterImpl = new VnfAdapterImpl();
59
60     private RequestContext requestContext;
61     private ServiceInstance serviceInstance;
62     private GenericVnf genericVnf;
63     private VfModule vfModule;
64     private VolumeGroup volumeGroup;
65
66     private static final String VNF_ADAPTER_REST_DELETE_RESPONSE =
67             FileUtil.readResourceFile("__files/VfModularity/VNFAdapterRestDeleteResponse.xml");
68     private static final String VNF_ADAPTER_REST_CREATE_RESPONSE =
69             FileUtil.readResourceFile("__files/VfModularity/VNFAdapterRestCreateCallback.xml");
70     private static final String VNF_ADAPTER_VOLUME_CREATE_RESPONSE =
71             FileUtil.readResourceFile("__files/VfModularity/CreateVfModuleVolumeCallbackResponse.xml");
72     private static final String VNF_ADAPTER_VOLUME_DELETE_RESPONSE =
73             FileUtil.readResourceFile("__files/VfModularity/DeleteVfModuleVolumeCallbackResponse.xml");
74     private static final String TEST_VFMODULE_HEATSTACK_ID = "slowburn";
75     private static final String TEST_VOLUME_HEATSTACK_ID = "testHeatStackId1";
76     private static final String TEST_CONTRAIL_SERVICE_INSTANCE_FQDN = "default-domain:MSOTest:MsoNW-RA";
77     private static final String TEST_OAM_MANAGEMENT_V4_ADDRESS = "127.0.0.1";
78     private static final String TEST_OAM_MANAGEMENT_V6_ADDRESS = "2000:abc:bce:1111";
79     private static final String TEST_CONTRAIL_NETWORK_POLICY_FQDNS =
80             "MSOTest:DefaultPolicyFQDN2,MSOTest:DefaultPolicyFQDN1";
81
82     @Before
83     public void before() throws BBObjectNotFoundException {
84         requestContext = setRequestContext();
85         serviceInstance = setServiceInstance();
86         genericVnf = setGenericVnf();
87         vfModule = setVfModule();
88         volumeGroup = setVolumeGroup();
89         vfModule.setHeatStackId(null);
90         volumeGroup.setHeatStackId(null);
91         doThrow(new BpmnError("BPMN Error")).when(exceptionUtil)
92                 .buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(String.class));
93         doThrow(new BpmnError("BPMN Error")).when(exceptionUtil)
94                 .buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
95         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
96                 .thenReturn(serviceInstance);
97         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID)))
98                 .thenReturn(volumeGroup);
99         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID)))
100                 .thenReturn(genericVnf);
101         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
102     }
103
104     @Test
105     public void preProcessVnfAdapterTest() {
106         vnfAdapterImpl.preProcessVnfAdapter(execution);
107
108         assertEquals(requestContext.getMsoRequestId(), execution.getVariable("mso-request-id"));
109         assertEquals(serviceInstance.getServiceInstanceId(), execution.getVariable("mso-service-instance-id"));
110     }
111
112     @Test
113     public void postProcessVnfAdapter_CreateResponseTest() {
114         execution.setVariable("WorkflowResponse", VNF_ADAPTER_REST_CREATE_RESPONSE);
115         vnfAdapterImpl.postProcessVnfAdapter(execution);
116         assertEquals(TEST_VFMODULE_HEATSTACK_ID, vfModule.getHeatStackId());
117         assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, vfModule.getContrailServiceInstanceFqdn());
118         assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, execution.getVariable("contrailServiceInstanceFqdn"));
119         assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress());
120         assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, execution.getVariable("oamManagementV4Address"));
121         assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, genericVnf.getManagementV6Address());
122         assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, execution.getVariable("oamManagementV6Address"));
123         assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList"));
124     }
125
126
127     @Test
128     public void postProcessVnfAdapter_CreateResponseTest_EmptyCreateVfModuleResponseTag() {
129         expectedException.expect(BpmnError.class);
130         execution.setVariable("WorkflowResponse", "<vfModuleStackId></vfModuleStackId>");
131         vnfAdapterImpl.postProcessVnfAdapter(execution);
132     }
133
134     @Test
135     public void postProcessVnfAdapter_CreateResponseTest_EmptyVfModuleStackIdTag() {
136         execution.setVariable("WorkflowResponse", "<createVfModuleResponse></createVfModuleResponse>");
137         vnfAdapterImpl.postProcessVnfAdapter(execution);
138         assertNull(vfModule.getHeatStackId());
139     }
140
141     @Test
142     public void postProcessVnfAdapter_CreateResponseTest_EmptyHeatStackId() {
143         execution.setVariable("WorkflowResponse",
144                 "<createVfModuleResponse><vfModuleStackId></vfModuleStackId></createVfModuleResponse>");
145         vnfAdapterImpl.postProcessVnfAdapter(execution);
146         assertNull(vfModule.getHeatStackId());
147     }
148
149     @Test
150     public void postProcessVnfAdapter_CreateResponseTest_EmptyVfModuleOutputs() {
151         execution.setVariable("WorkflowResponse",
152                 "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>");
153         vnfAdapterImpl.postProcessVnfAdapter(execution);
154         assertNull(vfModule.getHeatStackId());
155         assertNull(vfModule.getContrailServiceInstanceFqdn());
156         assertNull(execution.getVariable("contrailServiceInstanceFqdn"));
157         assertNotEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress());
158         assertNull(execution.getVariable("oamManagementV4Address"));
159         assertNull(genericVnf.getManagementV6Address());
160         assertNull(execution.getVariable("oamManagementV6Address"));
161         assertNull(execution.getVariable("contrailNetworkPolicyFqdnList"));
162     }
163
164     @Test
165     public void postProcessVnfAdapter_DeleteResponseTest() {
166         vfModule.setHeatStackId(TEST_VFMODULE_HEATSTACK_ID);
167         execution.setVariable("WorkflowResponse", VNF_ADAPTER_REST_DELETE_RESPONSE);
168         vnfAdapterImpl.postProcessVnfAdapter(execution);
169         assertNull(vfModule.getHeatStackId());
170         assertEquals("", vfModule.getContrailServiceInstanceFqdn());
171         assertEquals("", execution.getVariable("contrailServiceInstanceFqdn"));
172         assertEquals("", genericVnf.getIpv4OamAddress());
173         assertEquals("", execution.getVariable("oamManagementV4Address"));
174         assertEquals("", genericVnf.getManagementV6Address());
175         assertEquals("", execution.getVariable("oamManagementV6Address"));
176         assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList"));
177     }
178
179     @Test
180     public void postProcessVnfAdapter_DeleteResponseTest_EmptyVfModuleOutputs() {
181         execution.setVariable("WorkflowResponse",
182                 "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>");
183         vnfAdapterImpl.postProcessVnfAdapter(execution);
184         assertNull(vfModule.getHeatStackId());
185         assertNull(vfModule.getContrailServiceInstanceFqdn());
186         assertNull(execution.getVariable("contrailServiceInstanceFqdn"));
187         assertNull(execution.getVariable("oamManagementV4Address"));
188         assertNull(execution.getVariable("oamManagementV6Address"));
189         assertNull(execution.getVariable("contrailNetworkPolicyFqdnList"));
190     }
191
192     @Test
193     public void postProcessVnfAdapter_ResponseNullTest() {
194         execution.setVariable("WorkflowResponse", null);
195         vnfAdapterImpl.postProcessVnfAdapter(execution);
196         assertNull(vfModule.getHeatStackId());
197     }
198
199     @Test
200     public void postProcessVnfAdapter_ResponseEmptyTest() {
201         execution.setVariable("WorkflowResponse", "");
202         vnfAdapterImpl.postProcessVnfAdapter(execution);
203         assertNull(vfModule.getHeatStackId());
204     }
205
206     @Test
207     public void postProcessVnfAdapter_DeleteResponseTest_VfModuleDeletedFalse() {
208         vfModule.setHeatStackId(TEST_VFMODULE_HEATSTACK_ID);
209         execution.setVariable("WorkflowResponse",
210                 "<deleteVfModuleResponse><vfModuleDeleted>false</vfModuleDeleted></deleteVfModuleResponse>");
211         vnfAdapterImpl.postProcessVnfAdapter(execution);
212         assertEquals(TEST_VFMODULE_HEATSTACK_ID, vfModule.getHeatStackId());
213     }
214
215     @Test
216     public void postProcessVnfAdapter_DeleteResponseTest_EmptyDeleteVfModuleResponseTag() {
217         expectedException.expect(BpmnError.class);
218         execution.setVariable("WorkflowResponse", "<vfModuleDeleted></vfModuleDeleted>");
219         vnfAdapterImpl.postProcessVnfAdapter(execution);
220     }
221
222     @Test
223     public void postProcessVnfAdapter_DeleteResponseTest_EmptyVfModuleDeletedTag() {
224         vfModule.setHeatStackId(TEST_VFMODULE_HEATSTACK_ID);
225         execution.setVariable("WorkflowResponse", "<deleteVfModuleResponse></deleteVfModuleResponse>");
226         vnfAdapterImpl.postProcessVnfAdapter(execution);
227         assertEquals(TEST_VFMODULE_HEATSTACK_ID, vfModule.getHeatStackId());
228     }
229
230     @Test
231     public void preProcessVnfAdapterExceptionTest() throws BBObjectNotFoundException {
232         expectedException.expect(BpmnError.class);
233         doThrow(RuntimeException.class).when(extractPojosForBB).extractByKey(any(),
234                 ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID));
235
236         vnfAdapterImpl.preProcessVnfAdapter(execution);
237     }
238
239     @Test
240     public void postProcessVnfAdapter_CreateVolumeResponseTest() {
241         execution.setVariable("WorkflowResponse", VNF_ADAPTER_VOLUME_CREATE_RESPONSE);
242         vnfAdapterImpl.postProcessVnfAdapter(execution);
243         assertEquals(TEST_VOLUME_HEATSTACK_ID, volumeGroup.getHeatStackId());
244     }
245
246     @Test
247     public void postProcessVnfAdapter_CreateVolumeEmptyResponseTest() {
248         expectedException.expect(BpmnError.class);
249         execution.setVariable("WorkflowResponse", "<createVolumeGroupResponse></createVolumeGroupResponse>");
250         vnfAdapterImpl.postProcessVnfAdapter(execution);
251         assertNull(volumeGroup.getHeatStackId());
252     }
253
254     @Test
255     public void postProcessVnfAdapter_DeleteResponseTest_DeleteVolumeGroup() {
256         volumeGroup.setHeatStackId(TEST_VOLUME_HEATSTACK_ID);
257         execution.setVariable("WorkflowResponse", VNF_ADAPTER_VOLUME_DELETE_RESPONSE);
258         vnfAdapterImpl.postProcessVnfAdapter(execution);
259         assertNull(volumeGroup.getHeatStackId());
260     }
261
262
263     @Test
264     public void postProcessVnfAdapter_DeleteResponseTest_VolumeGroupDeletedFalse() {
265         volumeGroup.setHeatStackId(TEST_VOLUME_HEATSTACK_ID);
266         execution.setVariable("WorkflowResponse",
267                 "<deleteVolumeGroupResponse><volumeGroupDeleted>false</volumeGroupDeleted></deleteVolumeGroupResponse>");
268         vnfAdapterImpl.postProcessVnfAdapter(execution);
269         assertEquals(TEST_VOLUME_HEATSTACK_ID, volumeGroup.getHeatStackId());
270     }
271
272     @Test
273     public void postProcessVnfAdapter_DeleteResponseTest_EmptyDeleteVolumeGroupResponseTag() {
274         expectedException.expect(BpmnError.class);
275         execution.setVariable("WorkflowResponse", "<volumeGroupDeleted></volumeGroupDeleted>");
276         vnfAdapterImpl.postProcessVnfAdapter(execution);
277     }
278
279     @Test
280     public void postProcessVnfAdapter_DeleteResponseTest_EmptyVolumeGroupDeletedTag() {
281         volumeGroup.setHeatStackId(TEST_VOLUME_HEATSTACK_ID);
282         execution.setVariable("WorkflowResponse", "<deleteVolumeGroupResponse></deleteVolumeGroupResponse>");
283         vnfAdapterImpl.postProcessVnfAdapter(execution);
284         assertEquals(TEST_VOLUME_HEATSTACK_ID, volumeGroup.getHeatStackId());
285     }
286
287     @Test
288     public void postProcessVnfAdapterExceptionTest() throws BBObjectNotFoundException {
289         doThrow(RuntimeException.class).when(extractPojosForBB).extractByKey(any(),
290                 ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID));
291
292         execution.setVariable("WorkflowResponse", VNF_ADAPTER_REST_CREATE_RESPONSE);
293         expectedException.expect(BpmnError.class);
294
295         vnfAdapterImpl.postProcessVnfAdapter(execution);
296     }
297 }