2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.client.orchestration;
23 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
24 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.mockito.ArgumentMatchers.any;
30 import static org.mockito.ArgumentMatchers.eq;
31 import static org.mockito.ArgumentMatchers.isA;
32 import static org.mockito.Mockito.doNothing;
33 import static org.mockito.Mockito.doReturn;
34 import static org.mockito.Mockito.times;
35 import static org.mockito.Mockito.verify;
36 import java.nio.file.Files;
37 import java.nio.file.Paths;
38 import java.util.ArrayList;
39 import java.util.List;
40 import java.util.Optional;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.junit.runner.RunWith;
44 import org.mockito.InjectMocks;
45 import org.mockito.Mock;
46 import org.mockito.junit.MockitoJUnitRunner;
47 import org.onap.aai.domain.yang.RouteTableReference;
48 import org.onap.aai.domain.yang.VpnBinding;
49 import org.onap.so.bpmn.common.InjectionHelper;
50 import org.onap.so.bpmn.common.data.TestDataSetup;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
52 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
56 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
57 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
58 import org.onap.so.client.aai.AAIObjectPlurals;
59 import org.onap.so.client.aai.AAIObjectType;
60 import org.onap.so.client.aai.AAIResourcesClient;
61 import org.onap.so.client.aai.entities.AAIEdgeLabel;
62 import org.onap.so.client.aai.entities.AAIResultWrapper;
63 import org.onap.so.client.aai.entities.Relationships;
64 import org.onap.so.client.aai.entities.uri.AAIPluralResourceUri;
65 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
66 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
67 import org.onap.so.client.aai.mapper.AAIObjectMapper;
68 import org.onap.so.db.catalog.beans.OrchestrationStatus;
70 @RunWith(MockitoJUnitRunner.Silent.class)
71 public class AAINetworkResourcesTest extends TestDataSetup {
73 private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/";
75 private L3Network network;
76 private Collection collection;
77 private InstanceGroup instanceGroup;
78 private ServiceInstance serviceInstance;
79 private CloudRegion cloudRegion;
80 private Subnet subnet;
81 private NetworkPolicy networkPolicy;
84 protected AAIResourcesClient MOCK_aaiResourcesClient;
87 protected AAIObjectMapper MOCK_aaiObjectMapper;
90 protected InjectionHelper MOCK_injectionHelper;
93 private AAINetworkResources aaiNetworkResources = new AAINetworkResources();
96 public void before() {
97 network = buildL3Network();
99 collection = buildCollection();
101 List<L3Network> l3NetworkList = new ArrayList<L3Network>();
102 l3NetworkList.add(network);
104 instanceGroup = buildInstanceGroup();
106 serviceInstance = buildServiceInstance();
108 cloudRegion = buildCloudRegion();
110 subnet = buildSubnet();
112 networkPolicy = buildNetworkPolicy();
114 doReturn(MOCK_aaiResourcesClient).when(MOCK_injectionHelper).getAaiClient();
119 public void updateNetworkTest() throws Exception {
121 network.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
123 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
124 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class),
125 isA(org.onap.aai.domain.yang.L3Network.class));
127 aaiNetworkResources.updateNetwork(network);
129 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),
130 isA(org.onap.aai.domain.yang.L3Network.class));
131 assertEquals(OrchestrationStatus.ASSIGNED, network.getOrchestrationStatus());
135 public void createNetworkConnectToServiceInstanceTest() throws Exception {
137 network.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
139 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
140 doReturn(MOCK_aaiResourcesClient).when(MOCK_aaiResourcesClient).createIfNotExists(any(AAIResourceUri.class),
141 any(Optional.class));
142 doNothing().when(MOCK_aaiResourcesClient).connect(isA(AAIResourceUri.class), any(AAIResourceUri.class));
144 aaiNetworkResources.createNetworkConnectToServiceInstance(network, serviceInstance);
146 assertEquals(OrchestrationStatus.INVENTORIED, network.getOrchestrationStatus());
148 verify(MOCK_aaiResourcesClient, times(1)).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
149 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
153 public void deleteNetworkTest() throws Exception {
155 network.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
157 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
159 aaiNetworkResources.deleteNetwork(network);
161 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
165 public void getVpnBindingTest() throws Exception {
166 final String content =
167 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiVpnBinding.json")));
168 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
169 Optional<VpnBinding> oVpnBinding = Optional.empty();
170 AAIResourceUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.VPN_BINDING, "ModelInvariantUUID");
172 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
173 oVpnBinding = aaiNetworkResources.getVpnBinding(aaiUri);
174 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
176 if (oVpnBinding.isPresent()) {
177 VpnBinding vpnBinding = oVpnBinding.get();
178 assertThat(aaiResultWrapper.asBean(VpnBinding.class).get(), sameBeanAs(vpnBinding));
183 public void getNetworkPolicyTest() throws Exception {
184 final String content =
185 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json")));
186 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
187 Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = Optional.empty();
188 AAIResourceUri netPolicyUri =
189 AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID");
191 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
192 oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
193 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
194 if (oNetPolicy.isPresent()) {
195 org.onap.aai.domain.yang.NetworkPolicy networkPolicy = oNetPolicy.get();
196 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicy.class).get(),
197 sameBeanAs(networkPolicy));
202 public void getNetworkPoliciesTest() throws Exception {
203 final String content =
204 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicies.json")));
205 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
206 Optional<org.onap.aai.domain.yang.NetworkPolicies> oNetPolicies = Optional.empty();
207 AAIPluralResourceUri netPoliciesUri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY);
209 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIPluralResourceUri.class));
210 oNetPolicies = aaiNetworkResources.getNetworkPolicies(netPoliciesUri);
211 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIPluralResourceUri.class));
212 if (oNetPolicies.isPresent()) {
213 org.onap.aai.domain.yang.NetworkPolicies networkPolicies = oNetPolicies.get();
214 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicies.class).get(),
215 sameBeanAs(networkPolicies));
220 public void getRouteTableTest() throws Exception {
221 final String content =
222 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkTableRefs.json")));
223 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
224 Optional<RouteTableReference> oRtref = Optional.empty();
225 AAIResourceUri rTRefUri =
226 AAIUriFactory.createResourceUri(AAIObjectType.ROUTE_TABLE_REFERENCE, "ModelInvariantUUID");
228 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
229 oRtref = aaiNetworkResources.getRouteTable(rTRefUri);
230 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
232 if (oRtref.isPresent()) {
233 RouteTableReference rTref = oRtref.get();
234 assertThat(aaiResultWrapper.asBean(RouteTableReference.class).get(), sameBeanAs(rTref));
239 public void queryNetworkByIdTest() throws Exception {
240 final String content =
241 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
242 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
243 L3Network network = new L3Network();
244 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
245 network.setNetworkName("Dev_Bindings_1802_020118");
246 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
248 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
249 Optional<org.onap.aai.domain.yang.L3Network> l3NetworkOpt = aaiNetworkResources.queryNetworkById(network);
250 org.onap.aai.domain.yang.L3Network l3Network = l3NetworkOpt.isPresent() ? l3NetworkOpt.get() : null;
252 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
253 assertNotNull(l3Network);
254 assertEquals("0384d743-f69b-4cc8-9aa8-c3ae66662c44", l3Network.getNetworkId());
255 assertEquals("Dev_Bindings_1802_020118", l3Network.getNetworkName());
259 public void queryNetworkWrapperByIdTest() throws Exception {
260 final String content =
261 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
262 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
263 L3Network network = new L3Network();
264 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
265 network.setNetworkName("Dev_Bindings_1802_020118");
266 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
268 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
269 AAIResultWrapper result = aaiNetworkResources.queryNetworkWrapperById(network);
271 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
272 assertEquals(aaiResultWrapper.getJson(), result.getJson());
273 assertNotNull(result);
274 Optional<Relationships> resultNetworkRelationships = result.getRelationships();
275 assertTrue(resultNetworkRelationships.isPresent());
276 Optional<org.onap.aai.domain.yang.L3Network> aaiL3Network =
277 result.asBean(org.onap.aai.domain.yang.L3Network.class);
278 assertEquals(network.getNetworkId(), aaiL3Network.get().getNetworkId());
279 assertEquals(network.getNetworkName(), aaiL3Network.get().getNetworkName());
285 public void createNetworkCollectionTest() throws Exception {
287 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
288 isA(org.onap.aai.domain.yang.Collection.class));
289 doReturn(new org.onap.aai.domain.yang.Collection()).when(MOCK_aaiObjectMapper).mapCollection(collection);
290 collection.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
292 aaiNetworkResources.createNetworkCollection(collection);
293 assertEquals(OrchestrationStatus.INVENTORIED, collection.getOrchestrationStatus());
294 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
295 isA(org.onap.aai.domain.yang.Collection.class));
299 public void createNetworkInstanceGroupTest() throws Exception {
300 doReturn(new org.onap.aai.domain.yang.InstanceGroup()).when(MOCK_aaiObjectMapper)
301 .mapInstanceGroup(instanceGroup);
302 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
303 isA(org.onap.aai.domain.yang.InstanceGroup.class));
304 aaiNetworkResources.createNetworkInstanceGroup(instanceGroup);
305 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
306 isA(org.onap.aai.domain.yang.InstanceGroup.class));
310 public void connectNetworkToNetworkCollectionInstanceGroupTest() throws Exception {
311 aaiNetworkResources.connectNetworkToNetworkCollectionInstanceGroup(network, instanceGroup);
312 verify(MOCK_aaiResourcesClient, times(1)).connect(
313 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
314 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
318 public void connectNetworkToNetworkCollectionServiceInstanceTest() throws Exception {
319 aaiNetworkResources.connectNetworkToNetworkCollectionServiceInstance(network, serviceInstance);
320 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class),
321 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
325 public void connectNetworkToCloudRegionTest() throws Exception {
326 aaiNetworkResources.connectNetworkToCloudRegion(network, cloudRegion);
327 verify(MOCK_aaiResourcesClient, times(1)).connect(
328 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())),
329 eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
330 cloudRegion.getLcpCloudRegionId())));
334 public void connectNetworkToTenantTest() throws Exception {
335 aaiNetworkResources.connectNetworkToTenant(network, cloudRegion);
336 verify(MOCK_aaiResourcesClient, times(1)).connect(
337 eq(AAIUriFactory.createResourceUri(AAIObjectType.TENANT, cloudRegion.getCloudOwner(),
338 cloudRegion.getLcpCloudRegionId(), cloudRegion.getTenantId())),
339 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
343 public void connectNetworkCollectionInstanceGroupToNetworkCollectionTest() throws Exception {
344 aaiNetworkResources.connectNetworkCollectionInstanceGroupToNetworkCollection(instanceGroup, collection);
345 verify(MOCK_aaiResourcesClient, times(1)).connect(
346 eq(AAIUriFactory.createResourceUri(AAIObjectType.COLLECTION, collection.getId())),
347 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())));
351 public void connectNetworkCollectionToServiceInstanceTest() throws Exception {
352 aaiNetworkResources.connectNetworkCollectionToServiceInstance(collection, serviceInstance);
353 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
357 public void deleteCollectionTest() throws Exception {
358 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
359 aaiNetworkResources.deleteCollection(collection);
360 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
364 public void deleteInstanceGroupTest() throws Exception {
365 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
366 aaiNetworkResources.deleteNetworkInstanceGroup(instanceGroup);
367 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
371 public void updateSubnetTest() throws Exception {
373 doReturn(new org.onap.aai.domain.yang.Subnet()).when(MOCK_aaiObjectMapper).mapSubnet(subnet);
374 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class),
375 isA(org.onap.aai.domain.yang.Subnet.class));
377 aaiNetworkResources.updateSubnet(network, subnet);
379 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),
380 isA(org.onap.aai.domain.yang.Subnet.class));
384 public void connectInstanceGroupToCloudRegionTest() throws Exception {
385 aaiNetworkResources.connectInstanceGroupToCloudRegion(instanceGroup, cloudRegion);
386 verify(MOCK_aaiResourcesClient, times(1)).connect(
387 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
388 eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
389 cloudRegion.getLcpCloudRegionId())),
390 eq(AAIEdgeLabel.USES));
394 public void getSubnetTest() throws Exception {
395 final String content =
396 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiSubnetsMapped_to_aai.json")));
397 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
398 Optional<org.onap.aai.domain.yang.Subnet> oSubnet = Optional.empty();
399 AAIResourceUri subnetUri =
400 AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, "ModelInvariantUUID", "serviceModelVersionId");
402 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
403 oSubnet = aaiNetworkResources.getSubnet(subnetUri);
404 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
406 if (oSubnet.isPresent()) {
407 org.onap.aai.domain.yang.Subnet subnet = oSubnet.get();
408 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.Subnet.class).get(), sameBeanAs(subnet));
413 public void createNetworkPolicyTest() throws Exception {
414 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
415 isA(org.onap.aai.domain.yang.NetworkPolicy.class));
416 doReturn(new org.onap.aai.domain.yang.NetworkPolicy()).when(MOCK_aaiObjectMapper)
417 .mapNetworkPolicy(networkPolicy);
418 aaiNetworkResources.createNetworkPolicy(networkPolicy);
419 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
420 isA(org.onap.aai.domain.yang.NetworkPolicy.class));
424 public void deleteNetworkPolicyTest() throws Exception {
425 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
426 aaiNetworkResources.deleteNetworkPolicy(networkPolicy.getNetworkPolicyId());
427 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
431 public void checkInstanceGroupNameInUseTrueTest() throws Exception {
432 AAIPluralResourceUri uri =
433 AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", "networkName");
434 doReturn(true).when(MOCK_aaiResourcesClient).exists(eq(uri));
435 boolean nameInUse = aaiNetworkResources.checkNetworkNameInUse("networkName");
436 assertTrue(nameInUse);
440 public void checkInstanceGroupNameInUseFalseTest() throws Exception {
441 AAIPluralResourceUri uri =
442 AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", "networkName");
443 doReturn(false).when(MOCK_aaiResourcesClient).exists(eq(uri));
444 boolean nameInUse = aaiNetworkResources.checkNetworkNameInUse("networkName");
445 assertFalse(nameInUse);