080615a175c999174264eea0b58dab00ecd15ece
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / test / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / onap / direct / notification / TestVserverManager.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.direct.notification;
17
18 import com.google.gson.JsonArray;
19 import com.google.gson.JsonObject;
20 import com.nokia.cbam.lcm.v32.model.AffectedVirtualStorage;
21 import com.nokia.cbam.lcm.v32.model.AffectedVnfc;
22 import com.nokia.cbam.lcm.v32.model.ResourceHandle;
23 import java.util.ArrayList;
24 import java.util.List;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.ArgumentCaptor;
28 import org.mockito.Mock;
29 import org.onap.aai.api.CloudInfrastructureApi;
30 import org.onap.aai.model.Relationship;
31 import org.onap.aai.model.Vserver;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.TestBase;
34
35 import static junit.framework.TestCase.assertEquals;
36 import static org.mockito.Mockito.eq;
37 import static org.mockito.Mockito.verify;
38 import static org.mockito.Mockito.when;
39 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification.AbstractManager.buildRelationshipData;
40 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification.TestGenericVnfManager.assertRelation;
41 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner;
42 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName;
43 import static org.springframework.test.util.ReflectionTestUtils.setField;
44
45 public class TestVserverManager extends TestBase {
46     private ArgumentCaptor<Vserver> payload = ArgumentCaptor.forClass(Vserver.class);
47
48     @Mock
49     private AAIRestApiProvider aaiRestApiProvider;
50     private VserverManager vserverManager;
51     @Mock
52     private CloudInfrastructureApi cloudInfrastructureApi;
53
54     @Before
55     public void init() {
56         vserverManager = new VserverManager(aaiRestApiProvider, cbamRestApiProvider, driverProperties);
57         setField(VserverManager.class, "logger", logger);
58         when(aaiRestApiProvider.getCloudInfrastructureApi()).thenReturn(cloudInfrastructureApi);
59     }
60
61     /**
62      * test update
63      */
64     @Test
65     public void testUpdate() throws Exception {
66         AffectedVnfc affectedVnfc = new AffectedVnfc();
67         affectedVnfc.setComputeResource(new ResourceHandle());
68         affectedVnfc.getComputeResource().setResourceId("serverProviderId");
69         JsonObject additionalData = new JsonObject();
70         additionalData.addProperty("name", "serverName");
71         additionalData.addProperty("tenantId", "myTenantId");
72         JsonArray links = new JsonArray();
73         links.add(new JsonObject());
74         JsonObject nonRelSelfink = new JsonObject();
75         nonRelSelfink.addProperty("rel", "self2");
76         nonRelSelfink.addProperty("href", "url");
77         links.add(nonRelSelfink);
78
79         JsonObject link = new JsonObject();
80         link.addProperty("rel", "self");
81         link.addProperty("href", "url");
82         links.add(link);
83         additionalData.add("links", links);
84         affectedVnfc.getComputeResource().setAdditionalData(additionalData);
85         affectedVnfc.setId("vnfcId");
86         List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
87         affectedStorages.add(new AffectedVirtualStorage());
88         affectedStorages.get(0).setId("sId");
89         affectedStorages.get(0).setResource(new ResourceHandle());
90         affectedStorages.get(0).getResource().setResourceId("storageProviderId");
91         affectedVnfc.setStorageResourceIds(new ArrayList<>());
92         affectedVnfc.getStorageResourceIds().add("sId");
93
94         Vserver existingVserver = new Vserver();
95         existingVserver.setRelationshipList(new ArrayList<>());
96         existingVserver.getRelationshipList().add(VserverManager.linkTo(VIM_ID, "tenantId", "serverId2"));
97         when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
98         when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(VOID_OBSERVABLE.value());
99         //when
100         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
101         //verify
102         Vserver vserver = payload.getValue();
103         assertEquals("serverProviderId", vserver.getVserverId());
104         assertEquals("active", vserver.getProvStatus());
105         assertEquals("serverName", vserver.getVserverName());
106         assertEquals("url", vserver.getVserverSelflink());
107         assertEquals(1, vserver.getVolumes().size());
108         assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
109         assertEquals(2, vserver.getRelationshipList().size());
110         VOID_OBSERVABLE.assertCalled();
111     }
112
113     /**
114      * test missing links
115      */
116     @Test
117     public void testUpdateEmptyLinks() throws Exception {
118         AffectedVnfc affectedVnfc = new AffectedVnfc();
119         affectedVnfc.setComputeResource(new ResourceHandle());
120         affectedVnfc.getComputeResource().setResourceId("serverProviderId");
121         JsonObject additionalData = new JsonObject();
122         additionalData.addProperty("name", "serverName");
123         additionalData.addProperty("tenantId", "myTenantId");
124         JsonArray links = new JsonArray();
125         additionalData.add("links", links);
126         affectedVnfc.getComputeResource().setAdditionalData(additionalData);
127         affectedVnfc.setId("vnfcId");
128         List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
129         affectedStorages.add(new AffectedVirtualStorage());
130         affectedStorages.get(0).setId("sId");
131         affectedStorages.get(0).setResource(new ResourceHandle());
132         affectedStorages.get(0).getResource().setResourceId("storageProviderId");
133         affectedVnfc.setStorageResourceIds(new ArrayList<>());
134         affectedVnfc.getStorageResourceIds().add("sId");
135
136         Vserver existingVserver = new Vserver();
137         existingVserver.setVolumes(new ArrayList<>());
138         when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
139         when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(VOID_OBSERVABLE.value());
140         //when
141         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
142         //verify
143         Vserver vserver = payload.getValue();
144         assertEquals("serverProviderId", vserver.getVserverId());
145         assertEquals("active", vserver.getProvStatus());
146         assertEquals("serverName", vserver.getVserverName());
147         assertEquals("unknown", vserver.getVserverSelflink());
148         assertEquals(1, vserver.getVolumes().size());
149         assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
150         VOID_OBSERVABLE.assertCalled();
151     }
152
153     /**
154      * test update when links is not present on vServer
155      */
156     @Test
157     public void testUpdateWithNoLinks() throws Exception {
158         AffectedVnfc affectedVnfc = new AffectedVnfc();
159         affectedVnfc.setComputeResource(new ResourceHandle());
160         affectedVnfc.getComputeResource().setResourceId("serverProviderId");
161         JsonObject additionalData = new JsonObject();
162         additionalData.addProperty("name", "serverName");
163         additionalData.addProperty("tenantId", "myTenantId");
164         affectedVnfc.getComputeResource().setAdditionalData(additionalData);
165         affectedVnfc.setId("vnfcId");
166         List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
167         affectedStorages.add(new AffectedVirtualStorage());
168         affectedStorages.get(0).setId("sId");
169         affectedStorages.get(0).setResource(new ResourceHandle());
170         affectedStorages.get(0).getResource().setResourceId("storageProviderId");
171         affectedVnfc.setStorageResourceIds(new ArrayList<>());
172         affectedVnfc.getStorageResourceIds().add("sId");
173
174         Vserver existingVserver = new Vserver();
175         existingVserver.setVolumes(new ArrayList<>());
176         when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
177         when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(VOID_OBSERVABLE.value());
178         //when
179         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
180         //verify
181         Vserver vserver = payload.getValue();
182         assertEquals("serverProviderId", vserver.getVserverId());
183         assertEquals("active", vserver.getProvStatus());
184         assertEquals("serverName", vserver.getVserverName());
185         assertEquals("unknown", vserver.getVserverSelflink());
186         assertEquals(1, vserver.getVolumes().size());
187         assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
188         VOID_OBSERVABLE.assertCalled();
189     }
190
191     /**
192      * test update when removing volumes
193      */
194     @Test
195     public void testUpdateWithRemovingVolumes() throws Exception {
196         AffectedVnfc affectedVnfc = new AffectedVnfc();
197         affectedVnfc.setComputeResource(new ResourceHandle());
198         affectedVnfc.getComputeResource().setResourceId("serverProviderId");
199         JsonObject additionalData = new JsonObject();
200         additionalData.addProperty("name", "serverName");
201         additionalData.addProperty("tenantId", "myTenantId");
202         affectedVnfc.getComputeResource().setAdditionalData(additionalData);
203         affectedVnfc.setId("vnfcId");
204         List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
205         Vserver existingVserver = new Vserver();
206         existingVserver.setVolumes(new ArrayList<>());
207         when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
208         when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(VOID_OBSERVABLE.value());
209         //when
210         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
211         //verify
212         Vserver vserver = payload.getValue();
213         assertEquals("serverProviderId", vserver.getVserverId());
214         assertEquals("active", vserver.getProvStatus());
215         assertEquals("serverName", vserver.getVserverName());
216         assertEquals("unknown", vserver.getVserverSelflink());
217         assertEquals(0, vserver.getVolumes().size());
218     }
219
220     /**
221      * test delete
222      */
223     @Test
224     public void testDelete() throws Exception {
225         AffectedVnfc affectedVnfc = new AffectedVnfc();
226         affectedVnfc.setComputeResource(new ResourceHandle());
227         affectedVnfc.getComputeResource().setResourceId("serverProviderId");
228         JsonObject additionalData = new JsonObject();
229         additionalData.addProperty("name", "serverName");
230         additionalData.addProperty("tenantId", "myTenantId");
231         affectedVnfc.getComputeResource().setAdditionalData(additionalData);
232         affectedVnfc.setId("vnfcId");
233         Vserver existingVserver = new Vserver();
234         existingVserver.setResourceVersion("v3");
235         existingVserver.setVserverId("serverProviderId");
236         when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
237         when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
238
239         //when
240         vserverManager.delete(VIM_ID, affectedVnfc);
241         //verify
242         verify(cloudInfrastructureApi).deleteCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", "v3");
243         VOID_OBSERVABLE.assertCalled();
244     }
245
246     @Test
247     public void testLinks() {
248         Relationship relationship = VserverManager.linkTo(VIM_ID, "myTenantPrivderId", "serverProviderId");
249         List<Relationship> relationships = new ArrayList<>();
250         relationships.add(relationship);
251         assertRelation(relationships, "vserver",
252                 buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(VIM_ID)),
253                 buildRelationshipData("cloud-region.cloud-region-id", getRegionName(VIM_ID)),
254                 buildRelationshipData("tenant.tenant-id", "myTenantPrivderId"),
255                 buildRelationshipData("vserver.vserver-id", "serverProviderId"));
256     }
257
258     /**
259      * test inheritence
260      */
261     @Test
262     public void testInheritence() {
263         assertEquals(logger, vserverManager.getLogger());
264     }
265
266
267 }