Separating renderers into features.
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / flow / OfTableTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;
10
11 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockEndpointManager;
12 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager;
13 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockSwitchManager;
14 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OfTable.OfTableCtx;
15 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.L4Classifier;
16 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.SubjectFeatures;
17 import org.opendaylight.groupbasedpolicy.resolver.MockPolicyResolver;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstancesBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
60
61 import com.google.common.collect.ImmutableList;
62
63 public class OfTableTest {
64     OfTableCtx ctx;
65
66     MockEndpointManager endpointManager;
67     MockPolicyResolver policyResolver;
68     MockPolicyManager policyManager;
69     MockSwitchManager switchManager;
70     
71     NodeId nodeId = new NodeId("openflow:1");
72     NodeId remoteNodeId = new NodeId("openflow:2");
73     NodeConnectorId nodeConnectorId = 
74             new NodeConnectorId(nodeId.getValue() + ":4");
75
76     NodeConnectorId tunnelId = 
77             new NodeConnectorId(nodeId.getValue() + ":42");
78
79     L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d");
80     L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639");
81     L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771");
82     SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb");
83     SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626");
84     SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec");
85     TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302");
86     EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12");
87     EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276");
88     ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f");
89     
90     protected void initCtx() {
91         endpointManager = new MockEndpointManager();
92         policyResolver = new MockPolicyResolver();
93         policyManager = new MockPolicyManager(policyResolver, endpointManager);
94         switchManager = new MockSwitchManager();
95         
96         ctx = new OfTableCtx(null, 
97                              null, 
98                              policyManager, 
99                              policyResolver, 
100                              switchManager, 
101                              endpointManager, 
102                              null);
103     }
104
105     protected TenantBuilder baseTenant() {
106         return baseTenant(null);
107     }
108
109     protected TenantBuilder baseTenant(Direction direction) {
110         return new TenantBuilder()
111             .setId(tid)
112             .setEndpointGroup(ImmutableList.of(new EndpointGroupBuilder()
113                     .setId(eg)
114                     .setNetworkDomain(sub)
115                     .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()
116                         .setName(new SelectorName("cns1"))
117                         .setContract(ImmutableList.of(cid))
118                         .build()))
119                     .build(),
120                 new EndpointGroupBuilder()
121                     .setId(eg2)
122                     .setNetworkDomain(sub2)
123                     .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()
124                         .setName(new SelectorName("pns1"))
125                         .setContract(ImmutableList.of(cid))
126                         .build()))
127                     .build()))
128             .setL3Context(ImmutableList.of(new L3ContextBuilder()
129                 .setId(l3c)
130                 .build()))
131             .setL2BridgeDomain(ImmutableList.of(new L2BridgeDomainBuilder()
132                 .setId(bd)
133                 .setParent(l3c)
134                 .build()))
135             .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder()
136                 .setId(fd)
137                 .setParent(bd)
138                 .build()))
139             .setSubnet(ImmutableList.of(new SubnetBuilder()
140                     .setId(sub2)
141                     .setParent(fd)
142                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.1/24")))
143                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))
144                     .build(),
145                 new SubnetBuilder()
146                     .setId(sub)
147                     .setParent(fd)
148                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.1/24")))
149                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))
150                     .build(),
151                 new SubnetBuilder()
152                     .setId(sub3)
153                     .setParent(bd)
154                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.1/24")))
155                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))
156                     .build()))
157             .setSubjectFeatureInstances(new SubjectFeatureInstancesBuilder()
158                 .setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()
159                      .setName(new ClassifierName("tcp_80"))
160                      .setClassifierDefinitionId(L4Classifier.ID)
161                      .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
162                               .setName(new ParameterName("destport"))
163                               .setIntValue(Long.valueOf(80))
164                               .build(),
165                           new ParameterValueBuilder()
166                              .setName(new ParameterName("type"))
167                              .setStringValue("TCP")
168                              .build()))
169                      .build()))
170                 .setActionInstance(ImmutableList.of(new ActionInstanceBuilder()
171                     .setName(new ActionName("allow"))
172                     .setActionDefinitionId(SubjectFeatures.ALLOW.getId())
173                     .build()))
174                 .build())
175             .setContract(ImmutableList.of(new ContractBuilder()
176                 .setId(cid)
177                 .setSubject(ImmutableList.of(baseSubject(direction).build()))
178                 .setClause(ImmutableList.of(new ClauseBuilder()
179                      .setName(new ClauseName("test"))
180                      .setSubjectRefs(ImmutableList.of(new SubjectName("s1")))
181                      .build()))
182                 .build()));
183     }
184     
185     protected SubjectBuilder baseSubject(Direction direction) {
186         return new SubjectBuilder()
187             .setName(new SubjectName("s1"))
188             .setRule(ImmutableList.of(new RuleBuilder()
189                 .setActionRef(ImmutableList.of(new ActionRefBuilder()
190                     .setName(new ActionName("allow"))
191                     .build()))
192                 .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder()
193                     .setName(new ClassifierName("tcp_80"))
194                     .setDirection(direction)
195                     .build()))
196                 .build()));
197     }
198     
199     protected EndpointBuilder baseEP() {
200         return new EndpointBuilder()
201             .setL2Context(bd)
202             .setTenant(tid)
203             .setEndpointGroup(eg)
204             .setMacAddress(new MacAddress("00:00:00:00:00:01"));
205     }
206
207     protected EndpointBuilder localEP() {
208         OfOverlayContext ofc = new OfOverlayContextBuilder()
209             .setNodeId(nodeId)
210             .setNodeConnectorId(nodeConnectorId)
211             .build();
212         return baseEP()
213             .addAugmentation(OfOverlayContext.class, ofc);
214     }
215
216     protected EndpointBuilder remoteEP(NodeId id) {
217         OfOverlayContext ofc = new OfOverlayContextBuilder()
218             .setNodeId(id)
219             .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5"))
220             .build();
221         return baseEP()
222             .setMacAddress(new MacAddress("00:00:00:00:00:02"))
223             .addAugmentation(OfOverlayContext.class, ofc);
224     }
225     
226 }