2  * ============LICENSE_START=======================================================
 
   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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  21 package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.mockito.Mockito.doReturn;
 
  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;
 
  55 public class VrfValidationTest extends BaseTaskTest {
 
  57     protected ObjectMapper mapper = new ObjectMapper();
 
  60     protected VrfValidation vrfValidation;
 
  63     public ExpectedException exceptionRule = ExpectedException.none();
 
  66     public void before() throws Exception {
 
  67         vrfValidation.setBbInputSetupUtils(bbSetupUtils);
 
  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);
 
  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);
 
  88         service.setServiceType("BONDING");
 
  89         service.setServiceRole("INFRASTRUCTURE-VPN");
 
  90         ExpectedException.none();
 
  91         vrfValidation.vrfServiceValidation(service);
 
  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);
 
 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);
 
 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);
 
 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);
 
 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);
 
 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);
 
 153         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().add(new AggregateRoute());
 
 154         aaiLocalNetwork.getAggregateRoutes().getAggregateRoute().get(1).setIpVersion("6");
 
 155         ExpectedException.none();
 
 156         vrfValidation.aaiAggregateRouteValidation(aaiLocalNetwork);
 
 158         aaiLocalNetwork.setAggregateRoutes(null);
 
 159         ExpectedException.none();
 
 160         vrfValidation.aaiAggregateRouteValidation(aaiLocalNetwork);
 
 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);
 
 173         aaiLocalNetwork.getSubnets().getSubnet().add(new Subnet());
 
 174         aaiLocalNetwork.getSubnets().getSubnet().get(1).setIpVersion("6");
 
 175         ExpectedException.none();
 
 176         vrfValidation.aaiSubnetValidation(aaiLocalNetwork);
 
 178         aaiLocalNetwork.setSubnets(null);
 
 179         exceptionRule.expect(VrfBondingServiceException.class);
 
 180         exceptionRule.expectMessage("LocalNetwork: myNetworkID has no subnets");
 
 181         vrfValidation.aaiSubnetValidation(aaiLocalNetwork);
 
 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);
 
 192         validation = vrfValidation.ipVersionValidation(ipVersion2, ipVersion1);
 
 193         assertEquals("Validation is correct", true, validation);
 
 196         validation = vrfValidation.ipVersionValidation(ipVersion1, ipVersion2);
 
 197         assertEquals("Validation is correct", false, validation);
 
 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);