2 * Copyright 2016-2017, Nokia Corporation
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification;
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;
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;
45 public class TestVserverManager extends TestBase {
46 private ArgumentCaptor<Vserver> payload = ArgumentCaptor.forClass(Vserver.class);
49 private AAIRestApiProvider aaiRestApiProvider;
50 private VserverManager vserverManager;
52 private CloudInfrastructureApi cloudInfrastructureApi;
56 vserverManager = new VserverManager(aaiRestApiProvider, cbamRestApiProvider, driverProperties);
57 setField(VserverManager.class, "logger", logger);
58 when(aaiRestApiProvider.getCloudInfrastructureApi()).thenReturn(cloudInfrastructureApi);
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);
79 JsonObject link = new JsonObject();
80 link.addProperty("rel", "self");
81 link.addProperty("href", "url");
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");
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());
100 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
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();
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");
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());
141 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
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();
154 * test update when links is not present on vServer
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");
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());
179 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
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();
192 * test update when removing volumes
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());
210 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
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());
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);
240 vserverManager.delete(VIM_ID, affectedVnfc);
242 verify(cloudInfrastructureApi).deleteCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", "v3");
243 VOID_OBSERVABLE.assertCalled();
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"));
262 public void testInheritence() {
263 assertEquals(logger, vserverManager.getLogger());