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.Matchers.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 String url = "/cloud-regions/cloud-region///tenants/tenant//vservers/vserver/";
96 Vserver existingVserver = new Vserver();
97 existingVserver.setVolumes(new ArrayList<>());
98 when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
99 when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
101 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
103 Vserver vserver = payload.getValue();
104 assertEquals("serverProviderId", vserver.getVserverId());
105 assertEquals("active", vserver.getProvStatus());
106 assertEquals("serverName", vserver.getVserverName());
107 assertEquals("url", vserver.getVserverSelflink());
108 assertEquals(1, vserver.getVolumes().size());
109 assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
116 public void testUpdateEmptyLinks() throws Exception {
117 AffectedVnfc affectedVnfc = new AffectedVnfc();
118 affectedVnfc.setComputeResource(new ResourceHandle());
119 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
120 JsonObject additionalData = new JsonObject();
121 additionalData.addProperty("name", "serverName");
122 additionalData.addProperty("tenantId", "myTenantId");
123 JsonArray links = new JsonArray();
124 additionalData.add("links", links);
125 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
126 affectedVnfc.setId("vnfcId");
127 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
128 affectedStorages.add(new AffectedVirtualStorage());
129 affectedStorages.get(0).setId("sId");
130 affectedStorages.get(0).setResource(new ResourceHandle());
131 affectedStorages.get(0).getResource().setResourceId("storageProviderId");
132 affectedVnfc.setStorageResourceIds(new ArrayList<>());
133 affectedVnfc.getStorageResourceIds().add("sId");
135 Vserver existingVserver = new Vserver();
136 existingVserver.setVolumes(new ArrayList<>());
137 when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
138 when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
140 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
142 Vserver vserver = payload.getValue();
143 assertEquals("serverProviderId", vserver.getVserverId());
144 assertEquals("active", vserver.getProvStatus());
145 assertEquals("serverName", vserver.getVserverName());
146 assertEquals("unknown", vserver.getVserverSelflink());
147 assertEquals(1, vserver.getVolumes().size());
148 assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
152 * test update when links is not present on vServer
155 public void testUpdateWithNoLinks() throws Exception {
156 AffectedVnfc affectedVnfc = new AffectedVnfc();
157 affectedVnfc.setComputeResource(new ResourceHandle());
158 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
159 JsonObject additionalData = new JsonObject();
160 additionalData.addProperty("name", "serverName");
161 additionalData.addProperty("tenantId", "myTenantId");
162 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
163 affectedVnfc.setId("vnfcId");
164 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
165 affectedStorages.add(new AffectedVirtualStorage());
166 affectedStorages.get(0).setId("sId");
167 affectedStorages.get(0).setResource(new ResourceHandle());
168 affectedStorages.get(0).getResource().setResourceId("storageProviderId");
169 affectedVnfc.setStorageResourceIds(new ArrayList<>());
170 affectedVnfc.getStorageResourceIds().add("sId");
172 Vserver existingVserver = new Vserver();
173 existingVserver.setVolumes(new ArrayList<>());
174 when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
175 when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
177 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
179 Vserver vserver = payload.getValue();
180 assertEquals("serverProviderId", vserver.getVserverId());
181 assertEquals("active", vserver.getProvStatus());
182 assertEquals("serverName", vserver.getVserverName());
183 assertEquals("unknown", vserver.getVserverSelflink());
184 assertEquals(1, vserver.getVolumes().size());
185 assertEquals("storageProviderId", vserver.getVolumes().get(0).getVolumeId());
189 * test update when removing volumes
192 public void testUpdateWithRemovingVolumes() throws Exception {
193 AffectedVnfc affectedVnfc = new AffectedVnfc();
194 affectedVnfc.setComputeResource(new ResourceHandle());
195 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
196 JsonObject additionalData = new JsonObject();
197 additionalData.addProperty("name", "serverName");
198 additionalData.addProperty("tenantId", "myTenantId");
199 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
200 affectedVnfc.setId("vnfcId");
201 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
202 Vserver existingVserver = new Vserver();
203 existingVserver.setVolumes(new ArrayList<>());
204 when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
205 when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
207 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
209 Vserver vserver = payload.getValue();
210 assertEquals("serverProviderId", vserver.getVserverId());
211 assertEquals("active", vserver.getProvStatus());
212 assertEquals("serverName", vserver.getVserverName());
213 assertEquals("unknown", vserver.getVserverSelflink());
214 assertEquals(0, vserver.getVolumes().size());
221 public void testDelete() throws Exception {
222 AffectedVnfc affectedVnfc = new AffectedVnfc();
223 affectedVnfc.setComputeResource(new ResourceHandle());
224 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
225 JsonObject additionalData = new JsonObject();
226 additionalData.addProperty("name", "serverName");
227 additionalData.addProperty("tenantId", "myTenantId");
228 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
229 affectedVnfc.setId("vnfcId");
230 Vserver existingVserver = new Vserver();
231 existingVserver.setResourceVersion("v3");
232 existingVserver.setVserverId("serverProviderId");
233 when(cloudInfrastructureApi.getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", null, null, null, null, null, null, null, null, null)).thenReturn(buildObservable(existingVserver));
234 when(cloudInfrastructureApi.createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(eq("myCloudOwnerId"), eq("myRegionName"), eq("myTenantId"), eq("serverProviderId"), payload.capture())).thenReturn(null);
237 vserverManager.delete(VIM_ID, affectedVnfc);
239 verify(cloudInfrastructureApi).deleteCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver("myCloudOwnerId", "myRegionName", "myTenantId", "serverProviderId", "v3");
243 public void testLinks() {
244 Relationship relationship = VserverManager.linkTo(VIM_ID, "myTenantPrivderId", "serverProviderId");
245 List<Relationship> relationships = new ArrayList<>();
246 relationships.add(relationship);
247 assertRelation(relationships, "vserver",
248 buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(VIM_ID)),
249 buildRelationshipData("cloud-region.cloud-region-id", getRegionName(VIM_ID)),
250 buildRelationshipData("tenant.tenant-id", "myTenantPrivderId"),
251 buildRelationshipData("vserver.vserver-id", "serverProviderId"));
258 public void testInheritence() {
259 assertEquals(logger, vserverManager.getLogger());