Moving of classes between packages in groupbasedpolicy
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / flow / OfTableTest.java
1 /*\r
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;\r
10 \r
11 import java.util.ArrayList;\r
12 import java.util.List;\r
13 import java.util.Map;\r
14 \r
15 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
16 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockOfContext;\r
17 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager;\r
18 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.MockEndpointManager;\r
19 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.MockSwitchManager;\r
20 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
21 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstancesBuilder;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
67 \r
68 import com.google.common.collect.ImmutableList;\r
69 \r
70 public class OfTableTest {\r
71     MockOfContext ctx;\r
72 \r
73     MockEndpointManager endpointManager;\r
74     MockPolicyManager policyManager;\r
75     MockSwitchManager switchManager;\r
76     NodeId nodeId = new NodeId("openflow:1");\r
77     NodeId remoteNodeId = new NodeId("openflow:2");\r
78     NodeConnectorId nodeConnectorId =\r
79             new NodeConnectorId(nodeId.getValue() + ":4");\r
80 \r
81     NodeConnectorId tunnelId =\r
82             new NodeConnectorId(nodeId.getValue() + ":42");\r
83 \r
84     L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d");\r
85     L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639");\r
86     L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771");\r
87     SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb");\r
88     SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626");\r
89     SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec");\r
90     TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302");\r
91     EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12");\r
92     EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276");\r
93     ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f");\r
94 \r
95     protected void initCtx() {\r
96         endpointManager = new MockEndpointManager();\r
97         policyManager = new MockPolicyManager(endpointManager);\r
98         switchManager = new MockSwitchManager();\r
99         ctx = new MockOfContext(null,\r
100                              policyManager,\r
101                              switchManager,\r
102                              endpointManager,\r
103                              null);\r
104     }\r
105 \r
106     protected TenantBuilder baseTenant() {\r
107         return new TenantBuilder()\r
108             .setId(tid)\r
109             .setEndpointGroup(ImmutableList.of(new EndpointGroupBuilder()\r
110                     .setId(eg)\r
111                     .setNetworkDomain(sub)\r
112                     .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
113                         .setName(new SelectorName("cns1"))\r
114                         .setContract(ImmutableList.of(cid))\r
115                         .build()))\r
116                     .build(),\r
117                 new EndpointGroupBuilder()\r
118                     .setId(eg2)\r
119                     .setNetworkDomain(sub2)\r
120                     .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
121                         .setName(new SelectorName("pns1"))\r
122                         .setContract(ImmutableList.of(cid))\r
123                         .build()))\r
124                     .build()))\r
125             .setL3Context(ImmutableList.of(new L3ContextBuilder()\r
126                 .setId(l3c)\r
127                 .build()))\r
128             .setL2BridgeDomain(ImmutableList.of(new L2BridgeDomainBuilder()\r
129                 .setId(bd)\r
130                 .setParent(l3c)\r
131                 .build()))\r
132             .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder()\r
133                 .setId(fd)\r
134                 .setParent(bd)\r
135                 .build()))\r
136             .setSubnet(ImmutableList.of(new SubnetBuilder()\r
137                     .setId(sub2)\r
138                     .setParent(fd)\r
139                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
140                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
141                     .build(),\r
142                 new SubnetBuilder()\r
143                     .setId(sub)\r
144                     .setParent(fd)\r
145                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
146                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
147                     .build(),\r
148                 new SubnetBuilder()\r
149                     .setId(sub3)\r
150                     .setParent(bd)\r
151                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
152                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
153                     .build()))\r
154             .setSubjectFeatureInstances(new SubjectFeatureInstancesBuilder()\r
155                 .setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()\r
156                      .setName(new ClassifierName("tcp_dst_80"))\r
157                      .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
158                      .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
159                               .setName(new ParameterName("destport"))\r
160                               .setIntValue(Long.valueOf(80))\r
161                               .build(),\r
162                           new ParameterValueBuilder()\r
163                              .setName(new ParameterName("proto"))\r
164                              .setIntValue(Long.valueOf(6))\r
165                              .build()))\r
166                      .build(),\r
167                      new ClassifierInstanceBuilder()\r
168                      .setName(new ClassifierName("tcp_src_80"))\r
169                      .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
170                      .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
171                               .setName(new ParameterName("sourceport"))\r
172                               .setIntValue(Long.valueOf(80))\r
173                               .build(),\r
174                           new ParameterValueBuilder()\r
175                              .setName(new ParameterName("proto"))\r
176                              .setIntValue(Long.valueOf(6))\r
177                              .build()))\r
178                      .build(),\r
179                      new ClassifierInstanceBuilder()\r
180                      .setName(new ClassifierName("ether_type"))\r
181                      .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
182                      .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
183                               .setName(new ParameterName("ethertype"))\r
184                               .setIntValue(Long.valueOf(FlowUtils.IPv4))\r
185                               .build()))\r
186                      .build()))\r
187                 .setActionInstance(ImmutableList.of(new ActionInstanceBuilder()\r
188                     .setName(new ActionName("allow"))\r
189                     .setActionDefinitionId(new AllowAction().getId())\r
190                     .build()))\r
191                 .build());\r
192     }\r
193 \r
194     protected ContractBuilder baseContract(List<Subject> subjects) {\r
195         ContractBuilder contractBuilder = new ContractBuilder().setId(cid).setSubject(subjects);\r
196         // TODO refactor\r
197         if (subjects == null) {\r
198             return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))\r
199                 .setSubjectRefs(ImmutableList.<SubjectName>of(new SubjectName("s1")))\r
200                 .build()));\r
201         }\r
202         List<SubjectName> subjectNames = new ArrayList<>();\r
203         for (Subject subject : subjects) {\r
204             subjectNames.add(subject.getName());\r
205         }\r
206         return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))\r
207             .setSubjectRefs(subjectNames)\r
208             .build()));\r
209     }\r
210 \r
211     protected SubjectBuilder baseSubject(Direction direction) {\r
212         return new SubjectBuilder()\r
213             .setName(new SubjectName("s1"))\r
214             .setRule(ImmutableList.of(new RuleBuilder()\r
215                 .setActionRef(ImmutableList.of(new ActionRefBuilder()\r
216                     .setName(new ActionName("allow"))\r
217                     .build()))\r
218                 .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder()\r
219                     .setName(new ClassifierName("tcp_dst_80"))\r
220                     .setDirection(direction)\r
221                     .setInstanceName(new ClassifierName("tcp_dst_80"))\r
222                     .build()))\r
223                 .build()));\r
224     }\r
225 \r
226 \r
227     protected Subject createSubject(String name, List<Rule> rules){\r
228         return new SubjectBuilder().setName(new SubjectName(name)).setRule(rules).build();\r
229     }\r
230 \r
231     protected List<ClassifierRef> createClassifierRefs(Map<String, Direction> refNamesAndDirections) {\r
232         List<ClassifierRef> refs = new ArrayList<>();\r
233         for (String refName : refNamesAndDirections.keySet()) {\r
234             refs.add(new ClassifierRefBuilder().setName(new ClassifierName(refName))\r
235                 .setDirection(refNamesAndDirections.get(refName))\r
236                 .setInstanceName(new ClassifierName(refName))\r
237                 .build());\r
238         }\r
239         return refs;\r
240     }\r
241 \r
242     protected EndpointBuilder baseEP() {\r
243         return new EndpointBuilder()\r
244             .setL2Context(bd)\r
245             .setTenant(tid)\r
246             .setEndpointGroup(eg)\r
247             .setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
248     }\r
249 \r
250     protected EndpointBuilder localEP() {\r
251         OfOverlayContext ofc = new OfOverlayContextBuilder()\r
252             .setNodeId(nodeId)\r
253             .setNodeConnectorId(nodeConnectorId)\r
254             .build();\r
255         return baseEP()\r
256             .addAugmentation(OfOverlayContext.class, ofc);\r
257     }\r
258 \r
259     protected EndpointBuilder remoteEP(NodeId id) {\r
260         OfOverlayContext ofc = new OfOverlayContextBuilder()\r
261             .setNodeId(id)\r
262             .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5"))\r
263             .build();\r
264         return baseEP()\r
265             .setMacAddress(new MacAddress("00:00:00:00:00:02"))\r
266             .addAugmentation(OfOverlayContext.class, ofc);\r
267     }\r
268 \r
269 }\r