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());