Bug 5409 - setting orders in single rule contract
[groupbasedpolicy.git] / neutron-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / rule / SingleClassifierRuleTest.java
1 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5
6 import java.lang.reflect.Method;
7 import java.util.Arrays;
8
9 import org.junit.Test;
10 import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
11 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
12 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
13 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
14 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
15 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
16 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
17 import org.opendaylight.neutron.spi.NeutronSecurityRule;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.AllowActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCaseBuilder;
23 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;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
31
32 public class SingleClassifierRuleTest {
33
34     private ActionChoice allow = new AllowActionCaseBuilder().setAllow(new AllowBuilder().build()).build();
35     private ActionChoice sfc = new SfcActionCaseBuilder().setSfcChainName("orange_chain").build();
36     private SingleClassifierRule singleClsfRule;
37
38     @Test
39     public void testConstructorAndGetters() {
40         NeutronSecurityRule secRule = NeutronEntityFactory.securityRuleWithoutGroupIds(
41                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", NeutronUtils.IPv4,
42                 NeutronUtils.INGRESS, NeutronUtils.TCP, 8010, 8020);
43         final int ruleOrder = 1;
44         singleClsfRule = new SingleClassifierRule(secRule, ruleOrder, MappingUtils.ALLOW_ACTION_CHOICE);
45
46         ClassifierInstance clsfInstance = singleClsfRule.getClassifierInstance();
47         assertNotNull(clsfInstance);
48         assertEquals(clsfInstance, SecRuleEntityDecoder.getClassifierInstance(secRule));
49
50         ClassifierRef clsfRef = singleClsfRule.getClassifierRef();
51         assertNotNull(clsfRef);
52         assertEquals(clsfRef, SecRuleEntityDecoder.getClassifierRef(secRule));
53
54         Rule rule = singleClsfRule.getRule();
55         assertNotNull(rule);
56         PolicyAssert.assertRule(rule, secRule, ruleOrder + 180);
57     }
58
59     @Test
60     public final void updateOrderBasedOnEthTypeClassifTest() throws Exception {
61         ClassifierInstance ci = createClassifierInstance(EtherTypeClassifierDefinition.ID);
62         SingleClassifierRule.updateOrderBasedOn(ci, allow, 0);
63         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 350);
64         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 345);
65     }
66
67     @Test
68     public final void updateOrderBasedOnProtoClassifTest() throws Exception {
69         ClassifierInstance ci = createClassifierInstance(IpProtoClassifierDefinition.ID);
70         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 300);
71         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 295);
72     }
73
74     @Test
75     public final void updateOrderBasedOnL4ClassifTest() throws Exception {
76         ParameterValue sPort = createIntParameterValue(L4ClassifierDefinition.SRC_PORT_PARAM, Long.valueOf(4999));
77         ParameterValue dPort = createIntParameterValue(L4ClassifierDefinition.DST_PORT_PARAM, Long.valueOf(8080));
78         ParameterValue sMiniRange = createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 1000, 1000);
79         ParameterValue dMiniRange = createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 2000, 2000);
80         ParameterValue sPortRange = createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 3335, 3336);
81         ParameterValue dPortRange = createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 9998, 9999);
82         ClassifierInstance ci;
83         ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange);
84         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 180);
85         ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange);
86         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 180);
87         ci = createClassifierInstance(L4ClassifierDefinition.ID, sPort);
88         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
89         ci = createClassifierInstance(L4ClassifierDefinition.ID, sMiniRange);
90         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
91         ci = createClassifierInstance(L4ClassifierDefinition.ID, dPort);
92         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
93         ci = createClassifierInstance(L4ClassifierDefinition.ID, dMiniRange);
94         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 170);
95         ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dPortRange);
96         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 160);
97         ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dPort);
98         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
99         ci = createClassifierInstance(L4ClassifierDefinition.ID, sPortRange, dMiniRange);
100         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
101         ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange, sPort);
102         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
103         ci = createClassifierInstance(L4ClassifierDefinition.ID, dPortRange, sMiniRange);
104         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 150);
105     }
106
107     private ParameterValue createIntParameterValue(String paramName, Long value) {
108         return new ParameterValueBuilder().setName(new ParameterName(paramName)).setIntValue(value).build();
109     }
110
111     private ParameterValue createRangeParameterValue(String paramName, int min, int max) {
112         return new ParameterValueBuilder()
113             .setName(new ParameterName(paramName))
114             .setRangeValue(new RangeValueBuilder()
115                 .setMin(Long.valueOf(min))
116                 .setMax(Long.valueOf(max))
117                 .build())
118             .build();
119     }
120
121     private ClassifierInstance createClassifierInstance(ClassifierDefinitionId id, ParameterValue... pv) {
122         return new ClassifierInstanceBuilder()
123             .setClassifierDefinitionId(id)
124             .setParameterValue(Arrays.asList(pv))
125             .build();
126     }
127 }