public class ClassificationResult {
+ static final String DEFAULT_ERROR_MESSAGE = "";
private final String errorMessage;
private final boolean isSuccessful;
* @param matches cannot be {@code null}
*/
public ClassificationResult(List<String> matches) {
- errorMessage = "";
+ errorMessage = DEFAULT_ERROR_MESSAGE;
this.isSuccessful = true;
}
import java.util.List;
import java.util.Map;
+import com.google.common.collect.ImmutableList;
import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;
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.parameter.value.RangeValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.IntBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.RangeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.supported.range.value.fields.SupportedRangeValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.supported.range.value.fields.SupportedRangeValueBuilder;
-import com.google.common.collect.ImmutableList;
-
/**
* Match against TCP or UDP, and source and/or destination ports
*/
public class L4Classifier extends Classifier {
+ static final String EXC_MSG_PARAM_VALUE_NOT_SPECIFIED = "Value of parameter not specified: ";
+ static final String EXC_MSG_MUT_EXCLUSIVE_PARAMS = "Mutually exclusive parameters: ";
+ static final String EXC_MSG_RANGE_VALUE_MISMATCH = "Range value mismatch: ";
+
protected L4Classifier(Classifier parent) {
super(parent);
}
if (params.get(portParam) != null) {
StringBuilder paramLog = new StringBuilder();
if (params.get(portParam).getIntValue() == null) {
- paramLog.append("Value of ").append(portParam).append(" parameter is not specified.");
+ paramLog.append(EXC_MSG_PARAM_VALUE_NOT_SPECIFIED).append(portParam);
throw new IllegalArgumentException(paramLog.toString());
}
if (params.get(portRangeParam) != null) {
- paramLog.append("Source port parameters ")
- .append(portParam)
- .append(" and ")
- .append(portRangeParam)
- .append(" are mutually exclusive.");
+ paramLog.append(EXC_MSG_MUT_EXCLUSIVE_PARAMS).append(portParam).append(" and ").append(portRangeParam);
throw new IllegalArgumentException(paramLog.toString());
}
}
private void validateRange(Map<String, ParameterValue> params, String portRangeParam) {
if (params.get(portRangeParam) != null) {
- validateRangeValue(params.get(portRangeParam).getRangeValue());
- }
- }
-
- private void validateRangeValue(RangeValue rangeValueParam) {
- if (rangeValueParam == null) {
- throw new IllegalArgumentException("Range parameter is specifiet but value is not present.");
- }
- final Long min = rangeValueParam.getMin();
- final Long max = rangeValueParam.getMax();
- if (min > max) {
- throw new IllegalArgumentException("Range value mismatch. " + min + " is greater than MAX " + max + ".");
+ if (params.get(portRangeParam).getRangeValue() == null) {
+ throw new IllegalArgumentException(EXC_MSG_PARAM_VALUE_NOT_SPECIFIED + portRangeParam);
+ }
+ Long min = params.get(portRangeParam).getRangeValue().getMin();
+ Long max = params.get(portRangeParam).getRangeValue().getMax();
+ if (min > max) {
+ throw new IllegalArgumentException(EXC_MSG_RANGE_VALUE_MISMATCH + min + ">" + max);
+ }
}
}
--- /dev/null
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.mockito.Mockito.mock;\r
+import static org.mockito.Mockito.spy;\r
+import static org.mockito.Mockito.verify;\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.util.Set;\r
+\r
+import com.google.common.collect.ImmutableSet;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;\r
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;\r
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;\r
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+\r
+public class ActionDefinitionListenerTest {\r
+\r
+ private ActionDefinitionListener listener;\r
+ private DataObjectModification<ActionDefinition> rootNode;\r
+ private Set<DataTreeModification<ActionDefinition>> changes;\r
+\r
+ private InstanceIdentifier<ActionDefinition> rootIdentifier;\r
+ private DataBroker dataProvider;\r
+\r
+ @SuppressWarnings("unchecked")\r
+ @Before\r
+ public void init() {\r
+ dataProvider = mock(DataBroker.class);\r
+\r
+ listener = spy(new ActionDefinitionListener(dataProvider));\r
+\r
+ ActionDefinitionKey key = mock(ActionDefinitionKey.class);\r
+ rootNode = mock(DataObjectModification.class);\r
+ rootIdentifier =\r
+ InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ActionDefinition.class, key).build();\r
+ DataTreeIdentifier<ActionDefinition> rootPath =\r
+ new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier);\r
+\r
+ DataTreeModification<ActionDefinition> change = mock(DataTreeModification.class);\r
+\r
+ when(change.getRootNode()).thenReturn(rootNode);\r
+ when(change.getRootPath()).thenReturn(rootPath);\r
+\r
+ changes = ImmutableSet.of(change);\r
+\r
+ ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build();\r
+\r
+ when(rootNode.getDataBefore()).thenReturn(def);\r
+ when(rootNode.getDataAfter()).thenReturn(def);\r
+ }\r
+\r
+ @Test\r
+ public void testOnWrite() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onSubtreeModified(rootNode, rootIdentifier);\r
+ }\r
+\r
+ @Test\r
+ public void testOnDelete() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onDelete(rootNode, rootIdentifier);\r
+ }\r
+\r
+ @Test\r
+ public void testOnSubtreeModified() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onSubtreeModified(rootNode, rootIdentifier);\r
+ }\r
+\r
+ private WriteTransaction resetTransaction() {\r
+ WriteTransaction wt = mock(WriteTransaction.class);\r
+ CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
+ when(wt.submit()).thenReturn(checkedFuture);\r
+ when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);\r
+ return wt;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.groupbasedpolicy.api.ValidationResult;\r
+import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
+\r
+public class AllowActionTest {\r
+\r
+ AllowAction action;\r
+\r
+ @Before\r
+ public void init() {\r
+ action = new AllowAction();\r
+ }\r
+\r
+ @Test\r
+ public void testGetId() {\r
+ assertEquals(action.getId(), AllowActionDefinition.ID);\r
+ }\r
+\r
+ @Test\r
+ public void testGetActionDef() {\r
+ assertEquals(action.getActionDef(), AllowActionDefinition.DEFINITION);\r
+ }\r
+\r
+ @Test\r
+ public void testGetSupportedParameterValues() {\r
+ assertTrue(action.getSupportedParameterValues().isEmpty());\r
+ }\r
+\r
+ @Test\r
+ public void testValidate() {\r
+ ActionInstance actionInstance = new ActionInstanceBuilder().build();\r
+ ValidationResult result = action.validate(actionInstance);\r
+ assertTrue(result.isValid());\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertFalse;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+\r
+public class ClassificationResultTest {\r
+\r
+ private static final String ERROR_MESSAGE = "error message";\r
+ private ClassificationResult resultOk;\r
+ private ClassificationResult resultError;\r
+\r
+ @Before\r
+ public void init() {\r
+ List<String> list = new ArrayList<>();\r
+ list.add("string");\r
+ resultOk = new ClassificationResult(list);\r
+ resultError = new ClassificationResult(ERROR_MESSAGE);\r
+ }\r
+\r
+ @Test\r
+ public void testConstructor_Result() {\r
+ assertTrue(resultOk.isSuccessfull());\r
+ }\r
+\r
+ @Test\r
+ public void testConstructor_ErrorMsg() {\r
+ assertFalse(resultError.isSuccessfull());\r
+ }\r
+\r
+ @Test\r
+ public void testGetErrorMessage() {\r
+ assertEquals(resultOk.getErrorMessage(), ClassificationResult.DEFAULT_ERROR_MESSAGE);\r
+ assertEquals(resultError.getErrorMessage(), ERROR_MESSAGE);\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.mockito.Mockito.mock;\r
+import static org.mockito.Mockito.spy;\r
+import static org.mockito.Mockito.verify;\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.util.Set;\r
+\r
+import com.google.common.collect.ImmutableSet;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;\r
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;\r
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;\r
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+\r
+public class ClassifierDefinitionListenerTest {\r
+\r
+ private ClassifierDefinitionListener listener;\r
+ private DataObjectModification<ClassifierDefinition> rootNode;\r
+ private Set<DataTreeModification<ClassifierDefinition>> changes;\r
+\r
+ private InstanceIdentifier<ClassifierDefinition> rootIdentifier;\r
+ private DataBroker dataProvider;\r
+\r
+ @SuppressWarnings("unchecked")\r
+ @Before\r
+ public void init() {\r
+ dataProvider = mock(DataBroker.class);\r
+\r
+ listener = spy(new ClassifierDefinitionListener(dataProvider));\r
+\r
+ ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class);\r
+ rootNode = mock(DataObjectModification.class);\r
+ rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class)\r
+ .child(ClassifierDefinition.class, key)\r
+ .build();\r
+ DataTreeIdentifier<ClassifierDefinition> rootPath =\r
+ new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier);\r
+\r
+ DataTreeModification<ClassifierDefinition> change = mock(DataTreeModification.class);\r
+\r
+ when(change.getRootNode()).thenReturn(rootNode);\r
+ when(change.getRootPath()).thenReturn(rootPath);\r
+\r
+ changes = ImmutableSet.of(change);\r
+\r
+ ClassifierDefinition def = new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build();\r
+\r
+ when(rootNode.getDataBefore()).thenReturn(def);\r
+ when(rootNode.getDataAfter()).thenReturn(def);\r
+ }\r
+\r
+ @Test\r
+ public void testOnWrite() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onSubtreeModified(rootNode, rootIdentifier);\r
+ }\r
+\r
+ @Test\r
+ public void testOnDelete() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onDelete(rootNode, rootIdentifier);\r
+ }\r
+\r
+ @Test\r
+ public void testOnSubtreeModified() {\r
+ when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);\r
+ WriteTransaction wt = resetTransaction();\r
+\r
+ listener.onDataTreeChanged(changes);\r
+\r
+ verify(listener).onSubtreeModified(rootNode, rootIdentifier);\r
+ }\r
+\r
+ private WriteTransaction resetTransaction() {\r
+ WriteTransaction wt = mock(WriteTransaction.class);\r
+ CheckedFuture checkedFuture = mock(CheckedFuture.class);\r
+ when(wt.submit()).thenReturn(checkedFuture);\r
+ when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);\r
+ return wt;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;\r
+\r
+public class EtherTypeClassifierTest {\r
+\r
+ @Test\r
+ public void testGetId() {\r
+ assertEquals(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL.getId());\r
+ }\r
+\r
+ @Test\r
+ public void testGetClassifierDefinition() {\r
+ assertEquals(EtherTypeClassifierDefinition.DEFINITION, Classifier.ETHER_TYPE_CL.getClassifierDefinition());\r
+ }\r
+\r
+ @Test\r
+ public void testGetSupportedParameterValues() {\r
+ List<SupportedParameterValues> valuesList = Classifier.ETHER_TYPE_CL.getSupportedParameterValues();\r
+ assertEquals(1, valuesList.size());\r
+\r
+ SupportedParameterValues values = valuesList.get(0);\r
+ assertNotNull(values);\r
+ assertEquals(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, values.getParameterName().getValue());\r
+ ParameterType pt = values.getParameterType();\r
+ assertTrue(pt instanceof Int);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.ARP_VALUE).build();\r
+ params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv);\r
+\r
+ try {\r
+ Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params);\r
+ } catch (IllegalArgumentException e) {\r
+ fail("Required parameter missing");\r
+ }\r
+ }\r
+\r
+ @Test(expected = IllegalArgumentException.class)\r
+ public void testCheckPresenceOfRequiredParams_noParam() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+\r
+ Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test(expected = IllegalArgumentException.class)\r
+ public void testCheckPresenceOfRequiredParams_nullValue() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().build();\r
+ params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv);\r
+\r
+ Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testGetParent() {\r
+ assertNull(Classifier.ETHER_TYPE_CL.getParent());\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;\r
+\r
+public class IpProtoClassifierTest {\r
+\r
+ @Test\r
+ public void testGetId() {\r
+ assertEquals(IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL.getId());\r
+ }\r
+\r
+ @Test\r
+ public void testGetClassifierDefinition() {\r
+ assertEquals(IpProtoClassifierDefinition.DEFINITION, Classifier.IP_PROTO_CL.getClassifierDefinition());\r
+ }\r
+\r
+ @Test\r
+ public void testGetSupportedParameterValues() {\r
+ List<SupportedParameterValues> valuesList = Classifier.IP_PROTO_CL.getSupportedParameterValues();\r
+ assertEquals(1, valuesList.size());\r
+\r
+ SupportedParameterValues values = valuesList.get(0);\r
+ assertNotNull(values);\r
+ assertEquals(IpProtoClassifierDefinition.PROTO_PARAM, values.getParameterName().getValue());\r
+ ParameterType pt = values.getParameterType();\r
+ assertTrue(pt instanceof Int);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams() {\r
+ Map<String, ParameterValue> params = prepareParams(IpProtoClassifierDefinition.UDP_VALUE);\r
+\r
+ try {\r
+ Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params);\r
+ } catch (IllegalArgumentException e) {\r
+ fail("Required parameter missing");\r
+ }\r
+ }\r
+\r
+ @Test(expected = IllegalArgumentException.class)\r
+ public void testCheckPresenceOfRequiredParams_noParam() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+\r
+ Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test(expected = IllegalArgumentException.class)\r
+ public void testCheckPresenceOfRequiredParams_nullValue() {\r
+ Map<String, ParameterValue> params = prepareParams_nullValue();\r
+\r
+ Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testGetIpProtoValue() {\r
+ Long expected = IpProtoClassifierDefinition.UDP_VALUE;\r
+\r
+ assertEquals(expected, IpProtoClassifier.getIpProtoValue(prepareParams(expected)));\r
+ }\r
+\r
+ @Test\r
+ public void testGetIpProtoValue_badParams() {\r
+ Map<String, ParameterValue> params = prepareParams_nullValue();\r
+\r
+ assertNull(IpProtoClassifier.getIpProtoValue(params));\r
+ assertNull(IpProtoClassifier.getIpProtoValue(new HashMap<String, ParameterValue>()));\r
+ assertNull(IpProtoClassifier.getIpProtoValue(null));\r
+ }\r
+\r
+ @Test\r
+ public void testGetParent() {\r
+ assertEquals(Classifier.IP_PROTO_CL.getParent(), Classifier.ETHER_TYPE_CL);\r
+ }\r
+\r
+ private Map<String, ParameterValue> prepareParams(Long intValue) {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().setIntValue(intValue).build();\r
+ params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv);\r
+ return params;\r
+ }\r
+\r
+ private Map<String, ParameterValue> prepareParams_nullValue() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().build();\r
+ params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv);\r
+ return params;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.junit.Before;\r
+import org.junit.Rule;\r
+import org.junit.Test;\r
+import org.junit.rules.ExpectedException;\r
+import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;\r
+\r
+public class L4ClassifierTest {\r
+\r
+ private ParameterValue pvSrcPort80;\r
+ private ParameterValue pvDstPort80;\r
+ private ParameterValue pvDstPort_null;\r
+ private ParameterValue pvSrcRange81_82;\r
+ private ParameterValue pvDstRange81_82;\r
+ private ParameterValue pvDstRange82_81;\r
+ private ParameterValue pvDstRange_null;\r
+\r
+ @Rule\r
+ public ExpectedException thrown = ExpectedException.none();\r
+\r
+ @Before\r
+ public void init() {\r
+ pvSrcPort80 = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM)).setIntValue(80L).build();\r
+ pvDstPort80 = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).setIntValue(80L).build();\r
+ pvDstPort_null = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build();\r
+ pvSrcRange81_82 = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM))\r
+ .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build())\r
+ .build();\r
+ pvDstRange81_82 = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM))\r
+ .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build())\r
+ .build();\r
+ pvDstRange82_81 = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM))\r
+ .setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build())\r
+ .build();\r
+ pvDstRange_null = new ParameterValueBuilder().setName(\r
+ new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM))\r
+ //.setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build())\r
+ .build();\r
+ }\r
+\r
+ @Test\r
+ public void testGetId() {\r
+ assertEquals(L4ClassifierDefinition.ID, Classifier.L4_CL.getId());\r
+ }\r
+\r
+ @Test\r
+ public void testGetClassifierDefinition() {\r
+ assertEquals(L4ClassifierDefinition.DEFINITION, Classifier.L4_CL.getClassifierDefinition());\r
+ }\r
+\r
+ @Test\r
+ public void testGetSupportedParameterValues() {\r
+ List<SupportedParameterValues> valuesList = Classifier.L4_CL.getSupportedParameterValues();\r
+ assertEquals(4, valuesList.size());\r
+\r
+ SupportedParameterValues values = valuesList.get(0);\r
+ assertNotNull(values);\r
+ assertEquals(L4ClassifierDefinition.SRC_PORT_PARAM, values.getParameterName().getValue());\r
+ ParameterType pt = values.getParameterType();\r
+ assertTrue(pt instanceof Int);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_Empty() throws Exception {\r
+ // TODO check: sending empty map is ok?\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap<String, ParameterValue>());\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_SinglePorts() throws Exception {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80);\r
+ params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort80);\r
+\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_PortRanges() throws Exception {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82);\r
+ params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange81_82);\r
+\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_DstPortNull() throws IllegalArgumentException {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80);\r
+ params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort_null);\r
+\r
+ thrown.expect(IllegalArgumentException.class);\r
+ thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED);\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_DstRangeNull() throws IllegalArgumentException {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80);\r
+ params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange_null);\r
+\r
+ thrown.expect(IllegalArgumentException.class);\r
+ thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED);\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_ParamConflict() throws IllegalArgumentException {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80);\r
+ params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82);\r
+\r
+ thrown.expect(IllegalArgumentException.class);\r
+ thrown.expectMessage(L4Classifier.EXC_MSG_MUT_EXCLUSIVE_PARAMS);\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_RangeInverted() throws IllegalArgumentException {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80);\r
+ params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange82_81);\r
+\r
+ thrown.expect(IllegalArgumentException.class);\r
+ thrown.expectMessage(L4Classifier.EXC_MSG_RANGE_VALUE_MISMATCH);\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(params);\r
+ }\r
+\r
+ @Test\r
+ public void testCheckPresenceOfRequiredParams_emptyParams() {\r
+\r
+ Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap<String, ParameterValue>());\r
+ }\r
+\r
+ @Test\r
+ public void testGetParent() {\r
+ assertEquals(Classifier.L4_CL.getParent(), Classifier.IP_PROTO_CL);\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
+\r
+public class ParamDerivatorTest {\r
+\r
+ private ParamDerivator derivator = ParamDerivator.ETHER_TYPE_DERIVATOR;\r
+\r
+ @Test\r
+ public void testDeriveParameter_noDerivation() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build();\r
+ params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv);\r
+\r
+ List<Map<String, ParameterValue>> result = derivator.deriveParameter(params);\r
+\r
+ assertEquals(1, result.size());\r
+ assertEquals(params, result.get(0));\r
+ }\r
+\r
+ @Test\r
+ public void testDeriveParameter_withDerivation() {\r
+ Map<String, ParameterValue> params = new HashMap<>();\r
+ ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build();\r
+ params.put("dummy key", pv);\r
+\r
+ List<Map<String, ParameterValue>> derivedParams = derivator.deriveParameter(params);\r
+\r
+ assertEquals(2, derivedParams.size());\r
+\r
+ Map<String, ParameterValue> ipv4Params = derivedParams.get(0);\r
+ Map<String, ParameterValue> ipv6Params = derivedParams.get(1);\r
+\r
+ assertTrue(ipv4Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM));\r
+ assertTrue(ipv6Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM));\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf;\r
+\r
+import static junit.framework.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;\r
+import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;\r
+import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;\r
+import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
+\r
+public class SubjectFeaturesTest {\r
+\r
+ @Test\r
+ public void testGetClassifier() {\r
+ assertEquals(Classifier.ETHER_TYPE_CL, SubjectFeatures.getClassifier(EtherTypeClassifierDefinition.ID));\r
+ assertEquals(Classifier.IP_PROTO_CL, SubjectFeatures.getClassifier(IpProtoClassifierDefinition.ID));\r
+ assertEquals(Classifier.L4_CL, SubjectFeatures.getClassifier(L4ClassifierDefinition.ID));\r
+ }\r
+\r
+ @Test\r
+ public void testGetActions() {\r
+ assertNotNull(SubjectFeatures.getActions());\r
+ }\r
+\r
+ @Test\r
+ public void testGetAction() {\r
+ Assert.assertEquals(AllowActionDefinition.DEFINITION,\r
+ SubjectFeatures.getAction(AllowActionDefinition.ID).getActionDef());\r
+ }\r
+\r
+}\r