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.Matchers.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;
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;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.mockito.InjectMocks;
46 import org.mockito.Mock;
47 import org.mockito.junit.MockitoJUnitRunner;
48 import org.onap.aai.domain.yang.NetworkPolicy;
49 import org.onap.aai.domain.yang.RouteTableReference;
50 import org.onap.aai.domain.yang.VpnBinding;
51 import org.onap.so.bpmn.common.InjectionHelper;
52 import org.onap.so.bpmn.common.data.TestDataSetup;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
56 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
57 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
58 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
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.AAIResourceUri;
65 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
66 import org.onap.so.client.aai.mapper.AAIObjectMapper;
67 import org.onap.so.db.catalog.beans.OrchestrationStatus;
69 @RunWith(MockitoJUnitRunner.Silent.class)
70 public class AAINetworkResourcesTest extends TestDataSetup{
72 private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/";
74 private L3Network network;
75 private Collection collection;
76 private InstanceGroup instanceGroup;
77 private ServiceInstance serviceInstance;
78 private CloudRegion cloudRegion;
79 private Subnet subnet;
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 doReturn(MOCK_aaiResourcesClient).when(MOCK_injectionHelper).getAaiClient();
115 public void updateNetworkTest() throws Exception {
117 network.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
119 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
120 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.L3Network.class));
122 aaiNetworkResources.updateNetwork(network);
124 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.L3Network.class));
125 assertEquals(OrchestrationStatus.ASSIGNED, network.getOrchestrationStatus());
129 public void createNetworkConnectToServiceInstanceTest() throws Exception {
131 network.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
133 doReturn(new org.onap.aai.domain.yang.L3Network()).when(MOCK_aaiObjectMapper).mapNetwork(network);
134 doReturn(MOCK_aaiResourcesClient).when(MOCK_aaiResourcesClient).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
135 doNothing().when(MOCK_aaiResourcesClient).connect(isA(AAIResourceUri.class), any(AAIResourceUri.class));
137 aaiNetworkResources.createNetworkConnectToServiceInstance(network, serviceInstance);
139 assertEquals(OrchestrationStatus.INVENTORIED, network.getOrchestrationStatus());
141 verify(MOCK_aaiResourcesClient, times(1)).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
142 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
146 public void deleteNetworkTest() throws Exception {
148 network.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
150 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
152 aaiNetworkResources.deleteNetwork(network);
154 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
158 public void getVpnBindingTest() throws Exception {
159 final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiVpnBinding.json")));
160 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
161 Optional<VpnBinding> oVpnBinding = Optional.empty();
162 AAIResourceUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.VPN_BINDING, "ModelInvariantUUID", "serviceModelVersionId");
164 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
165 oVpnBinding = aaiNetworkResources.getVpnBinding(aaiUri);
166 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
168 if (oVpnBinding.isPresent()) {
169 VpnBinding vpnBinding = oVpnBinding.get();
170 assertThat(aaiResultWrapper.asBean(VpnBinding.class).get(), sameBeanAs(vpnBinding));
175 public void getNetworkPolicyTest() throws Exception {
176 final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json")));
177 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
178 Optional<NetworkPolicy> oNetPolicy = Optional.empty();
179 AAIResourceUri netPolicyUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID", "serviceModelVersionId");
181 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
182 oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
183 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
185 if (oNetPolicy.isPresent()) {
186 NetworkPolicy networkPolicy = oNetPolicy.get();
187 assertThat(aaiResultWrapper.asBean(NetworkPolicy.class).get(), sameBeanAs(networkPolicy));
192 public void getRouteTableTest() throws Exception {
193 final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkTableRefs.json")));
194 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
195 Optional<RouteTableReference> oRtref = Optional.empty();
196 AAIResourceUri rTRefUri = AAIUriFactory.createResourceUri(AAIObjectType.ROUTE_TABLE_REFERENCE, "ModelInvariantUUID", "serviceModelVersionId");
198 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
199 oRtref = aaiNetworkResources.getRouteTable(rTRefUri);
200 verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
202 if (oRtref.isPresent()) {
203 RouteTableReference rTref = oRtref.get();
204 assertThat(aaiResultWrapper.asBean(RouteTableReference.class).get(), sameBeanAs(rTref));
209 public void queryNetworkByIdTest() throws Exception {
210 final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
211 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
212 L3Network network = new L3Network();
213 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
214 network.setNetworkName("Dev_Bindings_1802_020118");
215 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
217 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
218 Optional<org.onap.aai.domain.yang.L3Network> l3NetworkOpt = aaiNetworkResources.queryNetworkById(network);
219 org.onap.aai.domain.yang.L3Network l3Network = l3NetworkOpt.isPresent() ? l3NetworkOpt.get() : null;
221 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
222 assertNotNull(l3Network);
223 assertEquals("0384d743-f69b-4cc8-9aa8-c3ae66662c44", l3Network.getNetworkId());
224 assertEquals("Dev_Bindings_1802_020118", l3Network.getNetworkName());
228 public void queryNetworkWrapperByIdTest() throws Exception {
229 final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiQueryAAIResponse-Wrapper.json")));
230 AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
231 L3Network network = new L3Network();
232 network.setNetworkId("0384d743-f69b-4cc8-9aa8-c3ae66662c44");
233 network.setNetworkName("Dev_Bindings_1802_020118");
234 network.setOrchestrationStatus(OrchestrationStatus.CREATED);
236 doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
237 AAIResultWrapper result = aaiNetworkResources.queryNetworkWrapperById(network);
239 verify(MOCK_aaiResourcesClient, times(1)).get(isA(AAIResourceUri.class));
240 assertEquals(aaiResultWrapper.getJson(), result.getJson());
241 assertNotNull(result);
242 Optional<Relationships> resultNetworkRelationships = result.getRelationships();
243 assertTrue(resultNetworkRelationships.isPresent());
244 Optional<org.onap.aai.domain.yang.L3Network> aaiL3Network = result.asBean(org.onap.aai.domain.yang.L3Network.class);
245 assertEquals(network.getNetworkId(),aaiL3Network.get().getNetworkId());
246 assertEquals(network.getNetworkName(),aaiL3Network.get().getNetworkName());
252 public void createNetworkCollectionTest() throws Exception {
254 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.Collection.class));
255 doReturn(new org.onap.aai.domain.yang.Collection()).when(MOCK_aaiObjectMapper).mapCollection(collection);
256 collection.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
258 aaiNetworkResources.createNetworkCollection(collection);
259 assertEquals(OrchestrationStatus.INVENTORIED, collection.getOrchestrationStatus());
260 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.Collection.class));
264 public void createNetworkInstanceGroupTest() throws Exception {
265 doReturn(new org.onap.aai.domain.yang.InstanceGroup()).when(MOCK_aaiObjectMapper).mapInstanceGroup(instanceGroup);
266 doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.InstanceGroup.class));
267 aaiNetworkResources.createNetworkInstanceGroup(instanceGroup);
268 verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.InstanceGroup.class));
272 public void connectNetworkToNetworkCollectionInstanceGroupTest() throws Exception {
273 aaiNetworkResources.connectNetworkToNetworkCollectionInstanceGroup(network, instanceGroup);
274 verify(MOCK_aaiResourcesClient, times(1)).connect(eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())), eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
278 public void connectNetworkToNetworkCollectionServiceInstanceTest() throws Exception {
279 aaiNetworkResources.connectNetworkToNetworkCollectionServiceInstance(network, serviceInstance);
280 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
284 public void connectNetworkToCloudRegionTest() throws Exception {
285 aaiNetworkResources.connectNetworkToCloudRegion(network, cloudRegion);
286 verify(MOCK_aaiResourcesClient, times(1)).connect(eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION,
287 cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId())), eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
291 public void connectNetworkToTenantTest() throws Exception {
292 aaiNetworkResources.connectNetworkToTenant(network, cloudRegion);
293 verify(MOCK_aaiResourcesClient, times(1)).connect(eq(AAIUriFactory.createResourceUri(AAIObjectType.TENANT,
294 cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId(), cloudRegion.getTenantId())),
295 eq(AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId())));
299 public void connectNetworkCollectionInstanceGroupToNetworkCollectionTest() throws Exception {
300 aaiNetworkResources.connectNetworkCollectionInstanceGroupToNetworkCollection(instanceGroup, collection);
301 verify(MOCK_aaiResourcesClient, times(1)).connect(eq(AAIUriFactory.createResourceUri(AAIObjectType.COLLECTION, collection.getId())), eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())));
305 public void connectNetworkCollectionToServiceInstanceTest() throws Exception {
306 aaiNetworkResources.connectNetworkCollectionToServiceInstance(collection, serviceInstance);
307 verify(MOCK_aaiResourcesClient, times(1)).connect(any(AAIResourceUri.class), any(AAIResourceUri.class));
311 public void deleteCollectionTest() throws Exception {
312 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
313 aaiNetworkResources.deleteCollection(collection);
314 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
318 public void deleteInstanceGroupTest() throws Exception {
319 doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
320 aaiNetworkResources.deleteNetworkInstanceGroup(instanceGroup);
321 verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
325 public void updateSubnetTest() throws Exception {
327 doReturn(new org.onap.aai.domain.yang.Subnet()).when(MOCK_aaiObjectMapper).mapSubnet(subnet);
328 doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.Subnet.class));
330 aaiNetworkResources.updateSubnet(network, subnet);
332 verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.Subnet.class));
336 public void connectInstanceGroupToCloudRegionTest() throws Exception {
337 aaiNetworkResources.connectInstanceGroupToCloudRegion(instanceGroup, cloudRegion);
338 verify(MOCK_aaiResourcesClient, times(1)).connect(
339 eq(AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId())),
340 eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId())),
341 eq(AAIEdgeLabel.USES));