d9fb7f676c9abc487e65c7b11b6c0156adf0e7c2
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 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
21 package org.onap.so.bpmn.infrastructure.workflow.tasks;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.mockito.Mockito.doReturn;
25 import java.io.File;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Optional;
30 import org.junit.Before;
31 import org.junit.Rule;
32 import org.junit.Test;
33 import org.junit.rules.ExpectedException;
34 import org.mockito.InjectMocks;
35 import org.mockito.Mockito;
36 import org.onap.aai.domain.yang.AggregateRoute;
37 import org.onap.aai.domain.yang.AggregateRoutes;
38 import org.onap.aai.domain.yang.L3Network;
39 import org.onap.aai.domain.yang.RouteTarget;
40 import org.onap.aai.domain.yang.RouteTargets;
41 import org.onap.aai.domain.yang.Subnet;
42 import org.onap.aai.domain.yang.Subnets;
43 import org.onap.aai.domain.yang.VpnBinding;
44 import org.onap.so.bpmn.BaseTaskTest;
45 import org.onap.aaiclient.client.aai.AAIObjectType;
46 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
47 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
48 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
49 import org.onap.so.db.catalog.beans.Service;
50 import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
51 import com.fasterxml.jackson.core.JsonParseException;
52 import com.fasterxml.jackson.databind.JsonMappingException;
53 import com.fasterxml.jackson.databind.ObjectMapper;
54
55 public class VrfValidationTest extends BaseTaskTest {
56
57     protected ObjectMapper mapper = new ObjectMapper();
58
59     @InjectMocks
60     protected VrfValidation vrfValidation;
61
62     @Rule
63     public ExpectedException exceptionRule = ExpectedException.none();
64
65     @Before
66     public void before() throws Exception {
67         vrfValidation.setBbInputSetupUtils(bbSetupUtils);
68     }
69
70     @Test
71     public void testVrfServiceValidation() throws VrfBondingServiceException {
72         Service service = new Service();
73         service.setModelName("modelName");
74         service.setServiceType("BONDING");
75         service.setServiceRole("VPN");
76         exceptionRule.expect(VrfBondingServiceException.class);
77         exceptionRule.expectMessage(
78                 "Service: modelName does not have service type of BONDING and does not have service role of INFRASTRUCTURE-VPN");
79         vrfValidation.vrfServiceValidation(service);
80
81         service.setServiceType("BOND");
82         service.setServiceRole("INFRASTRUCTURE-VPN");
83         exceptionRule.expect(VrfBondingServiceException.class);
84         exceptionRule.expectMessage(
85                 "Service: modelName does not have service type of BONDING and does not have service role of INFRASTRUCTURE-VPN");
86         vrfValidation.vrfServiceValidation(service);
87
88         service.setServiceType("BONDING");
89         service.setServiceRole("INFRASTRUCTURE-VPN");
90         ExpectedException.none();
91         vrfValidation.vrfServiceValidation(service);
92     }
93
94     @Test
95     public void testVrfCatalogDbChecks() throws VrfBondingServiceException {
96         Service service = new Service();
97         service.setModelName("modelName");
98         ConfigurationResourceCustomization configuration = new ConfigurationResourceCustomization();
99         service.setConfigurationCustomizations(new ArrayList<>());
100         service.getConfigurationCustomizations().add(configuration);
101         ServiceProxyResourceCustomization serviceProxy = new ServiceProxyResourceCustomization();
102         configuration.setServiceProxyResourceCustomization(serviceProxy);
103         service.setServiceProxyCustomizations(new ArrayList<>());
104         service.getServiceProxyCustomizations().add(serviceProxy);
105         Service sourceService = new Service();
106         sourceService.setServiceType("TRANSPORT");
107         serviceProxy.setSourceService(sourceService);
108         configuration.setType("VRF-ENTRY");
109         configuration.setRole("INFRASTRUCTURE-CLOUD-VPN");
110         ExpectedException.none();
111         vrfValidation.vrfCatalogDbChecks(service);
112     }
113
114     @Test
115     public void testAaiVpnBindingValidation() throws VrfBondingServiceException {
116         org.onap.aai.domain.yang.VpnBinding aaiVpnBinding = new org.onap.aai.domain.yang.VpnBinding();
117         aaiVpnBinding.setVpnType("SERVICE-INFRASTRUCTURE");
118         ExpectedException.none();
119         vrfValidation.aaiVpnBindingValidation("test-vpn", aaiVpnBinding);
120     }
121
122     @Test
123     public void testAaiVpnBindingValidationVpnBindingIsNull() throws VrfBondingServiceException {
124         exceptionRule.expect(VrfBondingServiceException.class);
125         exceptionRule.expectMessage("The infrastructure vpn test-vpn does not exist in A&AI.");
126         vrfValidation.aaiVpnBindingValidation("test-vpn", null);
127     }
128
129     @Test
130     public void testAaiNetworkValidation() throws VrfBondingServiceException {
131         org.onap.aai.domain.yang.L3Network aaiLocalNetwork = new org.onap.aai.domain.yang.L3Network();
132         aaiLocalNetwork.setNetworkId("test-network");
133         ExpectedException.none();
134         vrfValidation.aaiNetworkValidation("test-network", aaiLocalNetwork);
135     }
136
137     @Test
138     public void testAaiNetworkValidationNetworkIsNull() throws VrfBondingServiceException {
139         exceptionRule.expect(VrfBondingServiceException.class);
140         exceptionRule.expectMessage("The local network test-network does not exist in A&AI.");
141         vrfValidation.aaiNetworkValidation("test-network", null);
142     }
143
144     @Test
145     public void testAaiAggregateRouteValidation() throws VrfBondingServiceException {
146         org.onap.aai.domain.yang.L3Network aaiLocalNetwork = new org.onap.aai.domain.yang.L3Network();
147         aaiLocalNetwork.setAggregateRoutes(new AggregateRoutes());
148         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().add(new AggregateRoute());
149         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().get(0).setIpVersion("4");
150         ExpectedException.none();
151         vrfValidation.aaiAggregateRouteValidation(aaiLocalNetwork);
152
153         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().add(new AggregateRoute());
154         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().get(1).setIpVersion("6");
155         ExpectedException.none();
156         vrfValidation.aaiAggregateRouteValidation(aaiLocalNetwork);
157
158         aaiLocalNetwork.setAggregateRoutes(null);
159         ExpectedException.none();
160         vrfValidation.aaiAggregateRouteValidation(aaiLocalNetwork);
161     }
162
163     @Test
164     public void testAaiSubnetValidation() throws VrfBondingServiceException {
165         org.onap.aai.domain.yang.L3Network aaiLocalNetwork = new org.onap.aai.domain.yang.L3Network();
166         aaiLocalNetwork.setNetworkId("myNetworkID");
167         aaiLocalNetwork.setSubnets(new Subnets());
168         aaiLocalNetwork.getSubnets().getSubnet().add(new Subnet());
169         aaiLocalNetwork.getSubnets().getSubnet().get(0).setIpVersion("4");
170         ExpectedException.none();
171         vrfValidation.aaiSubnetValidation(aaiLocalNetwork);
172
173         aaiLocalNetwork.getSubnets().getSubnet().add(new Subnet());
174         aaiLocalNetwork.getSubnets().getSubnet().get(1).setIpVersion("6");
175         ExpectedException.none();
176         vrfValidation.aaiSubnetValidation(aaiLocalNetwork);
177
178         aaiLocalNetwork.setSubnets(null);
179         exceptionRule.expect(VrfBondingServiceException.class);
180         exceptionRule.expectMessage("LocalNetwork: myNetworkID has no subnets");
181         vrfValidation.aaiSubnetValidation(aaiLocalNetwork);
182     }
183
184     @Test
185     public void testIpVersionValidation() {
186         String ipVersion1 = "4";
187         String ipVersion2 = "6";
188         boolean validation = vrfValidation.ipVersionValidation(ipVersion1, ipVersion2);
189         assertEquals("Validation is correct", true, validation);
190
191
192         validation = vrfValidation.ipVersionValidation(ipVersion2, ipVersion1);
193         assertEquals("Validation is correct", true, validation);
194
195         ipVersion1 = "6";
196         validation = vrfValidation.ipVersionValidation(ipVersion1, ipVersion2);
197         assertEquals("Validation is correct", false, validation);
198     }
199
200     @Test
201     public void testAaiRouteTargetValidation()
202             throws VrfBondingServiceException, JsonParseException, JsonMappingException, IOException {
203         L3Network l3Network = mapper.readValue(
204                 new File("src/test/resources/__files/BuildingBlocks/aaiNetworkWrapper.json"), L3Network.class);
205         AAIResultWrapper networkWrapper = new AAIResultWrapper(l3Network);
206         if (networkWrapper.getRelationships().isPresent()) {
207             List<AAIResourceUri> vpnBindingUris =
208                     networkWrapper.getRelationships().get().getRelatedUris(AAIObjectType.VPN_BINDING);
209             VpnBinding vpnBinding = new VpnBinding();
210             vpnBinding.setRouteTargets(new RouteTargets());
211             vpnBinding.getRouteTargets().getRouteTarget().add(new RouteTarget());
212             AAIResultWrapper wrapper = Mockito.mock(AAIResultWrapper.class);
213             doReturn(wrapper).when(bbSetupUtils).getAAIResourceDepthOne(vpnBindingUris.get(0));
214             doReturn(Optional.of(vpnBinding)).when(wrapper).asBean(VpnBinding.class);
215             ExpectedException.none();
216             vrfValidation.aaiRouteTargetValidation(l3Network);
217         }
218     }
219 }