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