8f0d00ff862710b993728c0a03233a4937e61405
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / client / adapter / network / mapper / NetworkAdapterObjectMapperTest.java
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.*;
25 import static org.mockito.Mockito.doReturn;
26
27 import java.io.UnsupportedEncodingException;
28 import java.nio.file.Files;
29 import java.nio.file.Paths;
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.List;
33 import java.util.Map;
34
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.mockito.Mockito;
38 import org.onap.so.adapters.nwrest.ContrailNetwork;
39 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
40 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
41 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
42 import org.onap.so.adapters.nwrest.NetworkTechnology;
43 import org.onap.so.adapters.nwrest.ProviderVlanNetwork;
44 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
45 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
46 import org.onap.so.bpmn.common.data.TestDataSetup;
47 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
48 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
49 import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute;
50 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
51 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
52 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference;
53 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget;
54 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
55 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
56 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
57 import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
58 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
59 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
60 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
61 import org.onap.so.entity.MsoRequest;
62 import org.onap.so.openstack.beans.NetworkRollback;
63
64 import com.fasterxml.jackson.databind.ObjectMapper;
65
66 public class NetworkAdapterObjectMapperTest extends TestDataSetup{
67         
68         private NetworkAdapterObjectMapper SPY_networkAdapterObjectMapper = Mockito.spy(NetworkAdapterObjectMapper.class);
69
70         private L3Network l3Network;
71         private RequestContext requestContext;
72         private ServiceInstance serviceInstance;
73         private CloudRegion cloudRegion;
74         private OrchestrationContext orchestrationContext;
75         private Customer customer;
76         Map<String, String> userInput;
77         
78         private final static String JSON_FILE_LOCATION = "src/test/resources/__files/BuildingBlocks/NetworkMapper/";
79         
80         @Before
81         public void before() {
82                 requestContext = setRequestContext();
83                 
84                 customer = buildCustomer();
85                 
86                 serviceInstance = setServiceInstance();
87                 
88                 cloudRegion = setCloudRegion();
89                 
90                 orchestrationContext = setOrchestrationContext();
91                 orchestrationContext.setIsRollbackEnabled(false);
92                 
93                 userInput = setUserInput();
94                 
95                 l3Network = setL3Network();
96
97                 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
98         }
99         
100         @Test
101         public void testSetNetworkTechnology() {
102                 String networkTechnology = "Contrail";
103                 NetworkTechnology expectedNetworkTechnology = NetworkTechnology.CONTRAIL;
104                 NetworkTechnology actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
105                 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
106                 
107                 networkTechnology = "Neutron";
108                 expectedNetworkTechnology = NetworkTechnology.NEUTRON;
109                 actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
110                 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
111                 
112                 networkTechnology = "Vmware";
113                 expectedNetworkTechnology = NetworkTechnology.VMWARE;
114                 actualNetworkTechnology = SPY_networkAdapterObjectMapper.setNetworkTechnology(networkTechnology);
115                 assertEquals("NetworkTechnology matches", expectedNetworkTechnology, actualNetworkTechnology);
116                 
117         }
118         @Test
119         public void buildCreateNetworkRequestFromBbobjectTest() throws Exception {
120
121                 String cloudRegionPo = "cloudRegionPo";
122                 CreateNetworkRequest expectedCreateNetworkRequest = new CreateNetworkRequest();
123                 
124                 expectedCreateNetworkRequest.setCloudSiteId(cloudRegionPo);
125                 expectedCreateNetworkRequest.setTenantId(cloudRegion.getTenantId());
126                 expectedCreateNetworkRequest.setNetworkId(l3Network.getNetworkId());
127                 expectedCreateNetworkRequest.setNetworkName(l3Network.getNetworkName());
128                 expectedCreateNetworkRequest.setNetworkType(l3Network.getNetworkType());
129                 expectedCreateNetworkRequest.setBackout(false);
130                 expectedCreateNetworkRequest.setFailIfExists(true);
131                 expectedCreateNetworkRequest.setNetworkTechnology(NetworkTechnology.CONTRAIL);
132                 MsoRequest msoRequest = new MsoRequest();
133                 msoRequest.setRequestId(requestContext.getMsoRequestId());
134                 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
135                 expectedCreateNetworkRequest.setMsoRequest(msoRequest);
136                 expectedCreateNetworkRequest.setSkipAAI(true);
137                 
138                 Subnet openstackSubnet = new Subnet();
139                 HostRoute hostRoute = new HostRoute();
140                 hostRoute.setHostRouteId("hostRouteId");
141                 hostRoute.setNextHop("nextHop");
142                 hostRoute.setRoutePrefix("routePrefix");
143                 openstackSubnet.getHostRoutes().add(hostRoute);
144                 List<Subnet> subnetList = new ArrayList<Subnet>();
145                 subnetList.add(openstackSubnet);
146                 l3Network.getSubnets().add(openstackSubnet);
147                 l3Network.getModelInfoNetwork().setNetworkTechnology("Contrail");
148
149                 CreateNetworkRequest createNetworkRequest  = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, customer);
150                 
151                 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("contrailRequest").ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
152         }
153         
154         @Test
155         public void createNetworkRollbackRequestMapperTest() throws Exception {
156
157                 String cloudRegionPo = "cloudRegionPo";
158                 RollbackNetworkRequest expectedRollbackNetworkRequest = new RollbackNetworkRequest();
159                 
160                 expectedRollbackNetworkRequest.setMessageId(requestContext.getMsoRequestId());
161                 NetworkRollback networkRollback = new NetworkRollback();
162                 networkRollback.setCloudId(cloudRegionPo);
163                 networkRollback.setNetworkCreated(true);
164                 networkRollback.setNetworkId(l3Network.getNetworkId());
165                 networkRollback.setNetworkType(l3Network.getNetworkType());
166                 networkRollback.setTenantId(cloudRegion.getTenantId());
167                 expectedRollbackNetworkRequest.setNetworkRollback(networkRollback);
168                 expectedRollbackNetworkRequest.setSkipAAI(true);
169                 
170                 CreateNetworkResponse createNetworkResponse = new CreateNetworkResponse();
171                 createNetworkResponse.setNetworkCreated(true);
172
173                 RollbackNetworkRequest rollbackNetworkRequest  = SPY_networkAdapterObjectMapper.createNetworkRollbackRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, cloudRegionPo, createNetworkResponse);
174                 
175                 assertThat(rollbackNetworkRequest, sameBeanAs(expectedRollbackNetworkRequest).ignoring("contrailNetwork").ignoring("providerVlanNetwork").ignoring("subnets").ignoring("networkParams").ignoring("messageId"));
176         }
177         
178         @Test
179         public void updateNetworkRequestMapperTest() throws UnsupportedEncodingException {
180                 org.onap.so.openstack.beans.Subnet subnet = new org.onap.so.openstack.beans.Subnet();
181                 subnet.setSubnetId("subnetId");
182                 subnet.setHostRoutes(new ArrayList<org.onap.so.openstack.beans.HostRoute>());
183                 
184                 List<org.onap.so.openstack.beans.Subnet> subnets = new ArrayList<>();
185                 subnets.add(subnet);
186                 
187                 ProviderVlanNetwork providerVlanNetwork = new ProviderVlanNetwork("physicalNetworkName", new ArrayList<Integer>());
188                 
189                 List<String> policyFqdns = Arrays.asList("networkPolicyFqdn");
190                 
191                 org.onap.so.openstack.beans.RouteTarget expectedRouteTarget = new org.onap.so.openstack.beans.RouteTarget();
192                 expectedRouteTarget.setRouteTarget("globalRouteTarget");
193                 
194                 ContrailNetwork contrailNetwork = new ContrailNetwork();
195                 contrailNetwork.setPolicyFqdns(policyFqdns);
196                 contrailNetwork.setRouteTableFqdns(new ArrayList<String>());
197                 contrailNetwork.setRouteTargets(new ArrayList<org.onap.so.openstack.beans.RouteTarget>());
198                 contrailNetwork.getRouteTargets().add(expectedRouteTarget);
199                 contrailNetwork.getRouteTableFqdns().add("routeTableReferenceFqdn");
200                 
201                 MsoRequest msoRequest = new MsoRequest();
202                 msoRequest.setServiceInstanceId("testServiceInstanceId1");
203                 
204                 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
205                 modelInfoNetwork.setNetworkType("networkType");
206                 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
207                 modelInfoNetwork.setModelVersion("modelVersion");
208                 
209                 Subnet actualSubnet = new Subnet();
210                 actualSubnet.setSubnetId("subnetId");
211                 actualSubnet.setDhcpEnabled(false);
212                 actualSubnet.setIpVersion("4");
213                 
214                 RouteTarget routeTarget = new RouteTarget();
215                 routeTarget.setGlobalRouteTarget("globalRouteTarget");
216                 
217                 VpnBinding vpnBinding = new VpnBinding();
218                 vpnBinding.setVpnId("vpnId");
219                 vpnBinding.getRouteTargets().add(routeTarget);
220                 
221                 Customer customer = new Customer();
222                 customer.getVpnBindings().add(vpnBinding);
223                 ServiceSubscription serviceSubscription = new ServiceSubscription();
224                 customer.setServiceSubscription(serviceSubscription);
225                 // set Customer on service instance
226                 customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
227                 
228                 NetworkPolicy networkPolicy = new NetworkPolicy();
229                 networkPolicy.setNetworkPolicyId("networkPolicyId");
230                 networkPolicy.setNetworkPolicyFqdn("networkPolicyFqdn");
231                 
232                 RouteTableReference routeTableReference = new RouteTableReference();
233                 routeTableReference.setRouteTableReferenceFqdn("routeTableReferenceFqdn");
234                 
235                 l3Network.setModelInfoNetwork(modelInfoNetwork);
236                 l3Network.setPhysicalNetworkName("physicalNetworkName");
237                 l3Network.getSubnets().add(actualSubnet);
238                 l3Network.getNetworkPolicies().add(networkPolicy);
239                 l3Network.getContrailNetworkRouteTableReferences().add(routeTableReference);
240                                 
241                 UpdateNetworkRequest expectedUpdateNetworkRequest = new UpdateNetworkRequest();
242                 expectedUpdateNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
243                 expectedUpdateNetworkRequest.setTenantId(cloudRegion.getTenantId());
244                 expectedUpdateNetworkRequest.setNetworkId(l3Network.getNetworkId());
245                 expectedUpdateNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
246                 expectedUpdateNetworkRequest.setNetworkName(l3Network.getNetworkName());
247                 expectedUpdateNetworkRequest.setNetworkType(l3Network.getModelInfoNetwork().getNetworkType());
248                 expectedUpdateNetworkRequest.setNetworkTypeVersion(l3Network.getModelInfoNetwork().getModelVersion());
249                 expectedUpdateNetworkRequest.setModelCustomizationUuid(l3Network.getModelInfoNetwork().getModelCustomizationUUID());
250                 expectedUpdateNetworkRequest.setSubnets(subnets);
251                 expectedUpdateNetworkRequest.setProviderVlanNetwork(providerVlanNetwork);
252                 expectedUpdateNetworkRequest.setContrailNetwork(contrailNetwork);
253                 expectedUpdateNetworkRequest.setNetworkParams(userInput);
254                 expectedUpdateNetworkRequest.setMsoRequest(msoRequest);
255                 expectedUpdateNetworkRequest.setSkipAAI(true);
256                 expectedUpdateNetworkRequest.setBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
257                 expectedUpdateNetworkRequest.setMessageId("messageId");
258                 expectedUpdateNetworkRequest.setNotificationUrl("http://localhost:28080/mso/WorkflowMesssage/NetworkAResponse/messageId");
259
260                 doReturn("messageId").when(SPY_networkAdapterObjectMapper).getRandomUuid();
261                 doReturn("http://localhost:28080/mso/WorkflowMesssage").when(SPY_networkAdapterObjectMapper).getEndpoint();
262                 UpdateNetworkRequest actualUpdateNetworkRequest = SPY_networkAdapterObjectMapper.createNetworkUpdateRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, l3Network, userInput, customer);
263                 
264                 assertThat(actualUpdateNetworkRequest, sameBeanAs(expectedUpdateNetworkRequest).ignoring("msoRequest.requestId"));
265         }
266         
267         @Test
268         public void deleteNetworkRequestMapperTest() throws Exception {
269                 DeleteNetworkRequest expectedDeleteNetworkRequest = new DeleteNetworkRequest();
270                 
271                 String messageId = "messageId";
272                 expectedDeleteNetworkRequest.setMessageId(messageId);
273                 doReturn(messageId).when(SPY_networkAdapterObjectMapper).getRandomUuid();
274                 
275                 ModelInfoNetwork modelInfoNetwork = new ModelInfoNetwork();
276                 l3Network.setModelInfoNetwork(modelInfoNetwork);
277                 modelInfoNetwork.setModelCustomizationUUID("modelCustomizationUuid");
278                 expectedDeleteNetworkRequest.setModelCustomizationUuid(modelInfoNetwork.getModelCustomizationUUID());
279                 
280                 MsoRequest msoRequest = new MsoRequest();
281                 msoRequest.setRequestId(requestContext.getMsoRequestId());
282                 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
283                 expectedDeleteNetworkRequest.setMsoRequest(msoRequest);
284                 
285                 expectedDeleteNetworkRequest.setNetworkId(l3Network.getNetworkId());
286                 
287                 l3Network.setHeatStackId("heatStackId");
288                 expectedDeleteNetworkRequest.setNetworkStackId(l3Network.getHeatStackId());
289                 
290                 expectedDeleteNetworkRequest.setNetworkType(l3Network.getNetworkType());
291                                 
292                 expectedDeleteNetworkRequest.setSkipAAI(true);
293                 
294                 expectedDeleteNetworkRequest.setTenantId(cloudRegion.getTenantId());
295                 
296                 expectedDeleteNetworkRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
297                 
298                 DeleteNetworkRequest deleteNetworkRequest = SPY_networkAdapterObjectMapper.deleteNetworkRequestMapper(requestContext, cloudRegion, serviceInstance, l3Network);
299                 
300                 assertThat(expectedDeleteNetworkRequest, sameBeanAs(deleteNetworkRequest));
301         }
302         
303         @Test
304         public void buildOpenstackSubnetListTest() throws Exception {
305
306                 ObjectMapper omapper = new ObjectMapper();
307                 String bbJson = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "generalBB.json")));
308                 org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock gbb  = omapper.readValue(
309                                 bbJson,
310                                 org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock.class);
311                 L3Network myNetwork = gbb.getServiceInstance().getNetworks().get(0);
312                 
313                 String expectedCreateNetworkRequestJson = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "createNetworkRequest.json")));
314                 org.onap.so.adapters.nwrest.CreateNetworkRequest expectedCreateNetworkRequest  = omapper.readValue(
315                                 expectedCreateNetworkRequestJson,
316                                 org.onap.so.adapters.nwrest.CreateNetworkRequest.class);                
317                 
318                 String cloudRegionPo = "cloudRegionPo";
319                 CreateNetworkRequest createNetworkRequest  = SPY_networkAdapterObjectMapper.createNetworkRequestMapper(requestContext, cloudRegion, orchestrationContext, serviceInstance, myNetwork, userInput, cloudRegionPo, customer);
320                 //ignoring dynamic fields and networkParams that throws parsing exception on json file load
321                 assertThat(createNetworkRequest, sameBeanAs(expectedCreateNetworkRequest).ignoring("messageId").ignoring("msoRequest.requestId").ignoring("networkParams"));
322         }
323 }