Fix fileEncoding violations for checkstyle
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / mapper / MapperUtilsTest.java
index 1f18edee21a3d310d6ce64f33d35d545fb10dde5..c6d50ef110c5bc889bfb3667007c0543307c9e02 100644 (file)
-/*\r
- * Copyright (c) 2016 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
-package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;\r
-\r
-import com.google.common.base.Preconditions;\r
-import com.google.common.collect.ImmutableList;\r
-import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
-import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;\r
-import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction;\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.rev130715.IpAddress;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\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.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.NetworkDomainId;\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.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.endpoint.fields.L3Address;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;\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.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.Policy;\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.L2BridgeDomain;\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.L3Context;\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.EndpointGroup;\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.SubjectFeatureInstances;\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.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.ActionInstance;\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 java.util.ArrayList;\r
-import java.util.List;\r
-\r
-public abstract class MapperUtilsTest {\r
-\r
-    protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");\r
-    protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");\r
-    protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");\r
-    protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");\r
-    protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");\r
-    protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");\r
-    protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");\r
-    protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");\r
-    protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");\r
-    protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");\r
-    protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");\r
-    protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");\r
-    protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");\r
-    protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");\r
-    protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");\r
-    protected static final String IP_PREFIX_32 = "/32";\r
-    protected static final String IP_PREFIX_128 = "/128";\r
-    protected static final TenantId TENANT_ID = new TenantId("tenantId");\r
-    protected static final NodeId NODE_ID = new NodeId("nodeId");\r
-    protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");\r
-    protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");\r
-    protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");\r
-    protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");\r
-    protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");\r
-    protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");\r
-    protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");\r
-    protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");\r
-    protected static final ContractId CONTRACT_ID = new ContractId("contractId");\r
-    protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");\r
-    // Often used strings\r
-    protected static final String ALLOW = "allow";\r
-    protected static final String CHAIN = "chain";\r
-    protected static final String L2 = "L2";\r
-    protected static final String OPENFLOW = "openflow:";\r
-    protected static final String DROP_ALL = "dropAll";\r
-    protected static final String DROP = "drop";\r
-    protected static final String TCP_SRC = "tcp_src_80";\r
-    // Mock variables\r
-    protected Short tableId;\r
-    protected OfContext ctx;\r
-    protected OfWriter ofWriter;\r
-    protected SwitchManager switchManager;\r
-    protected PolicyManager policyManager;\r
-    protected EndpointManager endpointManager;\r
-    protected PolicyInfo policyInfo;\r
-    protected FlowTable table;\r
-\r
-    protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,\r
-            Instructions instructions) {\r
-        return FlowUtils.base(tableId)\r
-            .setId(flowId)\r
-            .setPriority(priority)\r
-            .setMatch(match)\r
-            .setInstructions(instructions);\r
-    }\r
-\r
-    protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {\r
-        Preconditions.checkNotNull(natIp);\r
-        Preconditions.checkNotNull(ip);\r
-        Preconditions.checkNotNull(mac);\r
-\r
-        NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();\r
-\r
-        EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
-            .setIpAddress(new IpAddress(ip))\r
-            .setMacAddress(new MacAddress(mac));\r
-        if (l2bd != null) {\r
-            endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
-        }\r
-        if (ip.equals(IPV4_0)) {\r
-            endpointL3Builder.setNetworkContainment(SUBNET_0);\r
-        } else if (ip.equals(IPV4_1)) {\r
-            endpointL3Builder.setNetworkContainment(SUBNET_1);\r
-        } else if (ip.equals(IPV4_2)) {\r
-            endpointL3Builder.setNetworkContainment(SUBNET_2);\r
-        }\r
-        return endpointL3Builder;\r
-    }\r
-\r
-    protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {\r
-        Preconditions.checkNotNull(natIp);\r
-        Preconditions.checkNotNull(ip);\r
-        Preconditions.checkNotNull(mac);\r
-\r
-        NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();\r
-\r
-        EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
-            .setIpAddress(new IpAddress(ip))\r
-            .setMacAddress(new MacAddress(mac));\r
-        if (l2bd != null) {\r
-            endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
-        }\r
-        return endpointL3Builder;\r
-    }\r
-\r
-    public SegmentationBuilder buildSegmentation() {\r
-        return new SegmentationBuilder().setSegmentationId(1);\r
-    }\r
-\r
-    protected TenantBuilder buildTenant() {\r
-        Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
-            .setSubjectFeatureInstances(getSubjectFeatureInstances())\r
-            .build();\r
-\r
-        return new TenantBuilder().setId(TENANT_ID)\r
-            .setForwardingContext(buildForwardingContext().build())\r
-            .setPolicy(policy);\r
-    }\r
-\r
-    protected TenantBuilder buildTenant(ActionInstance actionInstance) {\r
-        Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
-            .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))\r
-            .build();\r
-\r
-        return new TenantBuilder().setId(TENANT_ID)\r
-            .setForwardingContext(buildForwardingContext().build())\r
-            .setPolicy(policy);\r
-    }\r
-\r
-    protected IndexedTenant getTestIndexedTenant() {\r
-        return new IndexedTenant(buildTenant().build());\r
-    }\r
-\r
-    protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {\r
-        return new IndexedTenant(buildTenant(actionInstance).build());\r
-    }\r
-\r
-    protected ForwardingContextBuilder buildForwardingContext() {\r
-        return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false))\r
-            .setL2BridgeDomain(getL2BridgeDomainList())\r
-            .setL3Context(getL3ContextList())\r
-            .setSubnet(getSubnetList());\r
-    }\r
-\r
-    protected List<L3Context> getL3ContextList() {\r
-        L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();\r
-        return ImmutableList.of(l3Context);\r
-    }\r
-\r
-    protected List<L2BridgeDomain> getL2BridgeDomainList() {\r
-        L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build();\r
-        return ImmutableList.of(l2BridgeDomain);\r
-    }\r
-\r
-    protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {\r
-        L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID)\r
-            .setParent(new L2BridgeDomainId(L2BD_ID))\r
-            .addAugmentation(Segmentation.class, buildSegmentation().build());\r
-        if (external) {\r
-            l2FloodDomainBuilder.setId(L2_FD_ID_EXT);\r
-        }\r
-        return ImmutableList.of(l2FloodDomainBuilder.build());\r
-    }\r
-\r
-    protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {\r
-        L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress))\r
-            .setL3Context(new L3ContextId(l3ContextId))\r
-            .build();\r
-        return ImmutableList.of(l3Address);\r
-    }\r
-\r
-    protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {\r
-        L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build();\r
-        return ImmutableList.of(l3Address);\r
-    }\r
-\r
-    protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {\r
-        return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);\r
-    }\r
-\r
-    protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
-        EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID)\r
-            .setL3Address(getL3AddressList(l3IpAddress, L3C_ID))\r
-            .setMacAddress(new MacAddress(mac))\r
-            .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
-            .setEndpointGroup(ENDPOINT_GROUP_0)\r
-            .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
-        if (l3IpAddress.equals(IPV4_0)) {\r
-            endpointBuilder.setNetworkContainment(SUBNET_0);\r
-        } else if (l3IpAddress.equals(IPV4_1)) {\r
-            endpointBuilder.setNetworkContainment(SUBNET_1);\r
-        } else if (l3IpAddress.equals(IPV4_2)) {\r
-            endpointBuilder.setNetworkContainment(SUBNET_2);\r
-        }\r
-        return endpointBuilder;\r
-    }\r
-\r
-    protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
-        return new EndpointBuilder().setTenant(TENANT_ID)\r
-            .setL3Address(getL3AddressList(l3IpAddress))\r
-            .setMacAddress(new MacAddress(mac))\r
-            .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
-            .setEndpointGroup(ENDPOINT_GROUP_0)\r
-            .setNetworkContainment(NET_DOMAIN_ID)\r
-            .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
-    }\r
-\r
-    public List<EndpointGroup> getEndpointGroups() {\r
-        return ImmutableList.of(\r
-                new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)\r
-                    .setNetworkDomain(SUBNET_0)\r
-                    .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
-                        .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
-                    .build(),\r
-                new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)\r
-                    .setNetworkDomain(SUBNET_1)\r
-                    .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
-                        .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
-                    .build());\r
-    }\r
-\r
-    protected SubjectFeatureInstances getSubjectFeatureInstances() {\r
-        SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
-        return builder.setClassifierInstance(ImmutableList.of(\r
-                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(80L) // Endpoint\r
-\r
-                                .build(),\r
-                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
-                    .build(),\r
-                new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
-                    .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
-                    .setParameterValue(ImmutableList.of(\r
-                            new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
-                                .setIntValue(80L)\r
-                                .build(),\r
-                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
-                    .build(),\r
-                new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
-                    .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
-                    .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
-                        .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
-                    .build()))\r
-            .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
-                .setActionDefinitionId(new AllowAction().getId())\r
-                .build()))\r
-            .build();\r
-    }\r
-\r
-    protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) {\r
-        SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
-        return builder.setClassifierInstance(ImmutableList.of(\r
-                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(80L) // Endpoint\r
-\r
-                                .build(),\r
-                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
-                    .build(),\r
-                new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
-                    .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
-                    .setParameterValue(ImmutableList.of(\r
-                            new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
-                                .setIntValue(80L)\r
-                                .build(),\r
-                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
-                    .build(),\r
-                new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
-                    .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
-                    .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
-                        .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
-                    .build()))\r
-            .setActionInstance(ImmutableList.of(actionInstance))\r
-            .build();\r
-    }\r
-\r
-    protected List<Subnet> getSubnetList() {\r
-        return ImmutableList.of(\r
-                new SubnetBuilder().setId(SUBNET_0)\r
-                    .setParent(L2FD_ID)\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(SUBNET_1)\r
-                    .setParent(L2FD_ID)\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(SUBNET_2)\r
-                    .setParent(L2BD_ID)\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().setId(SUBNET_EXT)\r
-                    .setParent(L2_FD_ID_EXT)\r
-                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))\r
-                    .build());\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2016 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.mapper;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
+import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;
+import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+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.ContextId;
+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.NetworkDomainId;
+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.SubnetId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;
+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.ofoverlay.rev140528.Segmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;
+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.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.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 java.util.ArrayList;
+import java.util.List;
+
+public abstract class MapperUtilsTest {
+
+    protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");
+    protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");
+    protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");
+    protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");
+    protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");
+    protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");
+    protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");
+    protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");
+    protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");
+    protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");
+    protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");
+    protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");
+    protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");
+    protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");
+    protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");
+    protected static final String IP_PREFIX_32 = "/32";
+    protected static final String IP_PREFIX_128 = "/128";
+    protected static final TenantId TENANT_ID = new TenantId("tenantId");
+    protected static final NodeId NODE_ID = new NodeId("nodeId");
+    protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");
+    protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");
+    protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");
+    protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");
+    protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");
+    protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");
+    protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");
+    protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");
+    protected static final ContractId CONTRACT_ID = new ContractId("contractId");
+    protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");
+    // Often used strings
+    protected static final String ALLOW = "allow";
+    protected static final String CHAIN = "chain";
+    protected static final String L2 = "L2";
+    protected static final String OPENFLOW = "openflow:";
+    protected static final String DROP_ALL = "dropAll";
+    protected static final String DROP = "drop";
+    protected static final String TCP_SRC = "tcp_src_80";
+    // Mock variables
+    protected Short tableId;
+    protected OfContext ctx;
+    protected OfWriter ofWriter;
+    protected SwitchManager switchManager;
+    protected PolicyManager policyManager;
+    protected EndpointManager endpointManager;
+    protected PolicyInfo policyInfo;
+    protected FlowTable table;
+
+    protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,
+            Instructions instructions) {
+        return FlowUtils.base(tableId)
+            .setId(flowId)
+            .setPriority(priority)
+            .setMatch(match)
+            .setInstructions(instructions);
+    }
+
+    protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {
+        Preconditions.checkNotNull(natIp);
+        Preconditions.checkNotNull(ip);
+        Preconditions.checkNotNull(mac);
+
+        NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();
+
+        EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)
+            .setIpAddress(new IpAddress(ip))
+            .setMacAddress(new MacAddress(mac));
+        if (l2bd != null) {
+            endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));
+        }
+        if (ip.equals(IPV4_0)) {
+            endpointL3Builder.setNetworkContainment(SUBNET_0);
+        } else if (ip.equals(IPV4_1)) {
+            endpointL3Builder.setNetworkContainment(SUBNET_1);
+        } else if (ip.equals(IPV4_2)) {
+            endpointL3Builder.setNetworkContainment(SUBNET_2);
+        }
+        return endpointL3Builder;
+    }
+
+    protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {
+        Preconditions.checkNotNull(natIp);
+        Preconditions.checkNotNull(ip);
+        Preconditions.checkNotNull(mac);
+
+        NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();
+
+        EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)
+            .setIpAddress(new IpAddress(ip))
+            .setMacAddress(new MacAddress(mac));
+        if (l2bd != null) {
+            endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));
+        }
+        return endpointL3Builder;
+    }
+
+    public SegmentationBuilder buildSegmentation() {
+        return new SegmentationBuilder().setSegmentationId(1);
+    }
+
+    protected TenantBuilder buildTenant() {
+        Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
+            .setSubjectFeatureInstances(getSubjectFeatureInstances())
+            .build();
+
+        return new TenantBuilder().setId(TENANT_ID)
+            .setForwardingContext(buildForwardingContext().build())
+            .setPolicy(policy);
+    }
+
+    protected TenantBuilder buildTenant(ActionInstance actionInstance) {
+        Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
+            .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))
+            .build();
+
+        return new TenantBuilder().setId(TENANT_ID)
+            .setForwardingContext(buildForwardingContext().build())
+            .setPolicy(policy);
+    }
+
+    protected IndexedTenant getTestIndexedTenant() {
+        return new IndexedTenant(buildTenant().build());
+    }
+
+    protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {
+        return new IndexedTenant(buildTenant(actionInstance).build());
+    }
+
+    protected ForwardingContextBuilder buildForwardingContext() {
+        return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false))
+            .setL2BridgeDomain(getL2BridgeDomainList())
+            .setL3Context(getL3ContextList())
+            .setSubnet(getSubnetList());
+    }
+
+    protected List<L3Context> getL3ContextList() {
+        L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();
+        return ImmutableList.of(l3Context);
+    }
+
+    protected List<L2BridgeDomain> getL2BridgeDomainList() {
+        L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build();
+        return ImmutableList.of(l2BridgeDomain);
+    }
+
+    protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {
+        L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID)
+            .setParent(new L2BridgeDomainId(L2BD_ID))
+            .addAugmentation(Segmentation.class, buildSegmentation().build());
+        if (external) {
+            l2FloodDomainBuilder.setId(L2_FD_ID_EXT);
+        }
+        return ImmutableList.of(l2FloodDomainBuilder.build());
+    }
+
+    protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {
+        L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress))
+            .setL3Context(new L3ContextId(l3ContextId))
+            .build();
+        return ImmutableList.of(l3Address);
+    }
+
+    protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {
+        L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build();
+        return ImmutableList.of(l3Address);
+    }
+
+    protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {
+        return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);
+    }
+
+    protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {
+        EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID)
+            .setL3Address(getL3AddressList(l3IpAddress, L3C_ID))
+            .setMacAddress(new MacAddress(mac))
+            .setL2Context(new L2BridgeDomainId(L2BD_ID))
+            .setEndpointGroup(ENDPOINT_GROUP_0)
+            .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());
+        if (l3IpAddress.equals(IPV4_0)) {
+            endpointBuilder.setNetworkContainment(SUBNET_0);
+        } else if (l3IpAddress.equals(IPV4_1)) {
+            endpointBuilder.setNetworkContainment(SUBNET_1);
+        } else if (l3IpAddress.equals(IPV4_2)) {
+            endpointBuilder.setNetworkContainment(SUBNET_2);
+        }
+        return endpointBuilder;
+    }
+
+    protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {
+        return new EndpointBuilder().setTenant(TENANT_ID)
+            .setL3Address(getL3AddressList(l3IpAddress))
+            .setMacAddress(new MacAddress(mac))
+            .setL2Context(new L2BridgeDomainId(L2BD_ID))
+            .setEndpointGroup(ENDPOINT_GROUP_0)
+            .setNetworkContainment(NET_DOMAIN_ID)
+            .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());
+    }
+
+    public List<EndpointGroup> getEndpointGroups() {
+        return ImmutableList.of(
+                new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)
+                    .setNetworkDomain(SUBNET_0)
+                    .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()
+                        .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))
+                    .build(),
+                new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)
+                    .setNetworkDomain(SUBNET_1)
+                    .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()
+                        .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))
+                    .build());
+    }
+
+    protected SubjectFeatureInstances getSubjectFeatureInstances() {
+        SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();
+        return builder.setClassifierInstance(ImmutableList.of(
+                new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))
+                    .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
+                    .setParameterValue(ImmutableList.of(
+                            new ParameterValueBuilder().setName(new ParameterName("destport"))
+                                .setIntValue(80L) // Endpoint
+
+                                .build(),
+                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+                    .build(),
+                new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))
+                    .setClassifierDefinitionId(Classifier.L4_CL.getId())
+                    .setParameterValue(ImmutableList.of(
+                            new ParameterValueBuilder().setName(new ParameterName("sourceport"))
+                                .setIntValue(80L)
+                                .build(),
+                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+                    .build(),
+                new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))
+                    .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())
+                    .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
+                        .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))
+                    .build()))
+            .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))
+                .setActionDefinitionId(new AllowAction().getId())
+                .build()))
+            .build();
+    }
+
+    protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) {
+        SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();
+        return builder.setClassifierInstance(ImmutableList.of(
+                new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))
+                    .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
+                    .setParameterValue(ImmutableList.of(
+                            new ParameterValueBuilder().setName(new ParameterName("destport"))
+                                .setIntValue(80L) // Endpoint
+
+                                .build(),
+                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+                    .build(),
+                new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))
+                    .setClassifierDefinitionId(Classifier.L4_CL.getId())
+                    .setParameterValue(ImmutableList.of(
+                            new ParameterValueBuilder().setName(new ParameterName("sourceport"))
+                                .setIntValue(80L)
+                                .build(),
+                            new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+                    .build(),
+                new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))
+                    .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())
+                    .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
+                        .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))
+                    .build()))
+            .setActionInstance(ImmutableList.of(actionInstance))
+            .build();
+    }
+
+    protected List<Subnet> getSubnetList() {
+        return ImmutableList.of(
+                new SubnetBuilder().setId(SUBNET_0)
+                    .setParent(L2FD_ID)
+                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))
+                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))
+                    .build(),
+                new SubnetBuilder().setId(SUBNET_1)
+                    .setParent(L2FD_ID)
+                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))
+                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))
+                    .build(),
+                new SubnetBuilder().setId(SUBNET_2)
+                    .setParent(L2BD_ID)
+                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))
+                    .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))
+                    .build(),
+                new SubnetBuilder().setId(SUBNET_EXT)
+                    .setParent(L2_FD_ID_EXT)
+                    .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))
+                    .build());
+    }
+}