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=========================================================
20 package org.onap.so.client.adapter.network.mapper;
22 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
23 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
24 import static org.junit.Assert.assertEquals;
25 import static org.mockito.Mockito.doReturn;
26 import java.io.UnsupportedEncodingException;
27 import java.nio.file.Files;
28 import java.nio.file.Paths;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.HashMap;
32 import java.util.List;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.mockito.Mockito;
37 import org.onap.so.adapters.nwrest.ContrailNetwork;
38 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
39 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
40 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
41 import org.onap.so.adapters.nwrest.ProviderVlanNetwork;
42 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
43 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
44 import org.onap.so.bpmn.common.data.TestDataSetup;
45 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
46 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
47 import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute;
48 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
49 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
50 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget;
52 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
56 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
57 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
58 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
59 import org.onap.so.entity.MsoRequest;
60 import org.onap.so.openstack.beans.NetworkRollback;
61 import com.fasterxml.jackson.databind.ObjectMapper;
63 public class NetworkAdapterObjectMapperTest extends TestDataSetup {
65 private NetworkAdapterObjectMapper SPY_networkAdapterObjectMapper = Mockito.spy(NetworkAdapterObjectMapper.class);
67 private L3Network l3Network;
68 private RequestContext requestContext;
69 private ServiceInstance serviceInstance;
70 private CloudRegion cloudRegion;
71 private OrchestrationContext orchestrationContext;
72 private Customer customer;
73 Map<String, String> userInput;
75 private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/NetworkMapper/";
78 public void before() {
79 requestContext = setRequestContext();
81 customer = buildCustomer();
83 serviceInstance = setServiceInstance();
85 cloudRegion = setCloudRegion();
87 orchestrationContext = setOrchestrationContext();
88 orchestrationContext.setIsRollbackEnabled(false);
90 userInput = setUserInput();
92 l3Network = setL3Network();
94 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
98 public void buildCreateNetworkRequestFromBbobjectTest() throws Exception {
100 String cloudRegionPo = "cloudRegionPo";
101 CreateNetworkRequest expectedCreateNetworkRequest = new CreateNetworkRequest();
103 expectedCreateNetworkRequest.setCloudSiteId(cloudRegionPo);
104 expectedCreateNetworkRequest.setTenantId(cloudRegion.getTenantId());
105 expectedCreateNetworkRequest.setNetworkId(l3Network.getNetworkId());
106 expectedCreateNetworkRequest.setNetworkName(l3Network.getNetworkName());
107 expectedCreateNetworkRequest.setNetworkType(l3Network.getNetworkType());
108 expectedCreateNetworkRequest.setBackout(false);
109 expectedCreateNetworkRequest.setFailIfExists(false);
110 expectedCreateNetworkRequest.setNetworkTechnology("CONTRAIL");
111 MsoRequest msoRequest = new MsoRequest();
112 msoRequest.setRequestId(requestContext.getMsoRequestId());
113 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
114 expectedCreateNetworkRequest.setMsoRequest(msoRequest);
115 expectedCreateNetworkRequest.setSkipAAI(true);
116 HashMap<String, String> networkParams = new HashMap<String, String>();
117 networkParams.put("shared", "true");
118 networkParams.put("external", "false");
119 networkParams.put("testUserInputKey", "testUserInputValue");
120 expectedCreateNetworkRequest.setNetworkParams(networkParams);
122 expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
124 Subnet openstackSubnet = new Subnet();
125 HostRoute hostRoute = new HostRoute();
126 hostRoute.setHostRouteId("hostRouteId");
127 hostRoute.setNextHop("nextHop");
128 hostRoute.setRoutePrefix("routePrefix");
129 openstackSubnet.getHostRoutes().add(hostRoute);
130 List<Subnet> subnetList = new ArrayList<Subnet>();
131 subnetList.add(openstackSubnet);
132 l3Network.getSubnets().add(openstackSubnet);
133 l3Network.setNetworkTechnology("Contrail");
134 l3Network.setIsSharedNetwork(true);
135 l3Network.setIsExternalNetwork(false);
137 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
138 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
140 CreateNetworkRequest createNetworkRequest =
141 SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion,
142 orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer);
144 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest")
145 .ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("messageId"));
149 public void createNetworkRollbackRequestMapperTest() throws Exception {
151 String cloudRegionPo = "cloudRegionPo";
152 RollbackNetworkRequest expectedRollbackNetworkRequest = new RollbackNetworkRequest();
154 expectedRollbackNetworkRequest.setMessageId(requestContext.getMsoRequestId());
155 NetworkRollback networkRollback = new NetworkRollback();
156 networkRollback.setCloudId(cloudRegionPo);
157 networkRollback.setNetworkCreated(true);
158 networkRollback.setNetworkId(l3Network.getNetworkId());
159 networkRollback.setNetworkType(l3Network.getNetworkType());
160 networkRollback.setTenantId(cloudRegion.getTenantId());
161 expectedRollbackNetworkRequest.setNetworkRollback(networkRollback);
162 expectedRollbackNetworkRequest.setSkipAAI(true);
164 CreateNetworkResponse createNetworkResponse = new CreateNetworkResponse();
165 createNetworkResponse.setNetworkCreated(true);
167 RollbackNetworkRequest rollbackNetworkRequest = SPY_networkAdapterObjectMapper
168 .createNetworkRollbackRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance,
169 l3Network, userInput, cloudRegionPo, createNetworkResponse);
171 assertThat(rollbackNetworkRequest, sameBeanAs(expectedRollbackNetworkRequest).ignoring("contrailNetwork")
172 .ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
176 public void updateNetworkRequestMapperTest() throws UnsupportedEncodingException {
177 org.onap.so.openstack.beans.Subnet subnet = new org.onap.so.openstack.beans.Subnet();
178 subnet.setSubnetId("subnetId");
179 subnet.setGatewayIp("NULL");
180 subnet.setHostRoutes(new ArrayList<org.onap.so.openstack.beans.HostRoute>());
182 List<org.onap.so.openstack.beans.Subnet> subnets = new ArrayList<>();
185 ProviderVlanNetwork providerVlanNetwork =
186 new ProviderVlanNetwork("physicalNetworkName", new ArrayList<Integer>());
188 List<String> policyFqdns = Arrays.asList("networkPolicyFqdn");
190 org.onap.so.openstack.beans.RouteTarget expectedRouteTarget = new org.onap.so.openstack.beans.RouteTarget();
191 expectedRouteTarget.setRouteTarget("globalRouteTarget");
193 ContrailNetwork contrailNetwork = new ContrailNetwork();
194 contrailNetwork.setPolicyFqdns(policyFqdns);
195 contrailNetwork.setRouteTableFqdns(new ArrayList<String>());
196 contrailNetwork.setRouteTargets(new ArrayList<org.onap.so.openstack.beans.RouteTarget>());
197 contrailNetwork.getRouteTargets().add(expectedRouteTarget);
198 contrailNetwork.getRouteTableFqdns().add("routeTableReferenceFqdn");
200 MsoRequest msoRequest = new MsoRequest();
201 msoRequest.setServiceInstanceId("testServiceInstanceId1");
203 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
204 modelInfoNetwork.setNetworkType("networkType");
205 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
206 modelInfoNetwork.setModelVersion("modelVersion");
208 Subnet actualSubnet = new Subnet();
209 actualSubnet.setSubnetId("subnetId");
210 actualSubnet.setDhcpEnabled(false);
211 actualSubnet.setIpVersion("4");
213 RouteTarget routeTarget = new RouteTarget();
214 routeTarget.setGlobalRouteTarget("globalRouteTarget");
216 VpnBinding vpnBinding = new VpnBinding();
217 vpnBinding.setVpnId("vpnId");
218 vpnBinding.getRouteTargets().add(routeTarget);
220 Customer customer = new Customer();
221 customer.getVpnBindings().add(vpnBinding);
222 ServiceSubscription serviceSubscription = new ServiceSubscription();
223 customer.setServiceSubscription(serviceSubscription);
224 // set Customer on service instance
225 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
227 NetworkPolicy networkPolicy = new NetworkPolicy();
228 networkPolicy.setNetworkPolicyId("networkPolicyId");
229 networkPolicy.setNetworkPolicyFqdn("networkPolicyFqdn");
231 RouteTableReference routeTableReference = new RouteTableReference();
232 routeTableReference.setRouteTableReferenceFqdn("routeTableReferenceFqdn");
234 l3Network.setModelInfoNetwork(modelInfoNetwork);
235 l3Network.setPhysicalNetworkName("physicalNetworkName");
236 l3Network.getSubnets().add(actualSubnet);
237 l3Network.getNetworkPolicies().add(networkPolicy);
238 l3Network.getContrailNetworkRouteTableReferences().add(routeTableReference);
239 l3Network.setIsSharedNetwork(false);
240 l3Network.setIsExternalNetwork(false);
241 HashMap<String, String> networkParams = new HashMap<String, String>();
242 networkParams.put("shared", "false");
243 networkParams.put("external", "false");
244 networkParams.put("testUserInputKey", "testUserInputValue");
246 UpdateNetworkRequest expectedUpdateNetworkRequest = new UpdateNetworkRequest();
247 expectedUpdateNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
248 expectedUpdateNetworkRequest.setTenantId(cloudRegion.getTenantId());
249 expectedUpdateNetworkRequest.setNetworkId(l3Network.getNetworkId());
250 expectedUpdateNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
251 expectedUpdateNetworkRequest.setNetworkName(l3Network.getNetworkName());
252 expectedUpdateNetworkRequest.setNetworkType(l3Network.getModelInfoNetwork().getNetworkType());
253 expectedUpdateNetworkRequest.setNetworkTypeVersion(l3Network.getModelInfoNetwork().getModelVersion());
254 expectedUpdateNetworkRequest
255 .setModelCustomizationUuid(l3Network.getModelInfoNetwork().getModelCustomizationUUID());
256 expectedUpdateNetworkRequest.setSubnets(subnets);
257 expectedUpdateNetworkRequest.setProviderVlanNetwork(providerVlanNetwork);
258 expectedUpdateNetworkRequest.setContrailNetwork(contrailNetwork);
259 expectedUpdateNetworkRequest.setNetworkParams(networkParams);
260 expectedUpdateNetworkRequest.setMsoRequest(msoRequest);
261 expectedUpdateNetworkRequest.setSkipAAI(true);
262 expectedUpdateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
263 expectedUpdateNetworkRequest.setMessageId("messageId");
264 expectedUpdateNetworkRequest
265 .setNotificationUrl("http://localhost:28080/mso/WorkflowMesssage/NetworkAResponse/messageId");
267 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
268 doReturn("http://localhost:28080/mso/WorkflowMesssage").when(SPY_networkAdapterObjectMapper).getEndpoint();
269 UpdateNetworkRequest actualUpdateNetworkRequest =
270 SPY_networkAdapterObjectMapper.createNetworkUpdateRequestMapper(requestContext, cloudRegion,
271 orchestrationContext, serviceInstance, l3Network, userInput, customer);
273 assertThat(actualUpdateNetworkRequest,
274 sameBeanAs(expectedUpdateNetworkRequest).ignoring("msoRequest.requestId"));
278 public void deleteNetworkRequestMapperTest() throws Exception {
279 DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
281 String messageId = "messageId";
282 expectedDeleteNetworkRequest.setMessageId(messageId);
283 doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
285 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
286 l3Network.setModelInfoNetwork(modelInfoNetwork);
287 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
288 expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
290 MsoRequest msoRequest = new MsoRequest();
291 msoRequest.setRequestId(requestContext.getMsoRequestId());
292 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
293 expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
295 expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
297 l3Network.setHeatStackId("heatStackId");
298 expectedDeleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
300 expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
302 expectedDeleteNetworkRequest.setSkipAAI(true);
304 expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
306 expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
308 expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
310 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
311 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
313 DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper
314 .deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
316 assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
320 public void deleteNetworkRequestNoHeatIdMapperTest() throws Exception {
321 DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
323 String messageId = "messageId";
324 expectedDeleteNetworkRequest.setMessageId(messageId);
325 doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
327 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
328 l3Network.setModelInfoNetwork(modelInfoNetwork);
329 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
330 expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
332 MsoRequest msoRequest = new MsoRequest();
333 msoRequest.setRequestId(requestContext.getMsoRequestId());
334 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
335 expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
337 expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
339 l3Network.setNetworkName("heatStackId");
340 expectedDeleteNetworkRequest.setNetworkStackId("heatStackId");
342 expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
344 expectedDeleteNetworkRequest.setSkipAAI(true);
346 expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
348 expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
350 expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
352 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
353 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
354 DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper
355 .deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
357 assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
361 public void buildOpenstackSubnetListTest() throws Exception {
363 ObjectMapper omapper = new ObjectMapper();
364 String bbJson = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "generalBB.json")));
365 org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock gbb =
366 omapper.readValue(bbJson, org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock.class);
367 L3Network myNetwork = gbb.getServiceInstance().getNetworks().get(0);
369 String expectedCreateNetworkRequestJson =
370 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "createNetworkRequest.json")));
371 org.onap.so.adapters.nwrest.CreateNetworkRequest expectedCreateNetworkRequest = omapper
372 .readValue(expectedCreateNetworkRequestJson, org.onap.so.adapters.nwrest.CreateNetworkRequest.class);
374 String cloudRegionPo = "cloudRegionPo";
376 expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
378 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
379 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
380 CreateNetworkRequest createNetworkRequest =
381 SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion,
382 orchestrationContext, serviceInstance, myNetwork, userInput, cloudRegionPo, customer);
383 // ignoring dynamic fields and networkParams that throws parsing exception on json file load
384 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("messageId")
385 .ignoring("msoRequest.requestId").ignoring("networkParams"));
389 public void buildOpenstackSubnetListMultipleHostRoutesTest() throws Exception {
391 ObjectMapper omapper = new ObjectMapper();
392 String l3NetworkJson =
393 new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "l3-network-multiple-subnets.json")));
394 L3Network l3Network = omapper.readValue(l3NetworkJson, L3Network.class);
396 List<org.onap.so.openstack.beans.Subnet> subnets =
397 SPY_networkAdapterObjectMapper.buildOpenstackSubnetList(l3Network);
398 assertEquals("192.168.0.0/16", subnets.get(0).getHostRoutes().get(0).getPrefix());
399 assertEquals("192.168.1.5/16", subnets.get(0).getHostRoutes().get(1).getPrefix());
402 assertEquals("NULL", subnets.get(1).getGatewayIp());