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