Merge "Bug 4734 - netvirt/GatewayMacResolverService: null pinter exception"
[ovsdb.git] / openstack / net-virt-sfc / it / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / sfc / NetvirtSfcIT.java
index 1505dfde17e5b06f5a23064fbb467c58a98122a9..e0066baf3dbdb9ad5abc6589767dc8b736edce8d 100644 (file)
@@ -29,8 +29,10 @@ import java.io.IOException;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -46,10 +48,10 @@ import org.opendaylight.ovsdb.openstack.netvirt.sfc.standalone.openflow13.SfcCla
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.AclUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ClassifierUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ServiceFunctionChainUtils;
-import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ServiceFunctionPathUtils;
-import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.SfcUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ServiceFunctionForwarderUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ServiceFunctionPathUtils;
 import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ServiceFunctionUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.SfcUtils;
 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.FlowUtils;
@@ -57,6 +59,7 @@ import org.opendaylight.ovsdb.utils.mdsal.openflow.MatchUtils;
 import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.ovsdb.utils.southbound.utils.SouthboundUtils;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SftType;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.ServiceFunctions;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.ServiceFunctionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.functions.ServiceFunction;
@@ -75,7 +78,6 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev1407
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPathsBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
-import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sft.rev140701.Firewall;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.AccessLists;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.AccessListsBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.access.lists.AclBuilder;
@@ -111,7 +113,6 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
@@ -123,6 +124,8 @@ import org.ops4j.pax.exam.spi.reactors.PerClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Maps;
+
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
 public class NetvirtSfcIT extends AbstractMdsalTestBase {
@@ -140,6 +143,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     private static String addressStr;
     private static String portStr;
     private static String connectionType;
+    private static boolean ovsdb_wait = false;
     private static Southbound southbound;
     private static DataBroker dataBroker;
     public static final String CONTROLLER_IPADDRESS = "ovsdb.controller.address";
@@ -152,24 +156,29 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     public static final String INTEGRATION_BRIDGE_NAME = "br-int";
     private static final String NETVIRT_TOPOLOGY_ID = "netvirt:1";
     private static final String OVSDB_TRACE = "ovsdb.trace";
+    private static final String OVSDB_WAIT = "ovsdb.wait";
     private static final String SF1NAME = "firewall-72";
     private static final String SF2NAME = "dpi-72";
-    private static final String SF1IP = "127.0.0.1";//"192.168.50.70";//"192.168.120.31";
-    private static final String SF2IP = "192.168.120.32";
-    private static final String SF1DPLNAME = "1";
-    private static final String SF2DPLNAME = "2";
-    private static final String SFF1IP = "192.168.120.31";
-    private static final String SFF2IP = "192.168.120.32";
-    private static final String SFF1NAME = "SFF1";
-    private static final String SFF2NAME = "SFF2";
+    private static final String SF1IP = "10.2.1.1";//"192.168.50.70";//"192.168.120.31";
+    private static final String SF2IP = "10.2.1.2";
+    private static final String SF1DPLNAME = "sf1Dpl";
+    private static final String SF2DPLNAME = "sf2Dpl";
+    private static final String SFF1IP = "127.0.0.1"; //"192.168.1.129"
+    private static final String SFF2IP = "192.168.1.129";//"127.0.0.1";
+    private static final String SFF1NAME = "sff1";
+    private static final String SFF2NAME = "sff2";
     private static final String SFFDPL1NAME = "vxgpe";
     private static final String SFFDPL2NAME = "vxgpe";
-    private static final String SN1NAME = "OVSDB1";
-    private static final String SN2NAME = "OVSDB2";
+    private static final String SN1NAME = "ovsdb1";
+    private static final String SN2NAME = "ovsdb2";
     private static final String BRIDGE1NAME= "br-int";
     private static final String BRIDGE2NAME= "br-int";
     private static final String ACLNAME= "httpAcl";
-    private static final String SFCNAME = "SFC";
+    private static final String RULENAME= "httpRule";
+    private static final String SFCNAME = "sfc1";
+    private static final String SFCPATH = "SFC-Path";
+    private static final String SFCSF1NAME = "firewall-abstract";
+    private static final SftType SFCSF1TYPE = new SftType("firewall");
     private static final int GPEPORT = 6633;
 
     @Override
@@ -226,7 +235,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     public Option[] getPropertiesOptions() {
         return new Option[] {
                 propagateSystemProperties(SERVER_IPADDRESS, SERVER_PORT, CONNECTION_TYPE,
-                        CONTROLLER_IPADDRESS, OVSDB_TRACE),
+                        CONTROLLER_IPADDRESS, OVSDB_TRACE, OVSDB_WAIT),
         };
     }
 
@@ -246,6 +255,9 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
                 editConfigurationFilePut(ORG_OPS4J_PAX_LOGGING_CFG,
                         "log4j.logger.org.opendaylight.ovsdb.openstack.netvirt.sfc",
                         LogLevel.TRACE.name()),
+                //editConfigurationFilePut(ORG_OPS4J_PAX_LOGGING_CFG,
+                //        "log4j.logger.org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13",
+                //        LogLevel.TRACE.name()),
                 editConfigurationFilePut(ORG_OPS4J_PAX_LOGGING_CFG,
                         "log4j.logger.org.opendaylight.sfc",
                         LogLevel.TRACE.name()),
@@ -271,6 +283,10 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
             }
         }
         LOG.info("getProperties {}: {}", OVSDB_TRACE, props.getProperty(OVSDB_TRACE));
+        LOG.info("getProperties {}: {}", OVSDB_WAIT, props.getProperty(OVSDB_WAIT));
+        if (props.getProperty(OVSDB_WAIT).equals("true")) {
+            ovsdb_wait = true;
+        }
     }
 
     @Before
@@ -360,12 +376,13 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     }
 
     private AccessListsBuilder accessListsBuilder() {
+        String ruleName = RULENAME;
+        String sfcName = SFCNAME;
         MatchesBuilder matchesBuilder = aclUtils.matchesBuilder(new MatchesBuilder(), 80);
         LOG.info("Matches: {}", matchesBuilder.build());
-        //ActionsBuilder actionsBuilder = aclUtils.actionsBuilder(new ActionsBuilder(), Boolean.TRUE);
-        ActionsBuilder actionsBuilder = aclUtils.actionsBuilder(new ActionsBuilder(), SFCNAME);
+        ActionsBuilder actionsBuilder = aclUtils.actionsBuilder(new ActionsBuilder(), sfcName);
         AceBuilder accessListEntryBuilder =
-                aclUtils.aceBuilder(new AceBuilder(), "httpRule", matchesBuilder, actionsBuilder);
+                aclUtils.aceBuilder(new AceBuilder(), ruleName, matchesBuilder, actionsBuilder);
         AccessListEntriesBuilder accessListEntriesBuilder =
                 aclUtils.accessListEntriesBuidler(new AccessListEntriesBuilder(), accessListEntryBuilder);
         AclBuilder accessListBuilder =
@@ -434,20 +451,20 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         String sf1Ip = SF1IP;
         String sff1Ip = SF1IP;
         String sff1Name = SFF1NAME;
-        String sffDpl1Name = SFFDPL1NAME;
+        String sf1DplName = SF1DPLNAME;
         String sn1Name = SN1NAME;
         String bridge1Name= BRIDGE1NAME;
         String sf2Name = SF2NAME;
         String sf2Ip = SF2IP;
         String sff2Ip = SF2IP;
         String sff2Name = SFF2NAME;
-        String sffDpl2Name = SFFDPL2NAME;
+        String sf2DplName = SF2DPLNAME;
         String sn2Name = SN2NAME;
         String bridge2Name= BRIDGE2NAME;
         int port = GPEPORT;
 
         ServiceFunctionBuilder serviceFunctionBuilder =
-                serviceFunctionUtils.serviceFunctionBuilder(sf1Ip, port, sffDpl1Name, sff1Name, sf1Name);
+                serviceFunctionUtils.serviceFunctionBuilder(sf1Ip, port, sf1DplName, sff1Name, sf1Name);
         List<ServiceFunction> serviceFunctionList = serviceFunctionUtils.list(
                 new ArrayList<ServiceFunction>(), serviceFunctionBuilder);
 
@@ -466,14 +483,15 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     private ServiceFunctionForwardersBuilder serviceFunctionForwardersBuilder() {
         String sf1Name = SF1NAME;
         String sf1Ip = SF1IP;
-        String sff1Ip = SF1IP;
+        String sf1DplName = SF1DPLNAME;
+        String sff1Ip = SFF1IP;
         String sff1Name = SFF1NAME;
         String sffDpl1Name = SFFDPL1NAME;
         String sn1Name = SN1NAME;
         String bridge1Name= BRIDGE1NAME;
         String sf2Name = SF2NAME;
         String sf2Ip = SF2IP;
-        String sff2Ip = SF2IP;
+        String sff2Ip = SFF2IP;
         String sff2Name = SFF2NAME;
         String sffDpl2Name = SFFDPL2NAME;
         String sn2Name = SN2NAME;
@@ -483,7 +501,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
 
         ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder =
                 serviceFunctionForwarderUtils.serviceFunctionForwarderBuilder(
-                        sff1Name, sff1Ip, port, sffDpl1Name, sf1Name, sff1Ip, sn1Name, bridge1Name, Firewall.class);
+                        sff1Name, sff1Ip, port, sffDpl1Name, sf1Ip, sn1Name, bridge1Name, sf1Name, sf1DplName);
         List<ServiceFunctionForwarder>  serviceFunctionForwarderList = serviceFunctionForwarderUtils.list(
                 new ArrayList<ServiceFunctionForwarder>(), serviceFunctionForwarderBuilder);
 
@@ -501,12 +519,12 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     }
 
     private ServiceFunctionChainsBuilder serviceFunctionChainsBuilder() {
-        String sf1Name = "firewall-abstract1";
-        String sf2Name = "dpi-abstract1";
+        String sf1Name = SFCSF1NAME;
+        SftType sfType = SFCSF1TYPE;
         String sfcName = SFCNAME;
 
         SfcServiceFunctionBuilder sfcServiceFunctionBuilder = serviceFunctionChainUtils.sfcServiceFunctionBuilder(
-                new SfcServiceFunctionBuilder(), sf1Name, Firewall.class);
+                new SfcServiceFunctionBuilder(), sf1Name, sfType);
         List<SfcServiceFunction> sfcServiceFunctionList =
                 serviceFunctionChainUtils.list(new ArrayList<SfcServiceFunction>(), sfcServiceFunctionBuilder);
 
@@ -527,8 +545,8 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     }
 
     private ServiceFunctionPathsBuilder serviceFunctionPathsBuilder() {
-        String sfpName = "SFC-Path";
-        String sfcName = "SFC";
+        String sfpName = SFCPATH;
+        String sfcName = SFCNAME;
         short startingIndex = 255;
 
         ServiceFunctionPathBuilder serviceFunctionPathBuilder =
@@ -559,6 +577,20 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         assertNotNull("node is not connected", ovsdbNode);
 
         Thread.sleep(5000);
+        Node bridgeNode = southbound.getBridgeNode(ovsdbNode, bridgeName);
+        assertNotNull("bridge " + bridgeName + " was not found", bridgeNode);
+        long datapathId = southbound.getDataPathId(bridgeNode);
+
+        Map<String, String> externalIds = Maps.newHashMap();
+        externalIds.put("attached-mac", "f6:00:00:0f:00:01");
+        southboundUtils.addTerminationPoint(bridgeNode, SF1DPLNAME, "internal", null, externalIds);
+        southboundUtils.addTerminationPoint(bridgeNode, "vm1", "internal");
+        southboundUtils.addTerminationPoint(bridgeNode, "vm2", "internal");
+        Map<String, String> options = Maps.newHashMap();
+        options.put("key", "flow");
+        options.put("remote_ip", "192.168.120.32");
+        southboundUtils.addTerminationPoint(bridgeNode, "vx", "vxlan", options, null);
+        Thread.sleep(1000);
 
         testModelPut(serviceFunctionsBuilder(), ServiceFunctions.class);
         testModelPut(serviceFunctionForwardersBuilder(), ServiceFunctionForwarders.class);
@@ -572,14 +604,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
 
         Thread.sleep(10000);
 
-        Node bridgeNode = southbound.getBridgeNode(ovsdbNode, bridgeName);
-        assertNotNull("bridge " + bridgeName + " was not found", bridgeNode);
-        long datapathId = southbound.getDataPathId(bridgeNode);
-
-        ISfcClassifierService sfcClassifierService = (ISfcClassifierService) ServiceHelper.getGlobalInstance(ISfcClassifierService.class, this);
-        LOG.info("SfcClassifierService: {}", sfcClassifierService);
         readwait();
-        //sfcClassifierService.programIngressClassifier(datapathId);
 
         NodeBuilder nodeBuilder = FlowUtils.createNodeBuilder(datapathId);
         FlowBuilder flowBuilder = getSfcIngressClassifierFlowBuilder();
@@ -791,7 +816,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
 
     private FlowBuilder getSfcIngressClassifierFlowBuilder() {
         FlowBuilder flowBuilder = new FlowBuilder();
-        String flowId = "sfcClass_" + "httpRule";
+        String flowId = "sfcIngressClass_" + "httpRule";
         flowBuilder.setId(new FlowId(flowId));
         FlowKey key = new FlowKey(new FlowId(flowId));
         flowBuilder.setKey(key);
@@ -815,10 +840,13 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     }
 
     private void readwait() {
-        try {
-            System.in.read();
-        } catch (IOException e) {
-            e.printStackTrace();
+        if (ovsdb_wait) {
+            LOG.warn("Waiting, kill with ps -ef | grep java, kill xxx... ");
+            try {
+                System.in.read();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
         }
     }
 }