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.*;
25 import static org.mockito.Matchers.isA;
26 import static org.mockito.Mockito.doReturn;
28 import java.io.UnsupportedEncodingException;
29 import java.nio.file.Files;
30 import java.nio.file.Paths;
31 import java.util.ArrayList;
32 import java.util.Arrays;
33 import java.util.List;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.mockito.Mockito;
39 import org.onap.so.adapters.nwrest.ContrailNetwork;
40 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
41 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
42 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
43 import org.onap.so.adapters.nwrest.NetworkTechnology;
44 import org.onap.so.adapters.nwrest.ProviderVlanNetwork;
45 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
46 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
47 import org.onap.so.bpmn.common.data.TestDataSetup;
48 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
49 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
50 import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
52 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
56 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
57 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
58 import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
59 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
60 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
61 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
62 import org.onap.so.entity.MsoRequest;
63 import org.onap.so.openstack.beans.NetworkRollback;
65 import com.fasterxml.jackson.databind.ObjectMapper;
67 public class NetworkAdapterObjectMapperTest extends TestDataSetup{
69 private NetworkAdapterObjectMapper SPY_networkAdapterObjectMapper = Mockito.spy(NetworkAdapterObjectMapper.class);
71 private L3Network l3Network;
72 private RequestContext requestContext;
73 private ServiceInstance serviceInstance;
74 private CloudRegion cloudRegion;
75 private OrchestrationContext orchestrationContext;
76 private Customer customer;
77 Map<String, String> userInput;
79 private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/NetworkMapper/";
82 public void before() {
83 requestContext = setRequestContext();
85 customer = buildCustomer();
87 serviceInstance = setServiceInstance();
89 cloudRegion = setCloudRegion();
91 orchestrationContext = setOrchestrationContext();
92 orchestrationContext.setIsRollbackEnabled(false);
94 userInput = setUserInput();
96 l3Network = setL3Network();
98 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
102 public void testSetNetworkTechnology() {
103 String networkTechnology = "Contrail";
104 NetworkTechnology expectedNetworkTechnology = NetworkTechnology.CONTRAIL;
105 NetworkTechnology actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
106 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
108 networkTechnology = "Neutron";
109 expectedNetworkTechnology = NetworkTechnology.NEUTRON;
110 actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
111 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
113 networkTechnology = "Vmware";
114 expectedNetworkTechnology = NetworkTechnology.VMWARE;
115 actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
116 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
120 public void buildCreateNetworkRequestFromBbobjectTest() throws Exception {
122 String cloudRegionPo = "cloudRegionPo";
123 CreateNetworkRequest expectedCreateNetworkRequest = new CreateNetworkRequest();
125 expectedCreateNetworkRequest.setCloudSiteId(cloudRegionPo);
126 expectedCreateNetworkRequest.setTenantId(cloudRegion.getTenantId());
127 expectedCreateNetworkRequest.setNetworkId(l3Network.getNetworkId());
128 expectedCreateNetworkRequest.setNetworkName(l3Network.getNetworkName());
129 expectedCreateNetworkRequest.setNetworkType(l3Network.getNetworkType());
130 expectedCreateNetworkRequest.setBackout(false);
131 expectedCreateNetworkRequest.setFailIfExists(true);
132 expectedCreateNetworkRequest.setNetworkTechnology(NetworkTechnology.CONTRAIL);
133 MsoRequest msoRequest = new MsoRequest();
134 msoRequest.setRequestId(requestContext.getMsoRequestId());
135 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
136 expectedCreateNetworkRequest.setMsoRequest(msoRequest);
137 expectedCreateNetworkRequest.setSkipAAI(true);
139 expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
141 Subnet openstackSubnet = new Subnet();
142 HostRoute hostRoute = new HostRoute();
143 hostRoute.setHostRouteId("hostRouteId");
144 hostRoute.setNextHop("nextHop");
145 hostRoute.setRoutePrefix("routePrefix");
146 openstackSubnet.getHostRoutes().add(hostRoute);
147 List<Subnet> subnetList = new ArrayList<Subnet>();
148 subnetList.add(openstackSubnet);
149 l3Network.getSubnets().add(openstackSubnet);
150 l3Network.setNetworkTechnology("Contrail");
152 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
153 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
155 CreateNetworkRequest createNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer);
157 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
161 public void createNetworkRollbackRequestMapperTest() throws Exception {
163 String cloudRegionPo = "cloudRegionPo";
164 RollbackNetworkRequest expectedRollbackNetworkRequest = new RollbackNetworkRequest();
166 expectedRollbackNetworkRequest.setMessageId(requestContext.getMsoRequestId());
167 NetworkRollback networkRollback = new NetworkRollback();
168 networkRollback.setCloudId(cloudRegionPo);
169 networkRollback.setNetworkCreated(true);
170 networkRollback.setNetworkId(l3Network.getNetworkId());
171 networkRollback.setNetworkType(l3Network.getNetworkType());
172 networkRollback.setTenantId(cloudRegion.getTenantId());
173 expectedRollbackNetworkRequest.setNetworkRollback(networkRollback);
174 expectedRollbackNetworkRequest.setSkipAAI(true);
176 CreateNetworkResponse createNetworkResponse = new CreateNetworkResponse();
177 createNetworkResponse.setNetworkCreated(true);
179 RollbackNetworkRequest rollbackNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkRollbackRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, createNetworkResponse);
181 assertThat(rollbackNetworkRequest, sameBeanAs(expectedRollbackNetworkRequest).ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
185 public void updateNetworkRequestMapperTest() throws UnsupportedEncodingException {
186 org.onap.so.openstack.beans.Subnet subnet = new org.onap.so.openstack.beans.Subnet();
187 subnet.setSubnetId("subnetId");
188 subnet.setHostRoutes(new ArrayList<org.onap.so.openstack.beans.HostRoute>());
190 List<org.onap.so.openstack.beans.Subnet> subnets = new ArrayList<>();
193 ProviderVlanNetwork providerVlanNetwork = new ProviderVlanNetwork("physicalNetworkName", new ArrayList<Integer>());
195 List<String> policyFqdns = Arrays.asList("networkPolicyFqdn");
197 org.onap.so.openstack.beans.RouteTarget expectedRouteTarget = new org.onap.so.openstack.beans.RouteTarget();
198 expectedRouteTarget.setRouteTarget("globalRouteTarget");
200 ContrailNetwork contrailNetwork = new ContrailNetwork();
201 contrailNetwork.setPolicyFqdns(policyFqdns);
202 contrailNetwork.setRouteTableFqdns(new ArrayList<String>());
203 contrailNetwork.setRouteTargets(new ArrayList<org.onap.so.openstack.beans.RouteTarget>());
204 contrailNetwork.getRouteTargets().add(expectedRouteTarget);
205 contrailNetwork.getRouteTableFqdns().add("routeTableReferenceFqdn");
207 MsoRequest msoRequest = new MsoRequest();
208 msoRequest.setServiceInstanceId("testServiceInstanceId1");
210 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
211 modelInfoNetwork.setNetworkType("networkType");
212 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
213 modelInfoNetwork.setModelVersion("modelVersion");
215 Subnet actualSubnet = new Subnet();
216 actualSubnet.setSubnetId("subnetId");
217 actualSubnet.setDhcpEnabled(false);
218 actualSubnet.setIpVersion("4");
220 RouteTarget routeTarget = new RouteTarget();
221 routeTarget.setGlobalRouteTarget("globalRouteTarget");
223 VpnBinding vpnBinding = new VpnBinding();
224 vpnBinding.setVpnId("vpnId");
225 vpnBinding.getRouteTargets().add(routeTarget);
227 Customer customer = new Customer();
228 customer.getVpnBindings().add(vpnBinding);
229 ServiceSubscription serviceSubscription = new ServiceSubscription();
230 customer.setServiceSubscription(serviceSubscription);
231 // set Customer on service instance
232 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
234 NetworkPolicy networkPolicy = new NetworkPolicy();
235 networkPolicy.setNetworkPolicyId("networkPolicyId");
236 networkPolicy.setNetworkPolicyFqdn("networkPolicyFqdn");
238 RouteTableReference routeTableReference = new RouteTableReference();
239 routeTableReference.setRouteTableReferenceFqdn("routeTableReferenceFqdn");
241 l3Network.setModelInfoNetwork(modelInfoNetwork);
242 l3Network.setPhysicalNetworkName("physicalNetworkName");
243 l3Network.getSubnets().add(actualSubnet);
244 l3Network.getNetworkPolicies().add(networkPolicy);
245 l3Network.getContrailNetworkRouteTableReferences().add(routeTableReference);
247 UpdateNetworkRequest expectedUpdateNetworkRequest = new UpdateNetworkRequest();
248 expectedUpdateNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
249 expectedUpdateNetworkRequest.setTenantId(cloudRegion.getTenantId());
250 expectedUpdateNetworkRequest.setNetworkId(l3Network.getNetworkId());
251 expectedUpdateNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
252 expectedUpdateNetworkRequest.setNetworkName(l3Network.getNetworkName());
253 expectedUpdateNetworkRequest.setNetworkType(l3Network.getModelInfoNetwork().getNetworkType());
254 expectedUpdateNetworkRequest.setNetworkTypeVersion(l3Network.getModelInfoNetwork().getModelVersion());
255 expectedUpdateNetworkRequest.setModelCustomizationUuid(l3Network.getModelInfoNetwork().getModelCustomizationUUID());
256 expectedUpdateNetworkRequest.setSubnets(subnets);
257 expectedUpdateNetworkRequest.setProviderVlanNetwork(providerVlanNetwork);
258 expectedUpdateNetworkRequest.setContrailNetwork(contrailNetwork);
259 expectedUpdateNetworkRequest.setNetworkParams(userInput);
260 expectedUpdateNetworkRequest.setMsoRequest(msoRequest);
261 expectedUpdateNetworkRequest.setSkipAAI(true);
262 expectedUpdateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
263 expectedUpdateNetworkRequest.setMessageId("messageId");
264 expectedUpdateNetworkRequest.setNotificationUrl("http://localhost:28080/mso/WorkflowMesssage/NetworkAResponse/messageId");
266 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
267 doReturn("http://localhost:28080/mso/WorkflowMesssage").when(SPY_networkAdapterObjectMapper).getEndpoint();
268 UpdateNetworkRequest actualUpdateNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkUpdateRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, customer);
270 assertThat(actualUpdateNetworkRequest, sameBeanAs(expectedUpdateNetworkRequest).ignoring("msoRequest.requestId"));
274 public void deleteNetworkRequestMapperTest() throws Exception {
275 DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
277 String messageId = "messageId";
278 expectedDeleteNetworkRequest.setMessageId(messageId);
279 doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
281 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
282 l3Network.setModelInfoNetwork(modelInfoNetwork);
283 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
284 expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
286 MsoRequest msoRequest = new MsoRequest();
287 msoRequest.setRequestId(requestContext.getMsoRequestId());
288 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
289 expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
291 expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
293 l3Network.setHeatStackId("heatStackId");
294 expectedDeleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
296 expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
298 expectedDeleteNetworkRequest.setSkipAAI(true);
300 expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
302 expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
304 expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
306 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
307 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
309 DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper.deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
311 assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
315 public void deleteNetworkRequestNoHeatIdMapperTest() throws Exception {
316 DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
318 String messageId = "messageId";
319 expectedDeleteNetworkRequest.setMessageId(messageId);
320 doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
322 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
323 l3Network.setModelInfoNetwork(modelInfoNetwork);
324 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
325 expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
327 MsoRequest msoRequest = new MsoRequest();
328 msoRequest.setRequestId(requestContext.getMsoRequestId());
329 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
330 expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
332 expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
334 l3Network.setNetworkName("heatStackId");
335 expectedDeleteNetworkRequest.setNetworkStackId("heatStackId");
337 expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
339 expectedDeleteNetworkRequest.setSkipAAI(true);
341 expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
343 expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
345 expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
347 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
348 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
349 DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper.deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
351 assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
355 public void buildOpenstackSubnetListTest() throws Exception {
357 ObjectMapper omapper = new ObjectMapper();
358 String bbJson = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "generalBB.json")));
359 org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock gbb = omapper.readValue(
361 org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock.class);
362 L3Network myNetwork = gbb.getServiceInstance().getNetworks().get(0);
364 String expectedCreateNetworkRequestJson = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "createNetworkRequest.json")));
365 org.onap.so.adapters.nwrest.CreateNetworkRequest expectedCreateNetworkRequest = omapper.readValue(
366 expectedCreateNetworkRequestJson,
367 org.onap.so.adapters.nwrest.CreateNetworkRequest.class);
369 String cloudRegionPo = "cloudRegionPo";
371 expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
373 doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
374 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
375 CreateNetworkRequest createNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, myNetwork, userInput, cloudRegionPo, customer);
376 //ignoring dynamic fields and networkParams that throws parsing exception on json file load
377 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("messageId").ignoring("msoRequest.requestId").ignoring("networkParams"));