From e4d8ac161a64edfbb9eccd29fd640c36cadc3bf5 Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Mon, 11 Jul 2016 18:01:08 +0200 Subject: [PATCH] Adding Unit tests for VppRenderer and Classifiers Change-Id: Ib16145358d255773108d4170cabb8454a7889f1b Signed-off-by: Michal Cmarada --- renderers/vpp/pom.xml | 6 ++ .../vpp_provider/impl/VppRendererTest.java | 98 +++++++++++++++++++ .../vpp/VppRendererDataBrokerTest.java | 4 +- .../renderer/vpp/sf/AllowActionTest.java | 25 +++++ .../renderer/vpp/sf/ClassifierTestUtils.java | 33 +++++++ .../vpp/sf/EtherTypeClassifierTest.java | 64 ++++++++++++ .../vpp/sf/IpProtoClassifierTest.java | 77 +++++++++++++++ 7 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 renderers/vpp/src/test/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRendererTest.java create mode 100644 renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/AllowActionTest.java create mode 100755 renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/ClassifierTestUtils.java create mode 100755 renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/EtherTypeClassifierTest.java create mode 100755 renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/IpProtoClassifierTest.java diff --git a/renderers/vpp/pom.xml b/renderers/vpp/pom.xml index f16ccfc46..b1ba0dbd1 100644 --- a/renderers/vpp/pom.xml +++ b/renderers/vpp/pom.xml @@ -93,6 +93,12 @@ slf4j-log4j12 test + + org.opendaylight.openflowplugin.model + model-flow-base + 0.3.0-SNAPSHOT + test + diff --git a/renderers/vpp/src/test/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRendererTest.java b/renderers/vpp/src/test/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRendererTest.java new file mode 100644 index 000000000..ae69fd3ce --- /dev/null +++ b/renderers/vpp/src/test/java/org/opendaylight/controller/config/yang/config/vpp_provider/impl/VppRendererTest.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.config.yang.config.vpp_provider.impl; + +import com.google.common.base.Optional; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.MountPoint; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class VppRendererTest extends VppRendererDataBrokerTest { + private final String CLASSIFIER = "Classifier-EtherType"; + private final String ACTION_ALLOW = "Action-Allow"; + private final String SUPPORTED_PARAM_NAME = "ethertype"; + + private DataBroker dataBroker; + @Mock + DataBroker dataBroker2; + @Mock + BindingAwareBroker bindingAwareBroker; + @Mock + MountPointService mountPointService; + @Mock + MountPoint mountPoint; + @Mock + BindingAwareBroker.ProviderContext providerContext; + + @Before + public void init(){ + dataBroker = getDataBroker(); + Mockito.when(providerContext.getSALService(Matchers.>any())) + .thenReturn(mountPointService); + Mockito.when(mountPointService.getMountPoint(Matchers.>any())) + .thenReturn(Optional.of(mountPoint)); + Mockito.when(mountPoint.getService(Matchers.>any())).thenReturn(Optional.of(dataBroker2)); + + + } + + @Test + public void testCreateVppRenderer() throws Exception { + VppRenderer vppRenderer = new VppRenderer(dataBroker, bindingAwareBroker); + + vppRenderer.onSessionInitiated(providerContext); + + Optional rendererOptional = DataStoreHelper.readFromDs( + LogicalDatastoreType.OPERATIONAL, + VppIidFactory.getRendererIID(new RendererKey(VppRenderer.NAME)), + dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(rendererOptional.isPresent()); + Renderer renderer = rendererOptional.get(); + Assert.assertEquals(VppRenderer.NAME, renderer.getName()); + List definition = renderer.getCapabilities().getSupportedClassifierDefinition(); + Assert.assertEquals(1, definition.size()); + Assert.assertEquals(CLASSIFIER, definition.get(0).getClassifierDefinitionId().getValue()); + Assert.assertEquals(SUPPORTED_PARAM_NAME, definition.get(0).getSupportedParameterValues().get(0).getParameterName().getValue()); + + List actionDefinition = renderer.getCapabilities().getSupportedActionDefinition(); + Assert.assertEquals(1, actionDefinition.size()); + Assert.assertEquals(ACTION_ALLOW, actionDefinition.get(0).getActionDefinitionId().getValue()); + Assert.assertTrue(actionDefinition.get(0).getSupportedParameterValues().isEmpty()); + + vppRenderer.close(); + rendererOptional = DataStoreHelper.readFromDs( + LogicalDatastoreType.OPERATIONAL, + VppIidFactory.getRendererIID(new RendererKey(VppRenderer.NAME)), + dataBroker.newReadOnlyTransaction()); + Assert.assertFalse(rendererOptional.isPresent()); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java index 551f19b83..b19ae19b8 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java @@ -11,7 +11,9 @@ package org.opendaylight.groupbasedpolicy.renderer.vpp; import com.google.common.collect.ImmutableList; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProviders; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUser; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; @@ -27,6 +29,6 @@ public class VppRendererDataBrokerTest extends CustomDataBrokerTest { @Override public Collection> getClassesFromModules() { return ImmutableList.of(Interfaces.class, Interface.class, VhostUser.class, NetworkTopology.class, - Topology.class, Node.class, NetconfNode.class, Renderer.class); + Topology.class, Node.class, NetconfNode.class, Renderer.class, LocationProviders.class, Config.class); } } diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/AllowActionTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/AllowActionTest.java new file mode 100644 index 000000000..1ed09370b --- /dev/null +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/AllowActionTest.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; + +import org.junit.Assert; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; + +public class AllowActionTest { + + @Test + public void testAllowAction_BasicParams() { + AllowAction allowAction = new AllowAction(); + + Assert.assertTrue(allowAction.getSupportedParameterValues().isEmpty()); + Assert.assertEquals(AllowActionDefinition.DEFINITION, allowAction.getActionDef()); + Assert.assertEquals(AllowActionDefinition.ID, allowAction.getId()); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/ClassifierTestUtils.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/ClassifierTestUtils.java new file mode 100755 index 000000000..f9a02d779 --- /dev/null +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/ClassifierTestUtils.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; + +import java.util.Map; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder; + +import com.google.common.collect.ImmutableMap; + +public class ClassifierTestUtils { + + public static final String MSG_NOT_SPECIFIED = "not specified"; + public static final String MSG_PARAMETER_IS_NOT_PRESENT = "parameter is not present"; + public static final String SUPPORTED_PARAM_NAME_ETH = "ethertype"; + public static final String SUPPORTED_PARAM_NAME_IP = "proto"; + + static final Long TCP = 6L; + + static Map createIntValueParam(String paramName, Long value) { + if (value == null) + return ImmutableMap.of(paramName, new ParameterValueBuilder().build()); + else + return ImmutableMap.of(paramName, new ParameterValueBuilder().setIntValue(value).build()); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/EtherTypeClassifierTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/EtherTypeClassifierTest.java new file mode 100755 index 000000000..09faa7e59 --- /dev/null +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/EtherTypeClassifierTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +public class EtherTypeClassifierTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void testGetSupportedParameterValues() { + List supportedParameterValues = + Classifier.ETHER_TYPE_CL.getSupportedParameterValues(); + + Assert.assertEquals(1, supportedParameterValues.size()); + Assert.assertEquals(ClassifierTestUtils.SUPPORTED_PARAM_NAME_ETH, + supportedParameterValues.get(0).getParameterName().getValue()); + + Assert.assertEquals(EtherTypeClassifierDefinition.DEFINITION, + Classifier.ETHER_TYPE_CL.getClassifierDefinition()); + Assert.assertEquals(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL.getId()); + Assert.assertNull(Classifier.ETHER_TYPE_CL.getParent()); + } + + @Test + public void testCheckPresenceOfRequiredParameters_EtherTypeMissing() { + Map params = new HashMap<>(); + params.putAll(ClassifierTestUtils.createIntValueParam(IpProtoClassifierDefinition.PROTO_PARAM, + ClassifierTestUtils.TCP)); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(ClassifierTestUtils.MSG_NOT_SPECIFIED); + Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParameters_EtherTypeNull() { + Map params = new HashMap<>(); + params.putAll(ClassifierTestUtils.createIntValueParam(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, null)); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(ClassifierTestUtils.MSG_PARAMETER_IS_NOT_PRESENT); + Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/IpProtoClassifierTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/IpProtoClassifierTest.java new file mode 100755 index 000000000..8a1f592b9 --- /dev/null +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/IpProtoClassifierTest.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +public class IpProtoClassifierTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void testGetSupportedParameterValues() { + List supportedParameterValues = Classifier.IP_PROTO_CL.getSupportedParameterValues(); + + Assert.assertEquals(1, supportedParameterValues.size()); + Assert.assertEquals(ClassifierTestUtils.SUPPORTED_PARAM_NAME_IP, + supportedParameterValues.get(0).getParameterName().getValue()); + + Assert.assertEquals(IpProtoClassifierDefinition.DEFINITION, Classifier.IP_PROTO_CL.getClassifierDefinition()); + Assert.assertEquals(IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL.getId()); + Assert.assertEquals(Classifier.ETHER_TYPE_CL, Classifier.IP_PROTO_CL.getParent()); + } + + @Test + public void testCheckPresenceOfRequiredParameters_ProtoMissing() { + Map params = new HashMap<>(); + params.putAll(ClassifierTestUtils.createIntValueParam(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, + EtherTypeClassifierDefinition.IPv4_VALUE)); + + Assert.assertNull(IpProtoClassifier.getIpProtoValue(params)); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(ClassifierTestUtils.MSG_NOT_SPECIFIED); + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParameters_ProtoNull() { + Map params = new HashMap<>(); + params.putAll(ClassifierTestUtils.createIntValueParam(IpProtoClassifierDefinition.PROTO_PARAM, null)); + + Assert.assertNull(IpProtoClassifier.getIpProtoValue(params)); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(ClassifierTestUtils.MSG_PARAMETER_IS_NOT_PRESENT); + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParameters() { + Map params = new HashMap<>(); + params.putAll(ClassifierTestUtils.createIntValueParam(IpProtoClassifierDefinition.PROTO_PARAM, + IpProtoClassifierDefinition.TCP_VALUE)); + + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + + Assert.assertEquals(ClassifierTestUtils.TCP, IpProtoClassifier.getIpProtoValue(params)); + } +} -- 2.36.6