2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
\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
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;
\r
11 import java.util.ArrayList;
\r
12 import java.util.List;
\r
13 import java.util.Map;
\r
15 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.MockEndpointManager;
\r
16 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager;
\r
17 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
\r
18 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.MockSwitchManager;
\r
19 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;
\r
20 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;
\r
21 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.L4Classifier;
\r
22 import org.opendaylight.groupbasedpolicy.resolver.MockPolicyResolver;
\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
\r
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstancesBuilder;
\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;
\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;
\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;
\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;
\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;
\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
\r
69 import com.google.common.collect.ImmutableList;
\r
71 public class OfTableTest {
\r
74 MockEndpointManager endpointManager;
\r
75 MockPolicyResolver policyResolver;
\r
76 MockPolicyManager policyManager;
\r
77 MockSwitchManager switchManager;
\r
78 NodeId nodeId = new NodeId("openflow:1");
\r
79 NodeId remoteNodeId = new NodeId("openflow:2");
\r
80 NodeConnectorId nodeConnectorId =
\r
81 new NodeConnectorId(nodeId.getValue() + ":4");
\r
83 NodeConnectorId tunnelId =
\r
84 new NodeConnectorId(nodeId.getValue() + ":42");
\r
86 L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d");
\r
87 L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639");
\r
88 L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771");
\r
89 SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb");
\r
90 SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626");
\r
91 SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec");
\r
92 TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302");
\r
93 EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12");
\r
94 EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276");
\r
95 ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f");
\r
97 protected void initCtx() {
\r
98 endpointManager = new MockEndpointManager();
\r
99 policyResolver = new MockPolicyResolver();
\r
100 policyManager = new MockPolicyManager(policyResolver, endpointManager);
\r
101 switchManager = new MockSwitchManager();
\r
102 ctx = new OfContext(null,
\r
111 protected TenantBuilder baseTenant() {
\r
112 return new TenantBuilder()
\r
114 .setEndpointGroup(ImmutableList.of(new EndpointGroupBuilder()
\r
116 .setNetworkDomain(sub)
\r
117 .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()
\r
118 .setName(new SelectorName("cns1"))
\r
119 .setContract(ImmutableList.of(cid))
\r
122 new EndpointGroupBuilder()
\r
124 .setNetworkDomain(sub2)
\r
125 .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()
\r
126 .setName(new SelectorName("pns1"))
\r
127 .setContract(ImmutableList.of(cid))
\r
130 .setL3Context(ImmutableList.of(new L3ContextBuilder()
\r
133 .setL2BridgeDomain(ImmutableList.of(new L2BridgeDomainBuilder()
\r
137 .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder()
\r
141 .setSubnet(ImmutableList.of(new SubnetBuilder()
\r
144 .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))
\r
145 .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))
\r
147 new SubnetBuilder()
\r
150 .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))
\r
151 .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))
\r
153 new SubnetBuilder()
\r
156 .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))
\r
157 .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))
\r
159 .setSubjectFeatureInstances(new SubjectFeatureInstancesBuilder()
\r
160 .setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()
\r
161 .setName(new ClassifierName("tcp_dst_80"))
\r
162 .setClassifierDefinitionId(L4Classifier.DEFINITION.getId())
\r
163 .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
\r
164 .setName(new ParameterName("destport"))
\r
165 .setIntValue(Long.valueOf(80))
\r
167 new ParameterValueBuilder()
\r
168 .setName(new ParameterName("proto"))
\r
169 .setIntValue(Long.valueOf(6))
\r
172 new ClassifierInstanceBuilder()
\r
173 .setName(new ClassifierName("tcp_src_80"))
\r
174 .setClassifierDefinitionId(Classifier.L4_CL.getId())
\r
175 .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
\r
176 .setName(new ParameterName("sourceport"))
\r
177 .setIntValue(Long.valueOf(80))
\r
179 new ParameterValueBuilder()
\r
180 .setName(new ParameterName("proto"))
\r
181 .setIntValue(Long.valueOf(6))
\r
184 new ClassifierInstanceBuilder()
\r
185 .setName(new ClassifierName("ether_type"))
\r
186 .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())
\r
187 .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
\r
188 .setName(new ParameterName("ethertype"))
\r
189 .setIntValue(Long.valueOf(FlowUtils.IPv4))
\r
192 .setActionInstance(ImmutableList.of(new ActionInstanceBuilder()
\r
193 .setName(new ActionName("allow"))
\r
194 .setActionDefinitionId(new AllowAction().getId())
\r
199 protected ContractBuilder baseContract(List<Subject> subjects) {
\r
200 ContractBuilder contractBuilder = new ContractBuilder().setId(cid).setSubject(subjects);
\r
202 if (subjects == null) {
\r
203 return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))
\r
204 .setSubjectRefs(ImmutableList.<SubjectName>of(new SubjectName("s1")))
\r
207 List<SubjectName> subjectNames = new ArrayList<>();
\r
208 for (Subject subject : subjects) {
\r
209 subjectNames.add(subject.getName());
\r
211 return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))
\r
212 .setSubjectRefs(subjectNames)
\r
216 protected SubjectBuilder baseSubject(Direction direction) {
\r
217 return new SubjectBuilder()
\r
218 .setName(new SubjectName("s1"))
\r
219 .setRule(ImmutableList.of(new RuleBuilder()
\r
220 .setActionRef(ImmutableList.of(new ActionRefBuilder()
\r
221 .setName(new ActionName("allow"))
\r
223 .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder()
\r
224 .setName(new ClassifierName("tcp_dst_80"))
\r
225 .setDirection(direction)
\r
226 .setInstanceName(new ClassifierName("tcp_dst_80"))
\r
232 protected Subject createSubject(String name, List<Rule> rules){
\r
233 return new SubjectBuilder().setName(new SubjectName(name)).setRule(rules).build();
\r
236 protected List<ClassifierRef> createClassifierRefs(Map<String, Direction> refNamesAndDirections) {
\r
237 List<ClassifierRef> refs = new ArrayList<>();
\r
238 for (String refName : refNamesAndDirections.keySet()) {
\r
239 refs.add(new ClassifierRefBuilder().setName(new ClassifierName(refName))
\r
240 .setDirection(refNamesAndDirections.get(refName))
\r
241 .setInstanceName(new ClassifierName(refName))
\r
247 protected EndpointBuilder baseEP() {
\r
248 return new EndpointBuilder()
\r
251 .setEndpointGroup(eg)
\r
252 .setMacAddress(new MacAddress("00:00:00:00:00:01"));
\r
255 protected EndpointBuilder localEP() {
\r
256 OfOverlayContext ofc = new OfOverlayContextBuilder()
\r
258 .setNodeConnectorId(nodeConnectorId)
\r
261 .addAugmentation(OfOverlayContext.class, ofc);
\r
264 protected EndpointBuilder remoteEP(NodeId id) {
\r
265 OfOverlayContext ofc = new OfOverlayContextBuilder()
\r
267 .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5"))
\r
270 .setMacAddress(new MacAddress("00:00:00:00:00:02"))
\r
271 .addAugmentation(OfOverlayContext.class, ofc);
\r