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.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.ArgumentMatchers.any;
29 import static org.mockito.ArgumentMatchers.eq;
30 import static org.mockito.ArgumentMatchers.isA;
31 import static org.mockito.Mockito.doNothing;
32 import static org.mockito.Mockito.doReturn;
33 import static org.mockito.Mockito.times;
34 import static org.mockito.Mockito.verify;
35 import java.nio.file.Files;
36 import java.nio.file.Paths;
37 import java.util.ArrayList;
38 import java.util.List;
39 import java.util.Optional;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.mockito.InjectMocks;
44 import org.mockito.Mock;
45 import org.mockito.junit.MockitoJUnitRunner;
46 import org.onap.aai.domain.yang.RouteTableReference;
47 import org.onap.aai.domain.yang.VpnBinding;
48 import org.onap.so.bpmn.common.InjectionHelper;
49 import org.onap.so.bpmn.common.data.TestDataSetup;
50 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
52 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
56 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
57 import org.onap.so.client.aai.AAIObjectPlurals;
58 import org.onap.so.client.aai.AAIObjectType;
59 import org.onap.so.client.aai.AAIResourcesClient;
60 import org.onap.so.client.aai.entities.AAIEdgeLabel;
61 import org.onap.so.client.aai.entities.AAIResultWrapper;
62 import org.onap.so.client.aai.entities.Relationships;
63 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
64 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
65 import org.onap.so.client.aai.mapper.AAIObjectMapper;
66 import org.onap.so.db.catalog.beans.OrchestrationStatus;
68 @RunWith(MockitoJUnitRunner.Silent.class)
69 public class AAINetworkResourcesTest extends TestDataSetup {
71 private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/";
73 private L3Network network;
74 private Collection collection;
75 private InstanceGroup instanceGroup;
76 private ServiceInstance serviceInstance;
77 private CloudRegion cloudRegion;
78 private Subnet subnet;
79 private NetworkPolicy networkPolicy;
82 protected AAIResourcesClient MOCK_aaiResourcesClient;
85 protected AAIObjectMapper MOCK_aaiObjectMapper;
88 protected InjectionHelper MOCK_injectionHelper;
91 private AAINetworkResources aaiNetworkResources = new AAINetworkResources();
94 public void before() {
95 network = buildL3Network();
97 collection = buildCollection();
99 List<L3Network> l3NetworkList = new ArrayList<L3Network>();
100 l3NetworkList.add(network);
102 instanceGroup = buildInstanceGroup();
104 serviceInstance = buildServiceInstance();
106 cloudRegion = buildCloudRegion();
108 subnet = buildSubnet();
110 networkPolicy = buildNetworkPolicy();
112 doReturn(MOCK_aaiResourcesClient).when(MOCK_injectionHelper).getAaiClient();
117 public void updateNetworkTest() throws Exception {
119 network.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
121 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
122 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class),
123 isA(org.onap.aai.domain.yang.L3Network.class));
125 aaiNetworkResources.updateNetwork(network);
127 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),
128 isA(org.onap.aai.domain.yang.L3Network.class));
129 assertEquals(OrchestrationStatus.ASSIGNED, network.getOrchestrationStatus());
133 public void createNetworkConnectToServiceInstanceTest() throws Exception {
135 network.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
137 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
138 doReturn(MOCK_aaiResourcesClient).when(MOCK_aaiResourcesClient).createIfNotExists(any(AAIResourceUri.class),
139 any(Optional.class));
140 doNothing().when(MOCK_aaiResourcesClient).connect(isA(AAIResourceUri.class), any(AAIResourceUri.class));
142 aaiNetworkResources.createNetworkConnectToServiceInstance(network, serviceInstance);
144 assertEquals(OrchestrationStatus.INVENTORIED, network.getOrchestrationStatus());
146 verify(MOCK_aaiResourcesClient, times(1)).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
147 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
151 public void deleteNetworkTest() throws Exception {
153 network.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
155 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
157 aaiNetworkResources.deleteNetwork(network);
159 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
163 public void getVpnBindingTest() throws Exception {
164 final String content =
165 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiVpnBinding.json")));
166 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
167 Optional<VpnBinding> oVpnBinding = Optional.empty();
168 AAIResourceUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.VPN_BINDING, "ModelInvariantUUID");
170 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
171 oVpnBinding = aaiNetworkResources.getVpnBinding(aaiUri);
172 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
174 if (oVpnBinding.isPresent()) {
175 VpnBinding vpnBinding = oVpnBinding.get();
176 assertThat(aaiResultWrapper.asBean(VpnBinding.class).get(), sameBeanAs(vpnBinding));
181 public void getNetworkPolicyTest() throws Exception {
182 final String content =
183 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json")));
184 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
185 Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = Optional.empty();
186 AAIResourceUri netPolicyUri =
187 AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID");
189 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
190 oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
191 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
192 if (oNetPolicy.isPresent()) {
193 org.onap.aai.domain.yang.NetworkPolicy networkPolicy = oNetPolicy.get();
194 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicy.class).get(),
195 sameBeanAs(networkPolicy));
200 public void getNetworkPoliciesTest() throws Exception {
201 final String content =
202 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicies.json")));
203 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
204 Optional<org.onap.aai.domain.yang.NetworkPolicies> oNetPolicies = Optional.empty();
205 AAIResourceUri netPoliciesUri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY);
207 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
208 oNetPolicies = aaiNetworkResources.getNetworkPolicies(netPoliciesUri);
209 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
210 if (oNetPolicies.isPresent()) {
211 org.onap.aai.domain.yang.NetworkPolicies networkPolicies = oNetPolicies.get();
212 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicies.class).get(),
213 sameBeanAs(networkPolicies));
218 public void getRouteTableTest() throws Exception {
219 final String content =
220 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkTableRefs.json")));
221 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
222 Optional<RouteTableReference> oRtref = Optional.empty();
223 AAIResourceUri rTRefUri =
224 AAIUriFactory.createResourceUri(AAIObjectType.ROUTE_TABLE_REFERENCE, "ModelInvariantUUID");
226 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
227 oRtref = aaiNetworkResources.getRouteTable(rTRefUri);
228 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
230 if (oRtref.isPresent()) {
231 RouteTableReference rTref = oRtref.get();
232 assertThat(aaiResultWrapper.asBean(RouteTableReference.class).get(), sameBeanAs(rTref));
237 public void queryNetworkByIdTest() throws Exception {
238 final String content =
239 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
240 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
241 L3Network network = new L3Network();
242 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
243 network.setNetworkName("Dev_Bindings_1802_020118");
244 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
246 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
247 Optional<org.onap.aai.domain.yang.L3Network> l3NetworkOpt = aaiNetworkResources.queryNetworkById(network);
248 org.onap.aai.domain.yang.L3Network l3Network = l3NetworkOpt.isPresent() ? l3NetworkOpt.get() : null;
250 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
251 assertNotNull(l3Network);
252 assertEquals("0384d743-f69b-4cc8-9aa8-c3ae66662c44", l3Network.getNetworkId());
253 assertEquals("Dev_Bindings_1802_020118", l3Network.getNetworkName());
257 public void queryNetworkWrapperByIdTest() throws Exception {
258 final String content =
259 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
260 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
261 L3Network network = new L3Network();
262 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
263 network.setNetworkName("Dev_Bindings_1802_020118");
264 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
266 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
267 AAIResultWrapper result = aaiNetworkResources.queryNetworkWrapperById(network);
269 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
270 assertEquals(aaiResultWrapper.getJson(), result.getJson());
271 assertNotNull(result);
272 Optional<Relationships> resultNetworkRelationships = result.getRelationships();
273 assertTrue(resultNetworkRelationships.isPresent());
274 Optional<org.onap.aai.domain.yang.L3Network> aaiL3Network =
275 result.asBean(org.onap.aai.domain.yang.L3Network.class);
276 assertEquals(network.getNetworkId(), aaiL3Network.get().getNetworkId());
277 assertEquals(network.getNetworkName(), aaiL3Network.get().getNetworkName());
283 public void createNetworkCollectionTest() throws Exception {
285 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
286 isA(org.onap.aai.domain.yang.Collection.class));
287 doReturn(new org.onap.aai.domain.yang.Collection()).when(MOCK_aaiObjectMapper).mapCollection(collection);
288 collection.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
290 aaiNetworkResources.createNetworkCollection(collection);
291 assertEquals(OrchestrationStatus.INVENTORIED, collection.getOrchestrationStatus());
292 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
293 isA(org.onap.aai.domain.yang.Collection.class));
297 public void createNetworkInstanceGroupTest() throws Exception {
298 doReturn(new org.onap.aai.domain.yang.InstanceGroup()).when(MOCK_aaiObjectMapper)
299 .mapInstanceGroup(instanceGroup);
300 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
301 isA(org.onap.aai.domain.yang.InstanceGroup.class));
302 aaiNetworkResources.createNetworkInstanceGroup(instanceGroup);
303 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
304 isA(org.onap.aai.domain.yang.InstanceGroup.class));
308 public void connectNetworkToNetworkCollectionInstanceGroupTest() throws Exception {
309 aaiNetworkResources.connectNetworkToNetworkCollectionInstanceGroup(network, instanceGroup);
310 verify(MOCK_aaiResourcesClient, times(1)).connect(
311 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
312 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
316 public void connectNetworkToNetworkCollectionServiceInstanceTest() throws Exception {
317 aaiNetworkResources.connectNetworkToNetworkCollectionServiceInstance(network, serviceInstance);
318 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class),
319 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
323 public void connectNetworkToCloudRegionTest() throws Exception {
324 aaiNetworkResources.connectNetworkToCloudRegion(network, cloudRegion);
325 verify(MOCK_aaiResourcesClient, times(1)).connect(
326 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())),
327 eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
328 cloudRegion.getLcpCloudRegionId())));
332 public void connectNetworkToTenantTest() throws Exception {
333 aaiNetworkResources.connectNetworkToTenant(network, cloudRegion);
334 verify(MOCK_aaiResourcesClient, times(1)).connect(
335 eq(AAIUriFactory.createResourceUri(AAIObjectType.TENANT, cloudRegion.getCloudOwner(),
336 cloudRegion.getLcpCloudRegionId(), cloudRegion.getTenantId())),
337 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
341 public void connectNetworkCollectionInstanceGroupToNetworkCollectionTest() throws Exception {
342 aaiNetworkResources.connectNetworkCollectionInstanceGroupToNetworkCollection(instanceGroup, collection);
343 verify(MOCK_aaiResourcesClient, times(1)).connect(
344 eq(AAIUriFactory.createResourceUri(AAIObjectType.COLLECTION, collection.getId())),
345 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())));
349 public void connectNetworkCollectionToServiceInstanceTest() throws Exception {
350 aaiNetworkResources.connectNetworkCollectionToServiceInstance(collection, serviceInstance);
351 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
355 public void deleteCollectionTest() throws Exception {
356 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
357 aaiNetworkResources.deleteCollection(collection);
358 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
362 public void deleteInstanceGroupTest() throws Exception {
363 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
364 aaiNetworkResources.deleteNetworkInstanceGroup(instanceGroup);
365 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
369 public void updateSubnetTest() throws Exception {
371 doReturn(new org.onap.aai.domain.yang.Subnet()).when(MOCK_aaiObjectMapper).mapSubnet(subnet);
372 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class),
373 isA(org.onap.aai.domain.yang.Subnet.class));
375 aaiNetworkResources.updateSubnet(network, subnet);
377 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),
378 isA(org.onap.aai.domain.yang.Subnet.class));
382 public void connectInstanceGroupToCloudRegionTest() throws Exception {
383 aaiNetworkResources.connectInstanceGroupToCloudRegion(instanceGroup, cloudRegion);
384 verify(MOCK_aaiResourcesClient, times(1)).connect(
385 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
386 eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
387 cloudRegion.getLcpCloudRegionId())),
388 eq(AAIEdgeLabel.USES));
392 public void getSubnetTest() throws Exception {
393 final String content =
394 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiSubnetsMapped_to_aai.json")));
395 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
396 Optional<org.onap.aai.domain.yang.Subnet> oSubnet = Optional.empty();
397 AAIResourceUri subnetUri =
398 AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, "ModelInvariantUUID", "serviceModelVersionId");
400 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
401 oSubnet = aaiNetworkResources.getSubnet(subnetUri);
402 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
404 if (oSubnet.isPresent()) {
405 org.onap.aai.domain.yang.Subnet subnet = oSubnet.get();
406 assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.Subnet.class).get(), sameBeanAs(subnet));
411 public void createNetworkPolicyTest() throws Exception {
412 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class),
413 isA(org.onap.aai.domain.yang.NetworkPolicy.class));
414 doReturn(new org.onap.aai.domain.yang.NetworkPolicy()).when(MOCK_aaiObjectMapper)
415 .mapNetworkPolicy(networkPolicy);
416 aaiNetworkResources.createNetworkPolicy(networkPolicy);
417 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
418 isA(org.onap.aai.domain.yang.NetworkPolicy.class));
422 public void deleteNetworkPolicyTest() throws Exception {
423 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
424 aaiNetworkResources.deleteNetworkPolicy(networkPolicy.getNetworkPolicyId());
425 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));