Bug 5428: Ovsdb Termination Point is null issue
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / flow / PortSecurityTest.java
index 38103e02f6b8cb442e3ff60c88f1275677a6f56c..4fba089868c9cfbec01043fc6e1ce2d41f6797af 100755 (executable)
@@ -17,7 +17,9 @@ import java.util.Set;
 \r
 import org.junit.Before;\r
 import org.junit.Test;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager.FlowMap;\r
+import org.junit.runner.RunWith;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;\r
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;\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.Ipv4Address;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
@@ -34,35 +36,46 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
+import org.powermock.api.mockito.PowerMockito;\r
+import org.powermock.core.classloader.annotations.PrepareForTest;\r
+import org.powermock.modules.junit4.PowerMockRunner;\r
 \r
 import com.google.common.collect.ImmutableList;\r
 import com.google.common.collect.ImmutableSet;\r
 \r
 import static org.junit.Assert.*;\r
 \r
+@RunWith(PowerMockRunner.class)\r
+@PrepareForTest({PolicyManager.class})\r
 public class PortSecurityTest extends FlowTableTest {\r
-    protected static final Logger LOG =\r
-            LoggerFactory.getLogger(PortSecurityTest.class);\r
 \r
+    private Endpoint ep = localEP()\r
+            .setL3Address(ImmutableList.of(new L3AddressBuilder()\r
+            .setIpAddress(new IpAddress(new Ipv4Address("10.10.10.10")))\r
+            .build(),\r
+            new L3AddressBuilder()\r
+            .setIpAddress(new IpAddress(new Ipv6Address("2001:db8:85a3::8a2e:370:7334")))\r
+            .build()))\r
+        .build();\r
     @Override\r
     @Before\r
     public void setup() throws Exception {\r
+        PowerMockito.stub(PowerMockito.method(PolicyManager.class, "setSfcTableOffset")).toReturn(true);\r
+\r
         initCtx();\r
-        table = new PortSecurity(ctx);\r
+        table = new PortSecurity(ctx,ctx.getPolicyManager().getTABLEID_PORTSECURITY());\r
         super.setup();\r
     }\r
 \r
     @Test\r
     public void testDefaultDeny() throws Exception {\r
-        FlowMap fm = dosync(null);\r
+        OfWriter fm = dosync(null);\r
         int count = 0;\r
         Map<String, Flow> flowMap = new HashMap<>();\r
-        for (Flow f : fm.getTableForNode(nodeId, (short) 0).getFlow()) {\r
+        for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow()) {\r
             flowMap.put(f.getId().getValue(), f);\r
             Long etherType = null;\r
-            if (f.getMatch() != null) {\r
+            if (f.getMatch() != null && f.getMatch().getEthernetMatch() !=null) {\r
                 etherType = f.getMatch().getEthernetMatch().getEthernetType().getType().getValue();\r
             }\r
             if (f.getMatch() == null || FlowUtils.ARP.equals(etherType) || FlowUtils.IPv4.equals(etherType)\r
@@ -72,9 +85,9 @@ public class PortSecurityTest extends FlowTableTest {
             }\r
         }\r
         assertEquals(4, count);\r
-        int numberOfFlows = fm.getTableForNode(nodeId, (short) 0).getFlow().size();\r
+        int numberOfFlows = fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size();\r
         fm = dosync(flowMap);\r
-        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
     }\r
 \r
     @Test\r
@@ -88,25 +101,27 @@ public class PortSecurityTest extends FlowTableTest {
                                    .setTunnelType(TunnelTypeVxlan.class)\r
                                    .setNodeConnectorId(new NodeConnectorId("openflow:1:1"))\r
                                    .build())).build());\r
-        FlowMap fm = dosync(null);\r
-        assertNotEquals(0 ,fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        OfWriter fm = dosync(null);\r
+        assertNotEquals(0 ,fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
 \r
         int count = 0;\r
         HashMap<String, Flow> flowMap = new HashMap<>();\r
         Set<String> ncs = ImmutableSet.of("openflow:1:1", "openflow:1:2");\r
-        for (Flow f : fm.getTableForNode(nodeId, (short) 0).getFlow()) {\r
+        for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow()) {\r
             flowMap.put(f.getId().getValue(), f);\r
             if (f.getMatch() != null && f.getMatch().getInPort() != null &&\r
-                ncs.contains(f.getMatch().getInPort().getValue())) {\r
-                assertEquals(f.getInstructions(),\r
-                             FlowUtils.gotoTableInstructions((short)(table.getTableId()+1)));\r
+                (ncs.contains(f.getMatch().getInPort().getValue()))) {\r
+                assertTrue(f.getInstructions().equals(\r
+                             FlowUtils.gotoTableInstructions(ctx.getPolicyManager().getTABLEID_INGRESS_NAT()))\r
+                             || f.getInstructions().equals(\r
+                                     FlowUtils.gotoTableInstructions(ctx.getPolicyManager().getTABLEID_SOURCE_MAPPER())));\r
                 count += 1;\r
             }\r
         }\r
-        assertEquals(2, count);\r
-        int numberOfFlows = fm.getTableForNode(nodeId, (short) 0).getFlow().size();\r
+        assertEquals(1, count);\r
+        int numberOfFlows = fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size();\r
         fm = dosync(flowMap);\r
-        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
     }\r
 \r
     @Test\r
@@ -118,12 +133,12 @@ public class PortSecurityTest extends FlowTableTest {
 \r
         endpointManager.addEndpoint(ep);\r
 \r
-        FlowMap fm = dosync(null);\r
-        assertNotEquals(0 ,fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        OfWriter fm = dosync(null);\r
+        assertNotEquals(0 ,fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
 \r
         int count = 0;\r
         HashMap<String, Flow> flowMap = new HashMap<>();\r
-        for (Flow f : fm.getTableForNode(nodeId, (short) 0).getFlow()) {\r
+        for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow()) {\r
             flowMap.put(f.getId().getValue(), f);\r
             if (f.getMatch() != null &&\r
                 f.getMatch().getEthernetMatch() != null &&\r
@@ -134,35 +149,26 @@ public class PortSecurityTest extends FlowTableTest {
                 Objects.equals(ep.getAugmentation(OfOverlayContext.class).getNodeConnectorId(),\r
                                f.getMatch().getInPort())) {\r
                 count += 1;\r
-                assertEquals(FlowUtils.gotoTableInstructions((short)(table.getTableId()+1)),\r
+                assertEquals(FlowUtils.gotoTableInstructions(ctx.getPolicyManager().getTABLEID_SOURCE_MAPPER()),\r
                              f.getInstructions());\r
             }\r
         }\r
         assertEquals(2, count);\r
-        int numberOfFlows = fm.getTableForNode(nodeId, (short) 0).getFlow().size();\r
+        int numberOfFlows = fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size();\r
         fm = dosync(flowMap);\r
-        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
     }\r
 \r
     @Test\r
     public void testL3() throws Exception {\r
-        Endpoint ep = localEP()\r
-            .setL3Address(ImmutableList.of(new L3AddressBuilder()\r
-                .setIpAddress(new IpAddress(new Ipv4Address("10.10.10.10")))\r
-                .build(),\r
-                new L3AddressBuilder()\r
-                .setIpAddress(new IpAddress(new Ipv6Address("2001:db8:85a3::8a2e:370:7334")))\r
-                .build()))\r
-            .build();\r
-\r
         endpointManager.addEndpoint(ep);\r
 \r
-        FlowMap fm = dosync(null);\r
-        assertNotEquals(0 ,fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        OfWriter fm = dosync(null);\r
+        assertNotEquals(0 ,fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
 \r
         int count = 0;\r
         HashMap<String, Flow> flowMap = new HashMap<>();\r
-        for (Flow f : fm.getTableForNode(nodeId, (short) 0).getFlow()) {\r
+        for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow()) {\r
             flowMap.put(f.getId().getValue(), f);\r
             if (f.getMatch() != null &&\r
                 Objects.equals(ep.getAugmentation(OfOverlayContext.class).getNodeConnectorId(),\r
@@ -186,13 +192,27 @@ public class PortSecurityTest extends FlowTableTest {
                   Objects.equals(ep.getL3Address().get(1).getIpAddress().getIpv6Address().getValue(),\r
                                  ((Ipv6Match)f.getMatch().getLayer3Match()).getIpv6Source().getValue().split("/")[0])))) {\r
                 count += 1;\r
-                assertEquals(FlowUtils.gotoTableInstructions((short)(table.getTableId()+1)),\r
+                assertEquals(FlowUtils.gotoTableInstructions(ctx.getPolicyManager().getTABLEID_SOURCE_MAPPER()),\r
                              f.getInstructions());\r
             }\r
         }\r
         assertEquals(4, count);\r
-        int numberOfFlows = fm.getTableForNode(nodeId, (short) 0).getFlow().size();\r
+        int numberOfFlows = fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size();\r
         fm = dosync(flowMap);\r
-        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, (short) 0).getFlow().size());\r
+        assertEquals(numberOfFlows, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_PORTSECURITY()).getFlow().size());\r
+    }\r
+\r
+    @Test\r
+    public void testExternal() throws Exception {\r
+        endpointManager.addEndpoint(ep);\r
+        switchManager.addSwitch(\r
+                new NodeId("openflow:12"),\r
+                new NodeConnectorId("openflow:12:1"),\r
+                ImmutableSet.of(new NodeConnectorId("openflow:12:2")),\r
+                new OfOverlayNodeConfigBuilder().setTunnel(\r
+                        ImmutableList.of(new TunnelBuilder().setTunnelType(TunnelTypeVxlan.class)\r
+                            .setNodeConnectorId(new NodeConnectorId("openflow:12:1"))\r
+                            .build())).build());\r
+        ctx.addTenant(baseTenant().build());\r
     }\r
 }\r