Merge "Fix CVE-2018-1271, CVE-2018-10237"
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / test / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / onap / so / TestSoLifecycleManager.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.so;
17
18 import com.google.gson.JsonObject;
19 import com.nokia.cbam.lcm.v32.model.ExtVirtualLinkData;
20 import com.nokia.cbam.lcm.v32.model.VimSoftwareImage;
21 import com.nokia.cbam.lcm.v32.model.VnfInfo;
22 import com.nokia.cbam.lcm.v32.model.VnfProperty;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Optional;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.ArgumentCaptor;
29 import org.mockito.Mock;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIExternalSystemInfoProvider;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification.GenericVnfManager;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.*;
33 import org.onap.vnfmadapter.so.model.*;
34 import org.onap.vnfmdriver.model.*;
35
36 import static com.nokia.cbam.lcm.v32.model.VimInfo.VimInfoTypeEnum.*;
37 import static junit.framework.TestCase.assertEquals;
38 import static org.mockito.ArgumentMatchers.eq;
39 import static org.mockito.Mockito.verify;
40 import static org.mockito.Mockito.when;
41 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION;
42
43 public class TestSoLifecycleManager extends TestBase {
44
45     private static final String VNFD_ID = "cbamVnfdId";
46     @Mock
47     private LifecycleManagerForSo lifecycleManager;
48     @Mock
49     private AAIExternalSystemInfoProvider vimInfoProvider;
50     @Mock
51     private JobManagerForSo jobManager;
52     @Mock
53     private GenericVnfManager genericVnfManager;
54     private SoLifecycleManager soLifecycleManager;
55
56     @Before
57     public void init() {
58         soLifecycleManager = new SoLifecycleManager(lifecycleManager, vimInfoProvider, cbamRestApiProviderForSo, jobManager, genericVnfManager);
59     }
60
61     /**
62      * test VNF creation
63      */
64     @Test
65     public void testVnfCreation() throws Exception {
66         SoVnfCreationRequest onapRequest = new SoVnfCreationRequest();
67         Object additionalParams = new JsonObject();
68         onapRequest.setAdditionalParams(additionalParams);
69         onapRequest.setCsarId("csarId");
70         onapRequest.setDescription("description");
71         onapRequest.setName("name");
72         VnfInfo vnfInfo = new VnfInfo();
73         vnfInfo.setId(VNF_ID);
74         LifecycleManager.VnfCreationResult genericResponse = new LifecycleManager.VnfCreationResult(vnfInfo, VNFD_ID);
75         when(lifecycleManager.create(VNFM_ID, "csarId", "name", "description")).thenReturn(genericResponse);
76         //when
77         SoVnfCreationResponse response = soLifecycleManager.create(VNFM_ID, onapRequest);
78         //verify
79         assertEquals(VNF_ID, response.getVnfId());
80     }
81
82     /**
83      * test VNF activation without parameters
84      */
85     @Test
86     public void testVnfActivation() throws Exception {
87         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
88         soRequest.setVimId(VIM_ID);
89
90         JsonObject additionalParams = new JsonObject();
91         soRequest.setAdditionalParams(additionalParams);
92         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
93         vnfInfo.setVnfdId(VNFD_ID);
94         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
95         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
96         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
97         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
98         instantiationResponse.setJobId(JOB_ID);
99         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
100         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
101         esrInfo.setUrl("http://localhost:123/v3");
102         esrInfo.setDomain("domain");
103         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
104         VnfInfo cbamVnfInfo = new VnfInfo();
105         cbamVnfInfo.setExtensions(new ArrayList<>());
106         VnfProperty onapVnfdId = new VnfProperty();
107         cbamVnfInfo.getExtensions().add(onapVnfdId);
108         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
109         onapVnfdId.setValue("csarId");
110         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
111         //when
112         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
113         //verify
114         assertEquals(JOB_ID, jobHandler.getJobId());
115         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
116         assertEquals(0, actualAdditionalParameters.getComputeResourceFlavours().size());
117         assertEquals(additionalParams, actualAdditionalParameters.getAdditionalParams());
118         assertEquals(0, actualAdditionalParameters.getExternalConnectionPointAddresses().size());
119         assertEquals(0, actualAdditionalParameters.getExtManagedVirtualLinks().size());
120         assertEquals(0, actualAdditionalParameters.getExtVirtualLinks().size());
121         assertEquals("default", actualAdditionalParameters.getInstantiationLevel());
122         assertEquals(0, actualAdditionalParameters.getSoftwareImages().size());
123         assertEquals(OPENSTACK_V3_INFO, actualAdditionalParameters.getVimType());
124         assertEquals(0, actualAdditionalParameters.getZones().size());
125         assertEquals(0, extLinks.getValue().size());
126     }
127
128
129     /**
130      * test VNF activation without parameters for V2 based API
131      */
132     @Test
133     public void testVnfActivationForV2() throws Exception {
134         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
135         soRequest.setVimId(VIM_ID);
136
137         JsonObject additionalParams = new JsonObject();
138         soRequest.setAdditionalParams(additionalParams);
139         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
140         vnfInfo.setVnfdId(VNFD_ID);
141         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
142         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
143         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
144         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
145         instantiationResponse.setJobId(JOB_ID);
146         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
147         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
148         esrInfo.setUrl("http://localhost:123/v2");
149         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
150         VnfInfo cbamVnfInfo = new VnfInfo();
151         cbamVnfInfo.setExtensions(new ArrayList<>());
152         VnfProperty onapVnfdId = new VnfProperty();
153         cbamVnfInfo.getExtensions().add(onapVnfdId);
154         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
155         onapVnfdId.setValue("csarId");
156         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
157         //when
158         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
159         //verify
160         assertEquals(JOB_ID, jobHandler.getJobId());
161         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
162         assertEquals(OPENSTACK_V2_INFO, actualAdditionalParameters.getVimType());
163     }
164
165     /**
166      * test VNF activation without parameters for vCloud based API
167      */
168     @Test
169     public void testVnfActivationForVcloud() throws Exception {
170         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
171         soRequest.setVimId(VIM_ID);
172
173         JsonObject additionalParams = new JsonObject();
174         soRequest.setAdditionalParams(additionalParams);
175         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
176         vnfInfo.setVnfdId(VNFD_ID);
177         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
178         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
179         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
180         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
181         instantiationResponse.setJobId(JOB_ID);
182         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
183         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
184         esrInfo.setUrl("http://localhost:123/");
185         esrInfo.setDomain("domain");
186         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
187         VnfInfo cbamVnfInfo = new VnfInfo();
188         cbamVnfInfo.setExtensions(new ArrayList<>());
189         VnfProperty onapVnfdId = new VnfProperty();
190         cbamVnfInfo.getExtensions().add(onapVnfdId);
191         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
192         onapVnfdId.setValue("csarId");
193         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
194         //when
195         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
196         //verify
197         assertEquals(JOB_ID, jobHandler.getJobId());
198         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
199         assertEquals(VMWARE_VCLOUD_INFO, actualAdditionalParameters.getVimType());
200     }
201
202     /**
203      * test VNF activation with VDU mappings
204      */
205     @Test
206     public void testVnfActivationWithVdu() throws Exception {
207         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
208         soRequest.setVimId(VIM_ID);
209         JsonObject additionalParams = new JsonObject();
210         soRequest.setAdditionalParams(additionalParams);
211         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
212         vnfInfo.setVnfdId(VNFD_ID);
213         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
214         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
215         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
216         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
217         instantiationResponse.setJobId(JOB_ID);
218         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
219         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
220         esrInfo.setUrl("http://localhost:123/v3");
221         esrInfo.setDomain("domain");
222         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
223         VnfInfo cbamVnfInfo = new VnfInfo();
224         cbamVnfInfo.setExtensions(new ArrayList<>());
225         VnfProperty onapVnfdId = new VnfProperty();
226         cbamVnfInfo.getExtensions().add(onapVnfdId);
227         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
228         onapVnfdId.setValue("csarId");
229         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
230         soRequest.setVduMappings(new ArrayList<>());
231         SoVduMapping vduMapping = new SoVduMapping();
232         soRequest.getVduMappings().add(vduMapping);
233         vduMapping.setFlavourId("flavorId");
234         vduMapping.setImageId("imageId");
235         vduMapping.setVduId("vduId");
236         //when
237         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
238         //verify
239         assertEquals(JOB_ID, jobHandler.getJobId());
240         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
241         assertEquals(1, actualAdditionalParameters.getComputeResourceFlavours().size());
242         assertEquals(1, actualAdditionalParameters.getSoftwareImages().size());
243         VimSoftwareImage image = actualAdditionalParameters.getSoftwareImages().get(0);
244         assertEquals(VIM_ID, image.getVimId());
245         assertEquals("vduId_image", image.getVnfdSoftwareImageId());
246         assertEquals("imageId", image.getResourceId());
247         assertEquals(VIM_ID, actualAdditionalParameters.getComputeResourceFlavours().get(0).getVimId());
248         assertEquals("flavorId", actualAdditionalParameters.getComputeResourceFlavours().get(0).getResourceId());
249         assertEquals("vduId", actualAdditionalParameters.getComputeResourceFlavours().get(0).getVnfdVirtualComputeDescId());
250         assertEquals(OPENSTACK_V3_INFO, actualAdditionalParameters.getVimType());
251     }
252
253     /**
254      * test VNF activation with network mappings
255      */
256     @Test
257     public void testVnfActivationWithNetworkMapping() throws Exception {
258         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
259         soRequest.setVimId(VIM_ID);
260         JsonObject additionalParams = new JsonObject();
261         soRequest.setAdditionalParams(additionalParams);
262         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
263         vnfInfo.setVnfdId(VNFD_ID);
264         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
265         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
266         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
267         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
268         instantiationResponse.setJobId(JOB_ID);
269         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
270         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
271         esrInfo.setUrl("http://localhost:123/v3");
272         esrInfo.setDomain("domain");
273         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
274         VnfInfo cbamVnfInfo = new VnfInfo();
275         cbamVnfInfo.setExtensions(new ArrayList<>());
276         VnfProperty onapVnfdId = new VnfProperty();
277         cbamVnfInfo.getExtensions().add(onapVnfdId);
278         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
279         onapVnfdId.setValue("csarId");
280         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
281         soRequest.setNetworkMappings(new ArrayList<>());
282         SoNetworkMapping networkMapping = new SoNetworkMapping();
283         networkMapping.setVldId("myVldId");
284         networkMapping.setNetworkProviderId("providerId");
285         networkMapping.setAssignedAddresses(new ArrayList<>());
286         SoAssignedAddresses e1 = new SoAssignedAddresses();
287         e1.setIpAddress("1.2.3.4");
288         e1.setCpdId("cpdId");
289         SoAssignedAddresses e2 = new SoAssignedAddresses();
290         e2.setIpAddress("1.2.3.5");
291         e2.setCpdId("cpdId2");
292         SoAssignedAddresses e3 = new SoAssignedAddresses();
293         e3.setIpAddress("1.2.3.6");
294         e3.setCpdId("cpdId2");
295         SoAssignedAddresses e4 = new SoAssignedAddresses();
296         e4.setIpAddress("1.2.3.6");
297         e4.setCpdId("cpdId2");
298         networkMapping.getAssignedAddresses().add(e1);
299         networkMapping.getAssignedAddresses().add(e2);
300         networkMapping.getAssignedAddresses().add(e3);
301         networkMapping.getAssignedAddresses().add(e4);
302         SoNetworkMapping networkMapping2 = new SoNetworkMapping();
303         soRequest.getNetworkMappings().add(networkMapping);
304         soRequest.getNetworkMappings().add(networkMapping2);
305         networkMapping2.setVldId("myVldId2");
306         networkMapping2.setNetworkProviderId("providerId2");
307
308         //when
309         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
310         //verify
311         assertEquals(JOB_ID, jobHandler.getJobId());
312         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
313         assertEquals(2, actualAdditionalParameters.getExtVirtualLinks().size());
314         ExtVirtualLinkData actualVl = actualAdditionalParameters.getExtVirtualLinks().get(0);
315         assertEquals(VIM_ID, actualVl.getVimId());
316         assertEquals("providerId", actualVl.getResourceId());
317         assertEquals("myVldId", actualVl.getExtVirtualLinkId());
318         assertEquals(2, actualVl.getExtCps().size());
319         assertEquals("cpdId", actualVl.getExtCps().get(0).getCpdId());
320         assertEquals("1.2.3.4", actualVl.getExtCps().get(0).getAddresses().get(0).getIp());
321         assertEquals("cpdId2", actualVl.getExtCps().get(1).getCpdId());
322         assertEquals("1.2.3.5", actualVl.getExtCps().get(1).getAddresses().get(0).getIp());
323         assertEquals("1.2.3.6", actualVl.getExtCps().get(1).getAddresses().get(1).getIp());
324     }
325
326     /**
327      * test VNF activation with server mappings
328      */
329     @Test
330     public void testVnfActivationWithServerMappings() throws Exception {
331         SoVnfActivationRequest soRequest = new SoVnfActivationRequest();
332         soRequest.setVimId(VIM_ID);
333         JsonObject additionalParams = new JsonObject();
334         soRequest.setAdditionalParams(additionalParams);
335         org.onap.vnfmdriver.model.VnfInfo vnfInfo = new org.onap.vnfmdriver.model.VnfInfo();
336         vnfInfo.setVnfdId(VNFD_ID);
337         when(lifecycleManager.queryVnf(VNFM_ID, VNF_ID)).thenReturn(vnfInfo);
338         ArgumentCaptor<List<ExtVirtualLinkInfo>> extLinks = ArgumentCaptor.forClass(List.class);
339         ArgumentCaptor<AdditionalParameters> additionalParameters = ArgumentCaptor.forClass(AdditionalParameters.class);
340         VnfInstantiateResponse instantiationResponse = new VnfInstantiateResponse();
341         instantiationResponse.setJobId(JOB_ID);
342         when(lifecycleManager.instantiate(eq(VNFM_ID), extLinks.capture(), eq(httpResponse), eq(additionalParams), additionalParameters.capture(), eq(VNF_ID), eq("csarId"), eq(VNFD_ID))).thenReturn(instantiationResponse);
343         org.onap.vnfmdriver.model.VimInfo esrInfo = new org.onap.vnfmdriver.model.VimInfo();
344         esrInfo.setUrl("http://localhost:123/v3");
345         esrInfo.setDomain("domain");
346         when(vimInfoProvider.getVimInfo(VIM_ID)).thenReturn(esrInfo);
347         VnfInfo cbamVnfInfo = new VnfInfo();
348         cbamVnfInfo.setExtensions(new ArrayList<>());
349         VnfProperty onapVnfdId = new VnfProperty();
350         cbamVnfInfo.getExtensions().add(onapVnfdId);
351         onapVnfdId.setName(LifecycleManager.ONAP_CSAR_ID);
352         onapVnfdId.setValue("csarId");
353         when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(cbamVnfInfo));
354         soRequest.setServerMappings(new ArrayList<>());
355         SoServerMapping s1 = new SoServerMapping();
356         soRequest.getServerMappings().add(s1);
357         s1.setVduId("vduId1");
358         s1.setAvailabilityZoneId("azId1");
359         SoServerMapping s2 = new SoServerMapping();
360         soRequest.getServerMappings().add(s2);
361         s2.setVduId("vduId1");
362         s2.setAvailabilityZoneId("azId1");
363         SoServerMapping s3 = new SoServerMapping();
364         soRequest.getServerMappings().add(s3);
365         s3.setVduId("vduId2");
366         s3.setAvailabilityZoneId("azId1");
367
368         //when
369         SoJobHandler jobHandler = soLifecycleManager.activate(VNFM_ID, VNF_ID, soRequest, httpResponse);
370         //verify
371         assertEquals(JOB_ID, jobHandler.getJobId());
372         AdditionalParameters actualAdditionalParameters = additionalParameters.getValue();
373         assertEquals(2, actualAdditionalParameters.getZones().size());
374         assertEquals(VIM_ID, actualAdditionalParameters.getZones().get(0).getVimId());
375         assertEquals("azId1", actualAdditionalParameters.getZones().get(0).getResourceId());
376         assertEquals("vduId1", actualAdditionalParameters.getZones().get(0).getId());
377         assertEquals(VIM_ID, actualAdditionalParameters.getZones().get(1).getVimId());
378         assertEquals("azId1", actualAdditionalParameters.getZones().get(1).getResourceId());
379         assertEquals("vduId2", actualAdditionalParameters.getZones().get(1).getId());
380     }
381
382     /**
383      * test VNF scale in
384      */
385     @Test
386     public void testScaleIn() throws Exception {
387         SoVnfScaleRequest soRequest = new SoVnfScaleRequest();
388         ArgumentCaptor<org.onap.vnfmdriver.model.VnfScaleRequest> driverRequest = ArgumentCaptor.forClass(org.onap.vnfmdriver.model.VnfScaleRequest.class);
389         JobInfo jobInfo = new JobInfo();
390         jobInfo.setJobId(JOB_ID);
391
392         soRequest.setAspectId("aspectId");
393         soRequest.setDirection(SoScaleDirection.IN);
394         soRequest.setSteps(2);
395         JsonObject additionalParams = new JsonObject();
396         soRequest.setAdditionalParams(additionalParams);
397         when(lifecycleManager.scaleVnf(eq(VNFM_ID), eq(VNF_ID), driverRequest.capture(), eq(httpResponse))).thenReturn(jobInfo);
398         //when
399         SoJobHandler jobHandler = soLifecycleManager.scale(VNFM_ID, VNF_ID, soRequest, httpResponse);
400         //verify
401         assertEquals(JOB_ID, jobHandler.getJobId());
402         assertEquals(2, Integer.parseInt(driverRequest.getValue().getNumberOfSteps()));
403         assertEquals("aspectId", driverRequest.getValue().getAspectId());
404         assertEquals(org.onap.vnfmdriver.model.ScaleDirection.IN, driverRequest.getValue().getType());
405         assertEquals(additionalParams, driverRequest.getValue().getAdditionalParam());
406     }
407
408     /**
409      * test VNF scale out
410      */
411     @Test
412     public void testScaleOut() throws Exception {
413         SoVnfScaleRequest soRequest = new SoVnfScaleRequest();
414         ArgumentCaptor<org.onap.vnfmdriver.model.VnfScaleRequest> driverRequest = ArgumentCaptor.forClass(org.onap.vnfmdriver.model.VnfScaleRequest.class);
415         JobInfo jobInfo = new JobInfo();
416         jobInfo.setJobId(JOB_ID);
417
418         soRequest.setAspectId("aspectId");
419         soRequest.setDirection(SoScaleDirection.OUT);
420         soRequest.setSteps(2);
421         JsonObject additionalParams = new JsonObject();
422         soRequest.setAdditionalParams(additionalParams);
423         when(lifecycleManager.scaleVnf(eq(VNFM_ID), eq(VNF_ID), driverRequest.capture(), eq(httpResponse))).thenReturn(jobInfo);
424         //when
425         SoJobHandler jobHandler = soLifecycleManager.scale(VNFM_ID, VNF_ID, soRequest, httpResponse);
426         //verify
427         assertEquals(JOB_ID, jobHandler.getJobId());
428         assertEquals(2, Integer.parseInt(driverRequest.getValue().getNumberOfSteps()));
429         assertEquals("aspectId", driverRequest.getValue().getAspectId());
430         assertEquals(org.onap.vnfmdriver.model.ScaleDirection.OUT, driverRequest.getValue().getType());
431         assertEquals(additionalParams, driverRequest.getValue().getAdditionalParam());
432     }
433
434     /**
435      * test VNF heal
436      */
437     @Test
438     public void testHeal() throws Exception {
439         SoVnfHealRequest soRequest = new SoVnfHealRequest();
440         ArgumentCaptor<org.onap.vnfmdriver.model.VnfHealRequest> driverRequest = ArgumentCaptor.forClass(org.onap.vnfmdriver.model.VnfHealRequest.class);
441         JobInfo jobInfo = new JobInfo();
442         jobInfo.setJobId(JOB_ID);
443
444         soRequest.setVnfcId(VNF_ID + "_vnfcId");
445         JsonObject additionalParams = new JsonObject();
446         soRequest.setAdditionalParams(additionalParams);
447         when(lifecycleManager.healVnf(eq(VNFM_ID), eq(VNF_ID), driverRequest.capture(), eq(Optional.of("vnfcId")), eq(httpResponse))).thenReturn(jobInfo);
448         //when
449         SoJobHandler jobHandler = soLifecycleManager.heal(VNFM_ID, VNF_ID, soRequest, httpResponse);
450         //verify
451         assertEquals(JOB_ID, jobHandler.getJobId());
452         assertEquals("notUsedByDriver", driverRequest.getValue().getAffectedvm().getVduid());
453         assertEquals("notUsedByDriver", driverRequest.getValue().getAffectedvm().getVimid());
454         assertEquals("unknown", driverRequest.getValue().getAffectedvm().getVmname());
455         assertEquals("heal", driverRequest.getValue().getAction());
456     }
457
458     /**
459      * test VNF deactivation
460      */
461     @Test
462     public void testDeactivation() throws Exception {
463         SoVnfTerminationRequest soRequest = new SoVnfTerminationRequest();
464         ArgumentCaptor<org.onap.vnfmdriver.model.VnfTerminateRequest> driverRequest = ArgumentCaptor.forClass(org.onap.vnfmdriver.model.VnfTerminateRequest.class);
465         JobInfo jobInfo = new JobInfo();
466         jobInfo.setJobId(JOB_ID);
467         soRequest.setGracefulTerminationTimeoutInMs(1234);
468         soRequest.setMode(SoTerminationMode.GRACEFUL);
469         JsonObject additionalParams = new JsonObject();
470         soRequest.setAdditionalParams(additionalParams);
471         when(lifecycleManager.terminateAndDelete(eq(VNFM_ID), eq(VNF_ID), driverRequest.capture(), eq(httpResponse))).thenReturn(jobInfo);
472         //when
473         SoJobHandler jobHandler = soLifecycleManager.deactivate(VNFM_ID, VNF_ID, soRequest, httpResponse);
474         //verify
475         assertEquals(JOB_ID, jobHandler.getJobId());
476         assertEquals(VnfTerminationType.GRACEFUL, driverRequest.getValue().getTerminationType());
477         assertEquals("1234", driverRequest.getValue().getGracefulTerminationTimeout());
478     }
479
480     /**
481      * test VNF deactivation
482      */
483     @Test
484     public void testDeactivationForceFull() throws Exception {
485         SoVnfTerminationRequest soRequest = new SoVnfTerminationRequest();
486         ArgumentCaptor<org.onap.vnfmdriver.model.VnfTerminateRequest> driverRequest = ArgumentCaptor.forClass(org.onap.vnfmdriver.model.VnfTerminateRequest.class);
487         JobInfo jobInfo = new JobInfo();
488         jobInfo.setJobId(JOB_ID);
489         soRequest.setMode(SoTerminationMode.FORCEFUL);
490         JsonObject additionalParams = new JsonObject();
491         soRequest.setAdditionalParams(additionalParams);
492         when(lifecycleManager.terminateAndDelete(eq(VNFM_ID), eq(VNF_ID), driverRequest.capture(), eq(httpResponse))).thenReturn(jobInfo);
493         //when
494         SoJobHandler jobHandler = soLifecycleManager.deactivate(VNFM_ID, VNF_ID, soRequest, httpResponse);
495         //verify
496         assertEquals(JOB_ID, jobHandler.getJobId());
497         assertEquals(VnfTerminationType.FORCEFUL, driverRequest.getValue().getTerminationType());
498         assertEquals(null, driverRequest.getValue().getGracefulTerminationTimeout());
499     }
500
501     /**
502      * test VNF deletion
503      */
504     @Test
505     public void testDelete() throws Exception {
506         //when
507         soLifecycleManager.delete(VNFM_ID, VNF_ID);
508         //verify
509         verify(lifecycleManager).deleteVnf(VNFM_ID, VNF_ID);
510     }
511
512     /**
513      * test VNF custom operation
514      */
515     @Test
516     public void testCustomOperation() throws Exception {
517         SoVnfCustomOperation soRequest = new SoVnfCustomOperation();
518         JobInfo jobInfo = new JobInfo();
519         jobInfo.setJobId(JOB_ID);
520         soRequest.setOperationId("operationId");
521         JsonObject additionalParams = new JsonObject();
522         soRequest.setAdditionalParams(additionalParams);
523         when(lifecycleManager.customOperation(VNFM_ID, VNF_ID, "operationId", additionalParams, httpResponse)).thenReturn(jobInfo);
524         //when
525         SoJobHandler jobHandler = soLifecycleManager.customOperation(VNFM_ID, VNF_ID, soRequest, httpResponse);
526         //verify
527         assertEquals(JOB_ID, jobHandler.getJobId());
528     }
529
530
531     /**
532      * test VNF custom operation
533      */
534     @Test
535     public void testJobDetails() throws Exception {
536         JobDetailInfo currentJobDetails = new JobDetailInfo();
537         currentJobDetails.setJobId(JOB_ID);
538         when(jobManager.getJob(VNFM_ID, JOB_ID)).thenReturn(currentJobDetails);
539         currentJobDetails.setResponseDescriptor(new JobDetailInfoResponseDescriptor());
540
541         assertJob(currentJobDetails, SoJobStatus.FINISHED, JobStatus.FINISHED);
542         assertJob(currentJobDetails, SoJobStatus.FAILED, JobStatus.ERROR);
543         assertJob(currentJobDetails, SoJobStatus.FAILED, JobStatus.TIMEOUT);
544         assertJob(currentJobDetails, SoJobStatus.STARTED, JobStatus.STARTED);
545         assertJob(currentJobDetails, SoJobStatus.STARTED, JobStatus.PROCESSING);
546
547     }
548
549     private void assertJob(JobDetailInfo currentJobDetails, SoJobStatus expectedState, JobStatus started) {
550         currentJobDetails.getResponseDescriptor().setStatus(started);
551         //when
552         SoJobDetail jobDetail = soLifecycleManager.getJobDetails(VNFM_ID, JOB_ID);
553         //verify
554         assertEquals(JOB_ID, jobDetail.getJobId());
555         assertEquals(expectedState, jobDetail.getStatus());
556     }
557
558
559 }