VLAN support for external networks
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / flow / OfTableTest.java
old mode 100644 (file)
new mode 100755 (executable)
index b17756d..a4cbd9a
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;
-
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockEndpointManager;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockSwitchManager;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.L4Classifier;
-import org.opendaylight.groupbasedpolicy.resolver.MockPolicyResolver;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L3ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubjectFeatureInstancesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.SubnetBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ActionInstanceBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.subject.feature.instances.ClassifierInstanceBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-
-import com.google.common.collect.ImmutableList;
-
-public class OfTableTest {
-    OfContext ctx;
-
-    MockEndpointManager endpointManager;
-    MockPolicyResolver policyResolver;
-    MockPolicyManager policyManager;
-    MockSwitchManager switchManager;
-
-    NodeId nodeId = new NodeId("openflow:1");
-    NodeId remoteNodeId = new NodeId("openflow:2");
-    NodeConnectorId nodeConnectorId =
-            new NodeConnectorId(nodeId.getValue() + ":4");
-
-    NodeConnectorId tunnelId =
-            new NodeConnectorId(nodeId.getValue() + ":42");
-
-    L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d");
-    L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639");
-    L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771");
-    SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb");
-    SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626");
-    SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec");
-    TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302");
-    EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12");
-    EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276");
-    ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f");
-
-    protected void initCtx() {
-        endpointManager = new MockEndpointManager();
-        policyResolver = new MockPolicyResolver();
-        policyManager = new MockPolicyManager(policyResolver, endpointManager);
-        switchManager = new MockSwitchManager();
-
-        ctx = new OfContext(null,
-                             null,
-                             policyManager,
-                             policyResolver,
-                             switchManager,
-                             endpointManager,
-                             null);
-    }
-
-    protected TenantBuilder baseTenant() {
-        return baseTenant(null);
-    }
-
-    protected TenantBuilder baseTenant(Direction direction) {
-        return new TenantBuilder()
-            .setId(tid)
-            .setEndpointGroup(ImmutableList.of(new EndpointGroupBuilder()
-                    .setId(eg)
-                    .setNetworkDomain(sub)
-                    .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()
-                        .setName(new SelectorName("cns1"))
-                        .setContract(ImmutableList.of(cid))
-                        .build()))
-                    .build(),
-                new EndpointGroupBuilder()
-                    .setId(eg2)
-                    .setNetworkDomain(sub2)
-                    .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()
-                        .setName(new SelectorName("pns1"))
-                        .setContract(ImmutableList.of(cid))
-                        .build()))
-                    .build()))
-            .setL3Context(ImmutableList.of(new L3ContextBuilder()
-                .setId(l3c)
-                .build()))
-            .setL2BridgeDomain(ImmutableList.of(new L2BridgeDomainBuilder()
-                .setId(bd)
-                .setParent(l3c)
-                .build()))
-            .setL2FloodDomain(ImmutableList.of(new L2FloodDomainBuilder()
-                .setId(fd)
-                .setParent(bd)
-                .build()))
-            .setSubnet(ImmutableList.of(new SubnetBuilder()
-                    .setId(sub2)
-                    .setParent(fd)
-                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.1/24")))
-                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))
-                    .build(),
-                new SubnetBuilder()
-                    .setId(sub)
-                    .setParent(fd)
-                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.1/24")))
-                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))
-                    .build(),
-                new SubnetBuilder()
-                    .setId(sub3)
-                    .setParent(bd)
-                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.1/24")))
-                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))
-                    .build()))
-            .setSubjectFeatureInstances(new SubjectFeatureInstancesBuilder()
-                .setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()
-                     .setName(new ClassifierName("tcp_80"))
-                     .setClassifierDefinitionId(L4Classifier.ID)
-                     .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
-                              .setName(new ParameterName("destport"))
-                              .setIntValue(Long.valueOf(80))
-                              .build(),
-                          new ParameterValueBuilder()
-                             .setName(new ParameterName("proto"))
-                             .setIntValue(Long.valueOf(6))
-                             .build()))
-                     .build()))
-                .setActionInstance(ImmutableList.of(new ActionInstanceBuilder()
-                    .setName(new ActionName("allow"))
-                    .setActionDefinitionId(new AllowAction().getId())
-                    .build()))
-                .build())
-            .setContract(ImmutableList.of(new ContractBuilder()
-                .setId(cid)
-                .setSubject(ImmutableList.of(baseSubject(direction).build()))
-                .setClause(ImmutableList.of(new ClauseBuilder()
-                     .setName(new ClauseName("test"))
-                     .setSubjectRefs(ImmutableList.of(new SubjectName("s1")))
-                     .build()))
-                .build()));
-    }
-
-    protected SubjectBuilder baseSubject(Direction direction) {
-        return new SubjectBuilder()
-            .setName(new SubjectName("s1"))
-            .setRule(ImmutableList.of(new RuleBuilder()
-                .setActionRef(ImmutableList.of(new ActionRefBuilder()
-                    .setName(new ActionName("allow"))
-                    .build()))
-                .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder()
-                    .setName(new ClassifierName("tcp_80"))
-                    .setDirection(direction)
-                    .build()))
-                .build()));
-    }
-    
-    protected EndpointBuilder baseEP() {
-        return new EndpointBuilder()
-            .setL2Context(bd)
-            .setTenant(tid)
-            .setEndpointGroup(eg)
-            .setMacAddress(new MacAddress("00:00:00:00:00:01"));
-    }
-
-    protected EndpointBuilder localEP() {
-        OfOverlayContext ofc = new OfOverlayContextBuilder()
-            .setNodeId(nodeId)
-            .setNodeConnectorId(nodeConnectorId)
-            .build();
-        return baseEP()
-            .addAugmentation(OfOverlayContext.class, ofc);
-    }
-
-    protected EndpointBuilder remoteEP(NodeId id) {
-        OfOverlayContext ofc = new OfOverlayContextBuilder()
-            .setNodeId(id)
-            .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5"))
-            .build();
-        return baseEP()
-            .setMacAddress(new MacAddress("00:00:00:00:00:02"))
-            .addAugmentation(OfOverlayContext.class, ofc);
-    }
-    
-}
+/*\r
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockOfContext;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.MockEndpointManager;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.MockSwitchManager;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
+\r
+import com.google.common.collect.ImmutableList;\r
+\r
+public class OfTableTest {\r
+    MockOfContext ctx;\r
+\r
+    MockEndpointManager endpointManager;\r
+    MockPolicyManager policyManager;\r
+    MockSwitchManager switchManager;\r
+    NodeId nodeId = new NodeId("openflow:1");\r
+    NodeId remoteNodeId = new NodeId("openflow:2");\r
+    NodeConnectorId nodeConnectorId =\r
+            new NodeConnectorId(nodeId.getValue() + ":4");\r
+\r
+    NodeConnectorId tunnelId =\r
+            new NodeConnectorId(nodeId.getValue() + ":42");\r
+\r
+    L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d");\r
+    L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639");\r
+    L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771");\r
+    L2FloodDomainId ext_fd = new L2FloodDomainId("d8024f7a-b83e-11e5-9912-ba0be0483c18");\r
+    SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb");\r
+    SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626");\r
+    SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec");\r
+    SubnetId ext_sub = new SubnetId("8da17ad9-3261-4dc9-bcff-928a2f73cce7");\r
+    TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302");\r
+    EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12");\r
+    EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276");\r
+    ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f");\r
+\r
+    protected void initCtx() {\r
+        endpointManager = new MockEndpointManager();\r
+        policyManager = new MockPolicyManager(endpointManager);\r
+        switchManager = new MockSwitchManager();\r
+        ctx = new MockOfContext(null,\r
+                             policyManager,\r
+                             switchManager,\r
+                             endpointManager,\r
+                             null);\r
+    }\r
+\r
+    protected TenantBuilder baseTenant() {\r
+        return new TenantBuilder().setId(tid)\r
+            .setPolicy(new PolicyBuilder()\r
+                .setEndpointGroup(ImmutableList.of(\r
+                        new EndpointGroupBuilder().setId(eg)\r
+                            .setNetworkDomain(sub)\r
+                            .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
+                                .setName(new SelectorName("cns1")).setContract(ImmutableList.of(cid)).build()))\r
+                            .build(),\r
+                        new EndpointGroupBuilder().setId(eg2)\r
+                            .setNetworkDomain(sub2)\r
+                            .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
+                                .setName(new SelectorName("pns1")).setContract(ImmutableList.of(cid)).build()))\r
+                            .build()))\r
+                .setSubjectFeatureInstances(\r
+                        new SubjectFeatureInstancesBuilder()\r
+                            .setClassifierInstance(\r
+                                    ImmutableList\r
+                                        .of(new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
+                                            .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
+                                            .setParameterValue(ImmutableList.of(\r
+                                                    new ParameterValueBuilder().setName(new ParameterName("destport"))\r
+                                                        .setIntValue(Long.valueOf(80))\r
+                                                        .build(),\r
+                                                    new ParameterValueBuilder().setName(new ParameterName("proto"))\r
+                                                        .setIntValue(Long.valueOf(6))\r
+                                                        .build()))\r
+                                            .build(), new ClassifierInstanceBuilder()\r
+                                                .setName(new ClassifierName("tcp_src_80"))\r
+                                                .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
+                                                .setParameterValue(ImmutableList.of(\r
+                                                        new ParameterValueBuilder()\r
+                                                            .setName(new ParameterName("sourceport"))\r
+                                                            .setIntValue(Long.valueOf(80))\r
+                                                            .build(),\r
+                                                        new ParameterValueBuilder().setName(new ParameterName("proto"))\r
+                                                            .setIntValue(Long.valueOf(6))\r
+                                                            .build()))\r
+                                                .build(),\r
+                                                new ClassifierInstanceBuilder()\r
+                                                    .setName(new ClassifierName("ether_type"))\r
+                                                    .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
+                                                    .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
+                                                        .setName(new ParameterName("ethertype"))\r
+                                                        .setIntValue(Long.valueOf(FlowUtils.IPv4))\r
+                                                        .build()))\r
+                                                    .build()))\r
+                            .setActionInstance(\r
+                                    ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
+                                        .setActionDefinitionId(new AllowAction().getId())\r
+                                        .build()))\r
+                            .build())\r
+                .build())\r
+            .setForwardingContext(\r
+                    new ForwardingContextBuilder()\r
+                        .setL3Context(ImmutableList.of(new L3ContextBuilder().setId(l3c).build()))\r
+                        .setL2BridgeDomain(\r
+                                ImmutableList.of(new L2BridgeDomainBuilder().setId(bd).setParent(l3c).build()))\r
+                        .setL2FloodDomain(ImmutableList.of(\r
+                                new L2FloodDomainBuilder()\r
+                                    .setId(fd)\r
+                                    .setParent(bd)\r
+                                    .addAugmentation(Segmentation.class,\r
+                                        new SegmentationBuilder()\r
+                                        .setSegmentationId(Integer.valueOf(216))\r
+                                        .build())\r
+                                    .build(),\r
+                                new L2FloodDomainBuilder()\r
+                                    .setId(ext_fd)\r
+                                    .addAugmentation(Segmentation.class,\r
+                                        new SegmentationBuilder()\r
+                                        .setSegmentationId(Integer.valueOf(2016))\r
+                                        .build())\r
+                                    .build()))\r
+                        .setSubnet(ImmutableList.of(\r
+                                new SubnetBuilder().setId(sub2)\r
+                                    .setParent(fd)\r
+                                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
+                                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
+                                    .build(),\r
+                                new SubnetBuilder().setId(sub)\r
+                                    .setParent(fd)\r
+                                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
+                                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
+                                    .build(),\r
+                                new SubnetBuilder().setId(sub3)\r
+                                    .setParent(bd)\r
+                                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
+                                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
+                                    .build(),\r
+                                new SubnetBuilder()\r
+                                    .setId(ext_sub)\r
+                                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))\r
+                                    .setParent(ext_fd)\r
+                                    .build()))\r
+                       .build());\r
+    }\r
+\r
+    protected ContractBuilder baseContract(List<Subject> subjects) {\r
+        ContractBuilder contractBuilder = new ContractBuilder().setId(cid).setSubject(subjects);\r
+        // TODO refactor\r
+        if (subjects == null) {\r
+            return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))\r
+                .setSubjectRefs(ImmutableList.<SubjectName>of(new SubjectName("s1")))\r
+                .build()));\r
+        }\r
+        List<SubjectName> subjectNames = new ArrayList<>();\r
+        for (Subject subject : subjects) {\r
+            subjectNames.add(subject.getName());\r
+        }\r
+        return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test"))\r
+            .setSubjectRefs(subjectNames)\r
+            .build()));\r
+    }\r
+\r
+    protected SubjectBuilder baseSubject(Direction direction) {\r
+        return new SubjectBuilder()\r
+            .setName(new SubjectName("s1"))\r
+            .setRule(ImmutableList.of(new RuleBuilder()\r
+                .setActionRef(ImmutableList.of(new ActionRefBuilder()\r
+                    .setName(new ActionName("allow"))\r
+                    .build()))\r
+                .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder()\r
+                    .setName(new ClassifierName("tcp_dst_80"))\r
+                    .setDirection(direction)\r
+                    .setInstanceName(new ClassifierName("tcp_dst_80"))\r
+                    .build()))\r
+                .build()));\r
+    }\r
+\r
+\r
+    protected Subject createSubject(String name, List<Rule> rules){\r
+        return new SubjectBuilder().setName(new SubjectName(name)).setRule(rules).build();\r
+    }\r
+\r
+    protected List<ClassifierRef> createClassifierRefs(Map<String, Direction> refNamesAndDirections) {\r
+        List<ClassifierRef> refs = new ArrayList<>();\r
+        for (String refName : refNamesAndDirections.keySet()) {\r
+            refs.add(new ClassifierRefBuilder().setName(new ClassifierName(refName))\r
+                .setDirection(refNamesAndDirections.get(refName))\r
+                .setInstanceName(new ClassifierName(refName))\r
+                .build());\r
+        }\r
+        return refs;\r
+    }\r
+\r
+    protected EndpointBuilder baseEP() {\r
+        return new EndpointBuilder()\r
+            .setL2Context(bd)\r
+            .setTenant(tid)\r
+            .setEndpointGroup(eg)\r
+            .setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
+    }\r
+\r
+    protected EndpointBuilder localEP() {\r
+        OfOverlayContext ofc = new OfOverlayContextBuilder()\r
+            .setNodeId(nodeId)\r
+            .setNodeConnectorId(nodeConnectorId)\r
+            .build();\r
+        return baseEP()\r
+            .addAugmentation(OfOverlayContext.class, ofc);\r
+    }\r
+\r
+    protected EndpointBuilder remoteEP(NodeId id) {\r
+        OfOverlayContext ofc = new OfOverlayContextBuilder()\r
+            .setNodeId(id)\r
+            .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5"))\r
+            .build();\r
+        return baseEP()\r
+            .setMacAddress(new MacAddress("00:00:00:00:00:02"))\r
+            .addAugmentation(OfOverlayContext.class, ofc);\r
+    }\r
+\r
+}\r