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 org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.ArgumentCaptor;
26 import org.mockito.Mock;
27 import org.onap.aai.domain.yang.v11.*;
28 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.TestBase;
31 import java.util.ArrayList;
32 import java.util.List;
33 import java.util.NoSuchElementException;
35 import static junit.framework.TestCase.assertEquals;
36 import static org.mockito.Matchers.eq;
37 import static org.mockito.Mockito.when;
38 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.CLOUD;
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 ObjectFactory OBJECT_FACTORY = new ObjectFactory();
47 private ArgumentCaptor<Vserver> payload = ArgumentCaptor.forClass(Vserver.class);
50 private AAIRestApiProvider aaiRestApiProvider;
51 private VserverManager vserverManager;
55 vserverManager = new VserverManager(aaiRestApiProvider, cbamRestApiProvider, driverProperties);
56 setField(VserverManager.class, "logger", logger);
63 public void testUpdate() throws Exception {
64 AffectedVnfc affectedVnfc = new AffectedVnfc();
65 affectedVnfc.setComputeResource(new ResourceHandle());
66 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
67 JsonObject additionalData = new JsonObject();
68 additionalData.addProperty("name", "serverName");
69 additionalData.addProperty("tenantId", "myTenantId");
70 JsonArray links = new JsonArray();
71 links.add(new JsonObject());
72 JsonObject nonRelSelfink = new JsonObject();
73 nonRelSelfink.addProperty("rel", "self2");
74 nonRelSelfink.addProperty("href", "url");
75 links.add(nonRelSelfink);
77 JsonObject link = new JsonObject();
78 link.addProperty("rel", "self");
79 link.addProperty("href", "url");
81 additionalData.add("links", links);
82 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
83 affectedVnfc.setId("vnfcId");
84 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
85 affectedStorages.add(new AffectedVirtualStorage());
86 affectedStorages.get(0).setId("sId");
87 affectedStorages.get(0).setResource(new ResourceHandle());
88 affectedStorages.get(0).getResource().setResourceId("storageProviderId");
89 affectedVnfc.setStorageResourceIds(new ArrayList<>());
90 affectedVnfc.getStorageResourceIds().add("sId");
92 String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
94 Vserver existingVserver = OBJECT_FACTORY.createVserver();
95 existingVserver.setVolumes(new Volumes());
96 when(aaiRestApiProvider.get(eq(logger), eq(CLOUD), eq(url), eq(Vserver.class))).thenReturn(existingVserver);
97 when(aaiRestApiProvider.put(eq(logger), eq(CLOUD), eq(url), payload.capture(), eq(Void.class))).thenReturn(null);
99 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
101 Vserver vserver = payload.getValue();
102 assertEquals("serverProviderId", vserver.getVserverId());
103 assertEquals("active", vserver.getProvStatus());
104 assertEquals("serverName", vserver.getVserverName());
105 assertEquals("url", vserver.getVserverSelflink());
106 assertEquals(1, vserver.getVolumes().getVolume().size());
107 assertEquals("storageProviderId", vserver.getVolumes().getVolume().get(0).getVolumeId());
114 public void testUpdateEmptyLinks() throws Exception {
115 AffectedVnfc affectedVnfc = new AffectedVnfc();
116 affectedVnfc.setComputeResource(new ResourceHandle());
117 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
118 JsonObject additionalData = new JsonObject();
119 additionalData.addProperty("name", "serverName");
120 additionalData.addProperty("tenantId", "myTenantId");
121 JsonArray links = new JsonArray();
122 additionalData.add("links", links);
123 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
124 affectedVnfc.setId("vnfcId");
125 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
126 affectedStorages.add(new AffectedVirtualStorage());
127 affectedStorages.get(0).setId("sId");
128 affectedStorages.get(0).setResource(new ResourceHandle());
129 affectedStorages.get(0).getResource().setResourceId("storageProviderId");
130 affectedVnfc.setStorageResourceIds(new ArrayList<>());
131 affectedVnfc.getStorageResourceIds().add("sId");
133 String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
134 when(aaiRestApiProvider.get(eq(logger), eq(CLOUD), eq(url), eq(Vserver.class))).thenThrow(new NoSuchElementException());
135 when(aaiRestApiProvider.put(eq(logger), eq(CLOUD), eq(url), payload.capture(), eq(Void.class))).thenReturn(null);
137 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
139 Vserver vserver = payload.getValue();
140 assertEquals("serverProviderId", vserver.getVserverId());
141 assertEquals("active", vserver.getProvStatus());
142 assertEquals("serverName", vserver.getVserverName());
143 assertEquals("unknown", vserver.getVserverSelflink());
144 assertEquals(1, vserver.getVolumes().getVolume().size());
145 assertEquals("storageProviderId", vserver.getVolumes().getVolume().get(0).getVolumeId());
149 * test update when links is not present on vServer
152 public void testUpdateWithNoLinks() throws Exception {
153 AffectedVnfc affectedVnfc = new AffectedVnfc();
154 affectedVnfc.setComputeResource(new ResourceHandle());
155 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
156 JsonObject additionalData = new JsonObject();
157 additionalData.addProperty("name", "serverName");
158 additionalData.addProperty("tenantId", "myTenantId");
159 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
160 affectedVnfc.setId("vnfcId");
161 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
162 affectedStorages.add(new AffectedVirtualStorage());
163 affectedStorages.get(0).setId("sId");
164 affectedStorages.get(0).setResource(new ResourceHandle());
165 affectedStorages.get(0).getResource().setResourceId("storageProviderId");
166 affectedVnfc.setStorageResourceIds(new ArrayList<>());
167 affectedVnfc.getStorageResourceIds().add("sId");
169 String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
170 when(aaiRestApiProvider.get(eq(logger), eq(CLOUD), eq(url), eq(Vserver.class))).thenThrow(new NoSuchElementException());
171 when(aaiRestApiProvider.put(eq(logger), eq(CLOUD), eq(url), payload.capture(), eq(Void.class))).thenReturn(null);
173 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
175 Vserver vserver = payload.getValue();
176 assertEquals("serverProviderId", vserver.getVserverId());
177 assertEquals("active", vserver.getProvStatus());
178 assertEquals("serverName", vserver.getVserverName());
179 assertEquals("unknown", vserver.getVserverSelflink());
180 assertEquals(1, vserver.getVolumes().getVolume().size());
181 assertEquals("storageProviderId", vserver.getVolumes().getVolume().get(0).getVolumeId());
185 * test update when removing volumes
188 public void testUpdateWithRemovingVolumes() throws Exception {
189 AffectedVnfc affectedVnfc = new AffectedVnfc();
190 affectedVnfc.setComputeResource(new ResourceHandle());
191 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
192 JsonObject additionalData = new JsonObject();
193 additionalData.addProperty("name", "serverName");
194 additionalData.addProperty("tenantId", "myTenantId");
195 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
196 affectedVnfc.setId("vnfcId");
197 List<AffectedVirtualStorage> affectedStorages = new ArrayList<>();
198 String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
199 when(aaiRestApiProvider.get(eq(logger), eq(CLOUD), eq(url), eq(Vserver.class))).thenThrow(new NoSuchElementException());
200 when(aaiRestApiProvider.put(eq(logger), eq(CLOUD), eq(url), payload.capture(), eq(Void.class))).thenReturn(null);
202 vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
204 Vserver vserver = payload.getValue();
205 assertEquals("serverProviderId", vserver.getVserverId());
206 assertEquals("active", vserver.getProvStatus());
207 assertEquals("serverName", vserver.getVserverName());
208 assertEquals("unknown", vserver.getVserverSelflink());
209 assertEquals(0, vserver.getVolumes().getVolume().size());
216 public void testDelete() throws Exception {
217 AffectedVnfc affectedVnfc = new AffectedVnfc();
218 affectedVnfc.setComputeResource(new ResourceHandle());
219 affectedVnfc.getComputeResource().setResourceId("serverProviderId");
220 JsonObject additionalData = new JsonObject();
221 additionalData.addProperty("name", "serverName");
222 additionalData.addProperty("tenantId", "myTenantId");
223 affectedVnfc.getComputeResource().setAdditionalData(additionalData);
224 affectedVnfc.setId("vnfcId");
226 vserverManager.delete(VIM_ID, affectedVnfc);
228 String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
229 aaiRestApiProvider.delete(logger, CLOUD, url);
233 public void testLinks() {
234 Relationship relationship = VserverManager.linkTo(VIM_ID, "myTenantPrivderId", "serverProviderId");
235 RelationshipList relationships = new RelationshipList();
236 relationships.getRelationship().add(relationship);
237 assertRelation(relationships, "vserver",
238 buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(VIM_ID)),
239 buildRelationshipData("cloud-region.cloud-region-id", getRegionName(VIM_ID)),
240 buildRelationshipData("tenant.tenant-id", "myTenantPrivderId"),
241 buildRelationshipData("vserver.vserver-id", "serverProviderId"));
248 public void testInheritence() {
249 assertEquals(logger, vserverManager.getLogger());