7ff784815bb6541b1ca0f13d92f23826a194069c
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.onap.so.client.adapter.network.mapper;
21
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;
33 import java.util.Map;
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;
62
63 public class NetworkAdapterObjectMapperTest extends TestDataSetup {
64
65     private NetworkAdapterObjectMapper SPY_networkAdapterObjectMapper = Mockito.spy(NetworkAdapterObjectMapper.class);
66
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;
74
75     private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/NetworkMapper/";
76
77     @Before
78     public void before() {
79         requestContext = setRequestContext();
80
81         customer = buildCustomer();
82
83         serviceInstance = setServiceInstance();
84
85         cloudRegion = setCloudRegion();
86
87         orchestrationContext = setOrchestrationContext();
88         orchestrationContext.setIsRollbackEnabled(false);
89
90         userInput = setUserInput();
91
92         l3Network = setL3Network();
93
94         customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
95     }
96
97     @Test
98     public void buildCreateNetworkRequestFromBbobjectTest() throws Exception {
99
100         String cloudRegionPo = "cloudRegionPo";
101         CreateNetworkRequest expectedCreateNetworkRequest = new CreateNetworkRequest();
102
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);
121
122         expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
123
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);
136
137         doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
138         doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
139
140         CreateNetworkRequest createNetworkRequest =
141                 SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion,
142                         orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer);
143
144         assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest")
145                 .ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("messageId"));
146     }
147
148     @Test
149     public void createNetworkRollbackRequestMapperTest() throws Exception {
150
151         String cloudRegionPo = "cloudRegionPo";
152         RollbackNetworkRequest expectedRollbackNetworkRequest = new RollbackNetworkRequest();
153
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);
163
164         CreateNetworkResponse createNetworkResponse = new CreateNetworkResponse();
165         createNetworkResponse.setNetworkCreated(true);
166
167         RollbackNetworkRequest rollbackNetworkRequest = SPY_networkAdapterObjectMapper
168                 .createNetworkRollbackRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance,
169                         l3Network, userInput, cloudRegionPo, createNetworkResponse);
170
171         assertThat(rollbackNetworkRequest, sameBeanAs(expectedRollbackNetworkRequest).ignoring("contrailNetwork")
172                 .ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
173     }
174
175     @Test
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>());
181
182         List<org.onap.so.openstack.beans.Subnet> subnets = new ArrayList<>();
183         subnets.add(subnet);
184
185         ProviderVlanNetwork providerVlanNetwork =
186                 new ProviderVlanNetwork("physicalNetworkName", new ArrayList<Integer>());
187
188         List<String> policyFqdns = Arrays.asList("networkPolicyFqdn");
189
190         org.onap.so.openstack.beans.RouteTarget expectedRouteTarget = new org.onap.so.openstack.beans.RouteTarget();
191         expectedRouteTarget.setRouteTarget("globalRouteTarget");
192
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");
199
200         MsoRequest msoRequest = new MsoRequest();
201         msoRequest.setServiceInstanceId("testServiceInstanceId1");
202
203         ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
204         modelInfoNetwork.setNetworkType("networkType");
205         modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
206         modelInfoNetwork.setModelVersion("modelVersion");
207
208         Subnet actualSubnet = new Subnet();
209         actualSubnet.setSubnetId("subnetId");
210         actualSubnet.setDhcpEnabled(false);
211         actualSubnet.setIpVersion("4");
212
213         RouteTarget routeTarget = new RouteTarget();
214         routeTarget.setGlobalRouteTarget("globalRouteTarget");
215
216         VpnBinding vpnBinding = new VpnBinding();
217         vpnBinding.setVpnId("vpnId");
218         vpnBinding.getRouteTargets().add(routeTarget);
219
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);
226
227         NetworkPolicy networkPolicy = new NetworkPolicy();
228         networkPolicy.setNetworkPolicyId("networkPolicyId");
229         networkPolicy.setNetworkPolicyFqdn("networkPolicyFqdn");
230
231         RouteTableReference routeTableReference = new RouteTableReference();
232         routeTableReference.setRouteTableReferenceFqdn("routeTableReferenceFqdn");
233
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");
245
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");
266
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);
272
273         assertThat(actualUpdateNetworkRequest,
274                 sameBeanAs(expectedUpdateNetworkRequest).ignoring("msoRequest.requestId"));
275     }
276
277     @Test
278     public void deleteNetworkRequestMapperTest() throws Exception {
279         DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
280
281         String messageId = "messageId";
282         expectedDeleteNetworkRequest.setMessageId(messageId);
283         doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
284
285         ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
286         l3Network.setModelInfoNetwork(modelInfoNetwork);
287         modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
288         expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
289
290         MsoRequest msoRequest = new MsoRequest();
291         msoRequest.setRequestId(requestContext.getMsoRequestId());
292         msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
293         expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
294
295         expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
296
297         l3Network.setHeatStackId("heatStackId");
298         expectedDeleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
299
300         expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
301
302         expectedDeleteNetworkRequest.setSkipAAI(true);
303
304         expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
305
306         expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
307
308         expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
309
310         doReturn("endpoint/").when(SPY_networkAdapterObjectMapper).getEndpoint();
311         doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
312
313         DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper
314                 .deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
315
316         assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
317     }
318
319     @Test
320     public void deleteNetworkRequestNoHeatIdMapperTest() throws Exception {
321         DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
322
323         String messageId = "messageId";
324         expectedDeleteNetworkRequest.setMessageId(messageId);
325         doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
326
327         ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
328         l3Network.setModelInfoNetwork(modelInfoNetwork);
329         modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
330         expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
331
332         MsoRequest msoRequest = new MsoRequest();
333         msoRequest.setRequestId(requestContext.getMsoRequestId());
334         msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
335         expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
336
337         expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
338
339         l3Network.setNetworkName("heatStackId");
340         expectedDeleteNetworkRequest.setNetworkStackId("heatStackId");
341
342         expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
343
344         expectedDeleteNetworkRequest.setSkipAAI(true);
345
346         expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
347
348         expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
349
350         expectedDeleteNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
351
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);
356
357         assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
358     }
359
360     @Test
361     public void buildOpenstackSubnetListTest() throws Exception {
362
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);
368
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);
373
374         String cloudRegionPo = "cloudRegionPo";
375
376         expectedCreateNetworkRequest.setNotificationUrl("endpoint/NetworkAResponse/messageId");
377
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"));
386     }
387
388     @Test
389     public void buildOpenstackSubnetListMultipleHostRoutesTest() throws Exception {
390
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);
395
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());
400
401
402         assertEquals("NULL", subnets.get(1).getGatewayIp());
403     }
404 }