1 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
6 import java.util.Arrays;
9 import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
10 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
11 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
12 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
13 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
14 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.AllowActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.allow.action._case.AllowBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionIngress;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV4;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
33 public class SingleClassifierRuleTest {
35 private ActionChoice allow = new AllowActionCaseBuilder().setAllow(new AllowBuilder().build()).build();
36 private ActionChoice sfc = new SfcActionCaseBuilder().setSfcChainName("orange_chain").build();
37 private SingleClassifierRule singleClsfRule;
40 public void testConstructorAndGetters() {
41 SecurityRule secRule = NeutronEntityFactory.securityRuleWithoutGroupIds(
42 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", EthertypeV4.class,
43 DirectionIngress.class, ProtocolTcp.class, 8010, 8020);
44 final int ruleOrder = 1;
45 singleClsfRule = new SingleClassifierRule(secRule, ruleOrder, MappingUtils.ALLOW_ACTION_CHOICE);
47 ClassifierInstance clsfInstance = singleClsfRule.getClassifierInstance();
48 assertNotNull(clsfInstance);
49 assertEquals(clsfInstance, SecRuleEntityDecoder.getClassifierInstance(secRule));
51 ClassifierRef clsfRef = singleClsfRule.getClassifierRef();
52 assertNotNull(clsfRef);
53 assertEquals(clsfRef, SecRuleEntityDecoder.getClassifierRef(secRule));
55 Rule rule = singleClsfRule.getRule();
57 PolicyAssert.assertRule(rule, secRule, ruleOrder + 180);
61 public final void updateOrderBasedOnEthTypeClassifTest() throws Exception {
62 ClassifierInstance ci = createClassifierInstance(EtherTypeClassifierDefinition.ID);
63 SingleClassifierRule.updateOrderBasedOn(ci, allow, 0);
64 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 350);
65 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 345);
69 public final void updateOrderBasedOnProtoClassifTest() throws Exception {
70 ClassifierInstance ci = createClassifierInstance(IpProtoClassifierDefinition.ID);
71 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 300);
72 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 295);
76 public final void updateOrderBasedOnL4ClassifTest() throws Exception {
77 ParameterValue sPort = createIntParameterValue(L4ClassifierDefinition.SRC_PORT_PARAM, Long.valueOf(4999));
78 ParameterValue dPort = createIntParameterValue(L4ClassifierDefinition.DST_PORT_PARAM, Long.valueOf(8080));
79 ParameterValue sMiniRange = createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 1000, 1000);
80 ParameterValue dMiniRange = createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 2000, 2000);
81 ParameterValue sPortRange = createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 3335, 3336);
82 ParameterValue dPortRange = createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 9998, 9999);
83 ClassifierInstance ci;
84 ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange);
85 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 180);
86 ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange);
87 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 180);
88 ci = createClassifierInstance(L4ClassifierDefinition.ID, sPort);
89 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
90 ci = createClassifierInstance(L4ClassifierDefinition.ID, sMiniRange);
91 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
92 ci = createClassifierInstance(L4ClassifierDefinition.ID, dPort);
93 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
94 ci = createClassifierInstance(L4ClassifierDefinition.ID, dMiniRange);
95 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
96 ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dPortRange);
97 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 160);
98 ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dPort);
99 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
100 ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dMiniRange);
101 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
102 ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange, sPort);
103 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
104 ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange, sMiniRange);
105 assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
108 private ParameterValue createIntParameterValue(String paramName, Long value) {
109 return new ParameterValueBuilder().setName(new ParameterName(paramName)).setIntValue(value).build();
112 private ParameterValue createRangeParameterValue(String paramName, int min, int max) {
113 return new ParameterValueBuilder()
114 .setName(new ParameterName(paramName))
115 .setRangeValue(new RangeValueBuilder()
116 .setMin(Long.valueOf(min))
117 .setMax(Long.valueOf(max))
122 private ClassifierInstance createClassifierInstance(ClassifierDefinitionId id, ParameterValue... pv) {
123 return new ClassifierInstanceBuilder()
124 .setClassifierDefinitionId(id)
125 .setParameterValue(Arrays.asList(pv))