apply checkstyle check during build for neutron-mapper
[groupbasedpolicy.git] / neutron-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / rule / SingleClassifierRuleTest.java
1 /*
2  * Copyright (c) 2015 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12
13 import java.util.Arrays;
14
15 import org.junit.Test;
16 import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
17 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
18 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
19 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
20 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
21 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.AllowActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCaseBuilder;
27 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;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionIngress;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV4;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
39
40 public class SingleClassifierRuleTest {
41
42     private ActionChoice allow = new AllowActionCaseBuilder().setAllow(new AllowBuilder().build()).build();
43     private ActionChoice sfc = new SfcActionCaseBuilder().setSfcChainName("orange_chain").build();
44     private SingleClassifierRule singleClsfRule;
45
46     @Test
47     public void testConstructorAndGetters() {
48         SecurityRule secRule = NeutronEntityFactory.securityRuleWithoutGroupIds(
49                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", EthertypeV4.class,
50                 DirectionIngress.class, ProtocolTcp.class, 8010, 8020);
51         final int ruleOrder = 1;
52         singleClsfRule = new SingleClassifierRule(secRule, ruleOrder, MappingUtils.ALLOW_ACTION_CHOICE);
53
54         ClassifierInstance clsfInstance = singleClsfRule.getClassifierInstance();
55         assertNotNull(clsfInstance);
56         assertEquals(clsfInstance, SecRuleEntityDecoder.getClassifierInstance(secRule));
57
58         ClassifierRef clsfRef = singleClsfRule.getClassifierRef();
59         assertNotNull(clsfRef);
60         assertEquals(clsfRef, SecRuleEntityDecoder.getClassifierRef(secRule));
61
62         Rule rule = singleClsfRule.getRule();
63         assertNotNull(rule);
64         PolicyAssert.assertRule(rule, secRule, ruleOrder + 180);
65     }
66
67     @Test
68     public final void updateOrderBasedOnEthTypeClassifTest() throws Exception {
69         ClassifierInstance ci = createClassifierInstance(EtherTypeClassifierDefinition.ID);
70         SingleClassifierRule.updateOrderBasedOn(ci, allow, 0);
71         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 350);
72         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 345);
73     }
74
75     @Test
76     public final void updateOrderBasedOnProtoClassifTest() throws Exception {
77         ClassifierInstance ci = createClassifierInstance(IpProtoClassifierDefinition.ID);
78         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, allow, 0), 300);
79         assertEquals(SingleClassifierRule.updateOrderBasedOn(ci, sfc, 0), 295);
80     }
81
82     @Test
83     public final void updateOrderBasedOnL4ClassifTest() throws Exception {
84         final ParameterValue sourcePort = createIntParameterValue(L4ClassifierDefinition.SRC_PORT_PARAM, 4999L);
85         final ParameterValue destPort = createIntParameterValue(L4ClassifierDefinition.DST_PORT_PARAM, 8080L);
86         final ParameterValue
87             sourceMiniRange =
88             createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 1000, 1000);
89         final ParameterValue
90             destinationMiniRange =
91             createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 2000, 2000);
92         final ParameterValue
93             sourcePortRange =
94             createRangeParameterValue(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, 3335, 3336);
95         final ParameterValue
96             destinationPortRange =
97             createRangeParameterValue(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, 9998, 9999);
98
99         ClassifierInstance classifierInstance;
100         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, destinationPortRange);
101         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 180);
102         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourcePortRange);
103         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 180);
104         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourcePort);
105         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 170);
106         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourceMiniRange);
107         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 170);
108         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, destPort);
109         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 170);
110         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, destinationMiniRange);
111         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 170);
112         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourcePortRange, destinationPortRange);
113         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 160);
114         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourcePortRange, destPort);
115         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 150);
116         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, sourcePortRange, destinationMiniRange);
117         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 150);
118         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, destinationPortRange, sourcePort);
119         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 150);
120         classifierInstance = createClassifierInstance(L4ClassifierDefinition.ID, destinationPortRange, sourceMiniRange);
121         assertEquals(SingleClassifierRule.updateOrderBasedOn(classifierInstance, allow, 0), 150);
122     }
123
124     private ParameterValue createIntParameterValue(String paramName, Long value) {
125         return new ParameterValueBuilder().setName(new ParameterName(paramName)).setIntValue(value).build();
126     }
127
128     private ParameterValue createRangeParameterValue(String paramName, int min, int max) {
129         return new ParameterValueBuilder()
130             .setName(new ParameterName(paramName))
131             .setRangeValue(new RangeValueBuilder()
132                 .setMin(Long.valueOf(min))
133                 .setMax(Long.valueOf(max))
134                 .build())
135             .build();
136     }
137
138     private ClassifierInstance createClassifierInstance(ClassifierDefinitionId id, ParameterValue... pv) {
139         return new ClassifierInstanceBuilder()
140             .setClassifierDefinitionId(id)
141             .setParameterValue(Arrays.asList(pv))
142             .build();
143     }
144 }