Upgrade ietf-{inet,yang}-types to 2013-07-15
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / mapper / MapperUtilsTest.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;\r
2 \r
3 import com.google.common.base.Preconditions;\r
4 import com.google.common.collect.ImmutableList;\r
5 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
6 import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;\r
7 import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;\r
8 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;\r
9 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;\r
10 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;\r
11 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;\r
12 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;\r
13 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;\r
14 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;\r
15 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
16 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction;\r
17 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;\r
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\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.ContextId;\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.NetworkDomainId;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;\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.endpoint.fields.L3Address;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
75 \r
76 import java.util.ArrayList;\r
77 import java.util.List;\r
78 \r
79 public abstract class MapperUtilsTest {\r
80 \r
81     protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");\r
82     protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");\r
83     protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");\r
84     protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");\r
85     protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");\r
86     protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");\r
87     protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");\r
88     protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");\r
89     protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");\r
90     protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");\r
91     protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");\r
92     protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");\r
93     protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");\r
94     protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");\r
95     protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");\r
96     protected static final String IP_PREFIX_32 = "/32";\r
97     protected static final String IP_PREFIX_128 = "/128";\r
98     protected static final TenantId TENANT_ID = new TenantId("tenantId");\r
99     protected static final NodeId NODE_ID = new NodeId("nodeId");\r
100     protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");\r
101     protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");\r
102     protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");\r
103     protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");\r
104     protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");\r
105     protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");\r
106     protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");\r
107     protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");\r
108     protected static final ContractId CONTRACT_ID = new ContractId("contractId");\r
109     protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");\r
110     // Often used strings\r
111     protected static final String ALLOW = "allow";\r
112     protected static final String CHAIN = "chain";\r
113     protected static final String L2 = "L2";\r
114     protected static final String OPENFLOW = "openflow:";\r
115     protected static final String DROP_ALL = "dropAll";\r
116     protected static final String DROP = "drop";\r
117     protected static final String TCP_SRC = "tcp_src_80";\r
118     // Mock variables\r
119     protected Short tableId;\r
120     protected OfContext ctx;\r
121     protected OfWriter ofWriter;\r
122     protected SwitchManager switchManager;\r
123     protected PolicyManager policyManager;\r
124     protected EndpointManager endpointManager;\r
125     protected PolicyInfo policyInfo;\r
126     protected FlowTable table;\r
127 \r
128     protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,\r
129             Instructions instructions) {\r
130         return FlowUtils.base(tableId)\r
131             .setId(flowId)\r
132             .setPriority(priority)\r
133             .setMatch(match)\r
134             .setInstructions(instructions);\r
135     }\r
136 \r
137     protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {\r
138         Preconditions.checkNotNull(natIp);\r
139         Preconditions.checkNotNull(ip);\r
140         Preconditions.checkNotNull(mac);\r
141 \r
142         NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();\r
143 \r
144         EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
145             .setIpAddress(new IpAddress(ip))\r
146             .setMacAddress(new MacAddress(mac));\r
147         if (l2bd != null) {\r
148             endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
149         }\r
150         if (ip.equals(IPV4_0)) {\r
151             endpointL3Builder.setNetworkContainment(SUBNET_0);\r
152         } else if (ip.equals(IPV4_1)) {\r
153             endpointL3Builder.setNetworkContainment(SUBNET_1);\r
154         } else if (ip.equals(IPV4_2)) {\r
155             endpointL3Builder.setNetworkContainment(SUBNET_2);\r
156         }\r
157         return endpointL3Builder;\r
158     }\r
159 \r
160     protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {\r
161         Preconditions.checkNotNull(natIp);\r
162         Preconditions.checkNotNull(ip);\r
163         Preconditions.checkNotNull(mac);\r
164 \r
165         NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();\r
166 \r
167         EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
168             .setIpAddress(new IpAddress(ip))\r
169             .setMacAddress(new MacAddress(mac));\r
170         if (l2bd != null) {\r
171             endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
172         }\r
173         return endpointL3Builder;\r
174     }\r
175 \r
176     public SegmentationBuilder buildSegmentation() {\r
177         return new SegmentationBuilder().setSegmentationId(1);\r
178     }\r
179 \r
180     protected TenantBuilder buildTenant() {\r
181         Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
182             .setSubjectFeatureInstances(getSubjectFeatureInstances())\r
183             .build();\r
184 \r
185         return new TenantBuilder().setId(TENANT_ID)\r
186             .setForwardingContext(buildForwardingContext().build())\r
187             .setPolicy(policy);\r
188     }\r
189 \r
190     protected TenantBuilder buildTenant(ActionInstance actionInstance) {\r
191         Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
192             .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))\r
193             .build();\r
194 \r
195         return new TenantBuilder().setId(TENANT_ID)\r
196             .setForwardingContext(buildForwardingContext().build())\r
197             .setPolicy(policy);\r
198     }\r
199 \r
200     protected IndexedTenant getTestIndexedTenant() {\r
201         return new IndexedTenant(buildTenant().build());\r
202     }\r
203 \r
204     protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {\r
205         return new IndexedTenant(buildTenant(actionInstance).build());\r
206     }\r
207 \r
208     protected ForwardingContextBuilder buildForwardingContext() {\r
209         return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false))\r
210             .setL2BridgeDomain(getL2BridgeDomainList())\r
211             .setL3Context(getL3ContextList())\r
212             .setSubnet(getSubnetList());\r
213     }\r
214 \r
215     protected List<L3Context> getL3ContextList() {\r
216         L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();\r
217         return ImmutableList.of(l3Context);\r
218     }\r
219 \r
220     protected List<L2BridgeDomain> getL2BridgeDomainList() {\r
221         L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build();\r
222         return ImmutableList.of(l2BridgeDomain);\r
223     }\r
224 \r
225     protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {\r
226         L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID)\r
227             .setParent(new L2BridgeDomainId(L2BD_ID))\r
228             .addAugmentation(Segmentation.class, buildSegmentation().build());\r
229         if (external) {\r
230             l2FloodDomainBuilder.setId(L2_FD_ID_EXT);\r
231         }\r
232         return ImmutableList.of(l2FloodDomainBuilder.build());\r
233     }\r
234 \r
235     protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {\r
236         L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress))\r
237             .setL3Context(new L3ContextId(l3ContextId))\r
238             .build();\r
239         return ImmutableList.of(l3Address);\r
240     }\r
241 \r
242     protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {\r
243         L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build();\r
244         return ImmutableList.of(l3Address);\r
245     }\r
246 \r
247     protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {\r
248         return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);\r
249     }\r
250 \r
251     protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
252         EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID)\r
253             .setL3Address(getL3AddressList(l3IpAddress, L3C_ID))\r
254             .setMacAddress(new MacAddress(mac))\r
255             .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
256             .setEndpointGroup(ENDPOINT_GROUP_0)\r
257             .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
258         if (l3IpAddress.equals(IPV4_0)) {\r
259             endpointBuilder.setNetworkContainment(SUBNET_0);\r
260         } else if (l3IpAddress.equals(IPV4_1)) {\r
261             endpointBuilder.setNetworkContainment(SUBNET_1);\r
262         } else if (l3IpAddress.equals(IPV4_2)) {\r
263             endpointBuilder.setNetworkContainment(SUBNET_2);\r
264         }\r
265         return endpointBuilder;\r
266     }\r
267 \r
268     protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
269         return new EndpointBuilder().setTenant(TENANT_ID)\r
270             .setL3Address(getL3AddressList(l3IpAddress))\r
271             .setMacAddress(new MacAddress(mac))\r
272             .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
273             .setEndpointGroup(ENDPOINT_GROUP_0)\r
274             .setNetworkContainment(NET_DOMAIN_ID)\r
275             .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
276     }\r
277 \r
278     public List<EndpointGroup> getEndpointGroups() {\r
279         return ImmutableList.of(\r
280                 new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)\r
281                     .setNetworkDomain(SUBNET_0)\r
282                     .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
283                         .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
284                     .build(),\r
285                 new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)\r
286                     .setNetworkDomain(SUBNET_1)\r
287                     .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
288                         .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
289                     .build());\r
290     }\r
291 \r
292     protected SubjectFeatureInstances getSubjectFeatureInstances() {\r
293         SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
294         return builder.setClassifierInstance(ImmutableList.of(\r
295                 new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
296                     .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
297                     .setParameterValue(ImmutableList.of(\r
298                             new ParameterValueBuilder().setName(new ParameterName("destport"))\r
299                                 .setIntValue(80L) // Endpoint\r
300 \r
301                                 .build(),\r
302                             new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
303                     .build(),\r
304                 new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
305                     .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
306                     .setParameterValue(ImmutableList.of(\r
307                             new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
308                                 .setIntValue(80L)\r
309                                 .build(),\r
310                             new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
311                     .build(),\r
312                 new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
313                     .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
314                     .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
315                         .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
316                     .build()))\r
317             .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
318                 .setActionDefinitionId(new AllowAction().getId())\r
319                 .build()))\r
320             .build();\r
321     }\r
322 \r
323     protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) {\r
324         SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
325         return builder.setClassifierInstance(ImmutableList.of(\r
326                 new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
327                     .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
328                     .setParameterValue(ImmutableList.of(\r
329                             new ParameterValueBuilder().setName(new ParameterName("destport"))\r
330                                 .setIntValue(80L) // Endpoint\r
331 \r
332                                 .build(),\r
333                             new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
334                     .build(),\r
335                 new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
336                     .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
337                     .setParameterValue(ImmutableList.of(\r
338                             new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
339                                 .setIntValue(80L)\r
340                                 .build(),\r
341                             new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
342                     .build(),\r
343                 new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
344                     .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
345                     .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
346                         .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
347                     .build()))\r
348             .setActionInstance(ImmutableList.of(actionInstance))\r
349             .build();\r
350     }\r
351 \r
352     protected List<Subnet> getSubnetList() {\r
353         return ImmutableList.of(\r
354                 new SubnetBuilder().setId(SUBNET_0)\r
355                     .setParent(L2FD_ID)\r
356                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
357                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
358                     .build(),\r
359                 new SubnetBuilder().setId(SUBNET_1)\r
360                     .setParent(L2FD_ID)\r
361                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
362                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
363                     .build(),\r
364                 new SubnetBuilder().setId(SUBNET_2)\r
365                     .setParent(L2BD_ID)\r
366                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
367                     .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
368                     .build(),\r
369                 new SubnetBuilder().setId(SUBNET_EXT)\r
370                     .setParent(L2_FD_ID_EXT)\r
371                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))\r
372                     .build());\r
373     }\r
374 }\r