bb5d1d3d12641e9ecb45c018ba752f6f7964f1ce
[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 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;
30
31 import java.util.ArrayList;
32 import java.util.List;
33 import java.util.NoSuchElementException;
34
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;
44
45 public class TestVserverManager extends TestBase {
46     private ObjectFactory OBJECT_FACTORY = new ObjectFactory();
47     private ArgumentCaptor<Vserver> payload = ArgumentCaptor.forClass(Vserver.class);
48
49     @Mock
50     private AAIRestApiProvider aaiRestApiProvider;
51     private VserverManager vserverManager;
52
53     @Before
54     public void init() {
55         vserverManager = new VserverManager(aaiRestApiProvider, cbamRestApiProvider, driverProperties);
56         setField(VserverManager.class, "logger", logger);
57     }
58
59     /**
60      * test update
61      */
62     @Test
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);
76
77         JsonObject link = new JsonObject();
78         link.addProperty("rel", "self");
79         link.addProperty("href", "url");
80         links.add(link);
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");
91
92         String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
93
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);
98         //when
99         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
100         //verify
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());
108     }
109
110     /**
111      * test missing links
112      */
113     @Test
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");
132
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);
136         //when
137         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
138         //verify
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());
146     }
147
148     /**
149      * test update when links is not present on vServer
150      */
151     @Test
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");
168
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);
172         //when
173         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
174         //verify
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());
182     }
183
184     /**
185      * test update when removing volumes
186      */
187     @Test
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);
201         //when
202         vserverManager.update(VIM_ID, VNF_ID, affectedVnfc, affectedStorages, true);
203         //verify
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());
210     }
211
212     /**
213      * test delete
214      */
215     @Test
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");
225         //when
226         vserverManager.delete(VIM_ID, affectedVnfc);
227         //verify
228         String url = "/cloud-regions/cloud-region/myCloudOwnerId/myRegionName/tenants/tenant/myTenantId/vservers/vserver/serverProviderId";
229         aaiRestApiProvider.delete(logger, CLOUD, url);
230     }
231
232     @Test
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"));
242     }
243
244     /**
245      * test inheritence
246      */
247     @Test
248     public void testInheritence() {
249         assertEquals(logger, vserverManager.getLogger());
250     }
251
252
253 }