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