Merge "Initial tests for Transactional Maps"
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 0bdb9b0..2b37186 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -2225,7 +2225,7 @@
         #if deviceCount:
         #    passed = "devices=" + str(deviceCount) + "," not in summaryStr
 
-
+        passed = False
         if "SCC(s)=1," in summaryStr:
             passed = True
             print("Summary is verifed")
diff --git a/TestON/drivers/common/cli/ovsdbdriver.py b/TestON/drivers/common/cli/ovsdbdriver.py
new file mode 100644
index 0000000..bd55c91
--- /dev/null
+++ b/TestON/drivers/common/cli/ovsdbdriver.py
@@ -0,0 +1,217 @@
+#!/usr/bin/env python
+
+"""
+drivers for ovsdb commands.
+
+zhanghaoyu7@huawei.com
+AUG 10 2015
+"""
+import pexpect
+import re
+import json
+import types
+import time
+import os
+from drivers.common.clidriver import CLI
+
+
+class OvsdbDriver( CLI ):
+
+    def __init__( self ):
+        """
+        Initialize client
+        """
+        self.name = None
+        self.home = None
+        self.handle = None
+        super( CLI, self ).__init__()
+
+    def connect( self, **connectargs ):
+        try:
+            for key in connectargs:
+                vars( self)[ key ] = connectargs[ key ]
+
+            self.name = self.options[ 'name' ]
+            if os.getenv( str( self.ip_address ) ) != None:
+                self.ip_address = os.getenv(str ( self.ip_address ) )
+            else:
+                main.log.info( self.name + ": Trying to connect to " +
+                               self.ip_address )
+            self.handle = super( OvsdbDriver, self ).connect(
+                    user_name=self.user_name,
+                    ip_address=self.ip_address,
+                    port=self.port,
+                    pwd=self.pwd)
+
+            if self.handle:
+                return self.handle
+                main.log.onfo( "Connection successful to the ovsdb node " +
+                                self.name )
+            else:
+                main.log.error( "Connection failed to the ovsdb node " +
+                                self.name )
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanup()
+            main.exit()
+
+    def disconnect( self ):
+        try:
+            self.handle.sendline( "exit" )
+            self.handle.expect( "closed" )
+            response = main.TRUE
+        except pexpect.ExceptionPexpect:
+            response = main.FALSE
+            main.log.exception( self.name + ": Uncaught exception!" )
+        return response
+
+    def setManager( self, ip, port, delaytime="5" ):
+        command= "sudo ovs-vsctl set-manager tcp:" + str( ip ) + ":" + str( port )
+        try:
+            handle = self.execute(
+                cmd=command,
+                timeout=10 )
+            if re.search( "Error", handle ):
+                main.log.error( "Error in set ovsdb manager" )
+                main.log.error( handle )
+                return main.FALSE
+            else:
+                main.log.info( "Ovsdb manager " + str( ip ) + " set" )
+                #delay time  for ovsdb connection create
+                main.log.info( "Wait " + str( delaytime ) + " seconds for ovsdb connection create" )
+                time.sleep( int( delaytime ) )
+                return main.TRUE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+
+    def delManager( self, delaytime="5" ):
+        command= "sudo ovs-vsctl del-manager"
+        try:
+            handle = self.execute(
+                cmd=command,
+                timeout=10 )
+            if re.search( "Error", handle ):
+                main.log.error( "Error in delete ovsdb manager" )
+                main.log.error( handle )
+                return main.FALSE
+            else:
+                main.log.info( "Ovsdb manager delete" )
+                #delay time  for ovsdb connection delete
+                main.log.info( "Wait " + str( delaytime ) + " seconds for ovsdb connection delete" )
+                time.sleep( int( delaytime ) )
+                return main.TRUE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+
+    def getManager( self ):
+        command= "sudo ovs-vsctl get-manager"
+        try:
+            response = self.execute(
+                cmd=command,
+                timeout=10 )
+            return response
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+
+    def listBr( self ):
+        """
+        Parameters:
+            none
+        Return:
+            The output of the command from the linux
+            or main.FALSE on timeout
+        """
+        command= "sudo ovs-vsctl list-br"
+        try:
+            response = self.execute(
+                cmd=command,
+                timeout=10 )
+            if response:
+                return response
+            else:
+                return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+
+    def listPorts( self, sw ):
+        """
+        Parameters:
+            sw: The name of an OVS switch. Example "s1"
+        Return:
+            The output of the command from the linux
+            or main.FALSE on timeout
+        """
+        command= "sudo ovs-vsctl list-ports " + str( sw )
+        try:
+            response = self.execute(
+                cmd=command,
+                timeout=10 )
+            if response:
+                return response
+            else:
+                return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+
+    def getController( self, sw ):
+        """
+        Parameters:
+            sw: The name of an OVS switch. Example "s1"
+        Return:
+            The output of the command from the mininet cli
+            or main.FALSE on timeout"""
+        command = "sudo ovs-vsctl get-controller " + str( sw )
+        try:
+            response = self.execute(
+                cmd=command,
+                timeout=10)
+            if response:
+                return response
+            else:
+                return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
+    def show( self ):
+        """
+        Parameters:
+            none
+        Return:
+            The output of the command from the linux
+            or main.FALSE on timeout"""
+        command = "sudo ovs-vsctl show "
+        try:
+            response = self.execute(
+                cmd=command,
+                timeout=10)
+            if response:
+                return response
+            else:
+                return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
+            main.cleanup()
+            main.exit()
diff --git a/TestON/tests/FUNCintent/FUNCintent.py b/TestON/tests/FUNCintent/FUNCintent.py
index 6aafd10..bf9edfd 100644
--- a/TestON/tests/FUNCintent/FUNCintent.py
+++ b/TestON/tests/FUNCintent/FUNCintent.py
@@ -249,8 +249,8 @@
         main.caseExplanation = "Compare topology elements between Mininet" +\
                                 " and ONOS"
 
-        main.step( "Gathering topology information" )
-        # TODO: add a paramaterized sleep here
+        main.log.info( "Gathering topology information" )
+
         devicesResults = main.TRUE
         linksResults = main.TRUE
         hostsResults = main.TRUE
diff --git a/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.params b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.params
new file mode 100644
index 0000000..1f83b50
--- /dev/null
+++ b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.params
@@ -0,0 +1,43 @@
+<PARAMS>
+    # CASE - Description
+    # 1 - Compile ONOS and push it to the test machines
+    # 2 - Test ovsdb connection and tearDown
+    # 3 - Test default br-int configuration and vxlan port
+
+    <testcases>1,2,3</testcases>
+
+    <DEPENDENCY>
+        <path>/tests/FUNCovsdbtest/Dependency/</path>
+    </DEPENDENCY>
+
+    <ENV>
+        <cellName>singlenode</cellName>
+        <cellApps>drivers,openflow,proxyarp,mobility</cellApps>
+    </ENV>
+
+    <CTRL>
+        <ip1>OC1</ip1>
+        <port1>6633</port1>
+        <ovsdbport>6640</ovsdbport>
+    </CTRL>
+
+    <TIMER>
+        <delaytime>5</delaytime>      #delaytime for ovsdb connection create and delete
+    </TIMER>
+
+    <HTTP>
+        <port>False</port>
+        <path>/onos/vtn</path>
+    </HTTP>
+
+    <GIT>
+        <pull>False</pull>
+        <branch>master</branch>
+    </GIT>
+
+    <OVSDB>
+        <ip1>OCN</ip1>
+        <ip2>OC1</ip2>
+    </OVSDB>
+
+</PARAMS>
diff --git a/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.py b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.py
new file mode 100644
index 0000000..6d921be
--- /dev/null
+++ b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.py
@@ -0,0 +1,342 @@
+"""
+Description: This test is to check onos set configuration and flows with ovsdb connection.
+
+List of test cases:
+CASE1: Compile ONOS and push it to the test machines
+CASE2: Test ovsdb connection and tearDown
+CASE3: Test default br-int configuration and vxlan port
+CASE4: Test default openflow configuration
+CASE5: Test default flows
+CASE6: Configure Network Subnet Port And Check On ONOS
+CASE7: Test host go online and ping each other
+zhanghaoyu7@huawei.com
+"""
+import os
+
+class FUNCovsdbtest:
+
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        """
+        CASE1 is to compile ONOS and push it to the test machines
+
+        Startup sequence:
+        cell <name>
+        onos-verify-cell
+        NOTE: temporary - onos-remove-raft-logs
+        onos-uninstall
+        start mininet
+        git pull
+        mvn clean install
+        onos-package
+        onos-install -f
+        onos-wait-for-start
+        start cli sessions
+        start ovsdb
+        start vtn apps
+        """
+        import os
+        main.log.info( "ONOS Single node start " +
+                         "ovsdb test - initialization" )
+        main.case( "Setting up test environment" )
+        main.caseExplanation = "Setup the test environment including " +\
+                                "installing ONOS, start ONOS."
+
+        # load some variables from the params file
+        PULLCODE = False
+        if main.params[ 'GIT' ][ 'pull' ] == 'True':
+            PULLCODE = True
+        gitBranch = main.params[ 'GIT' ][ 'branch' ]
+        cellName = main.params[ 'ENV' ][ 'cellName' ]
+        ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
+        OVSDB1Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip1' ] )
+        OVSDB2Ip = os.getenv( main.params[ 'OVSDB' ][ 'ip2' ] )
+
+        main.step( "Create cell file" )
+        cellAppString = main.params[ 'ENV' ][ 'cellApps' ]
+        main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName,
+                                       main.OVSDB1.ip_address,
+                                       cellAppString, ipList )
+
+        main.step( "Applying cell variable to environment" )
+        cellResult = main.ONOSbench.setCell( cellName )
+        verifyResult = main.ONOSbench.verifyCell()
+
+        main.log.info( "Removing raft logs" )
+        main.ONOSbench.onosRemoveRaftLogs()
+
+        main.CLIs = []
+        main.nodes = []
+        main.numCtrls= 1
+
+        for i in range( 1, main.numCtrls + 1 ):
+            try:
+                main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
+                main.nodes.append( getattr( main, 'ONOS' + str( i ) ) )
+                ipList.append( main.nodes[ -1 ].ip_address )
+            except AttributeError:
+                break
+
+        main.log.info( "Uninstalling ONOS" )
+        for node in main.nodes:
+            main.ONOSbench.onosUninstall( node.ip_address )
+
+        # Make sure ONOS process is not running
+        main.log.info( "Killing any ONOS processes" )
+        killResults = main.TRUE
+        for node in main.nodes:
+            killed = main.ONOSbench.onosKill( node.ip_address )
+            killResults = killResults and killed
+
+        cleanInstallResult = main.TRUE
+        gitPullResult = main.TRUE
+        main.step( "Git checkout and pull" + gitBranch )
+        if PULLCODE:
+            main.ONOSbench.gitCheckout( gitBranch )
+            gitPullResult = main.ONOSbench.gitPull()
+            # values of 1 or 3 are good
+            utilities.assert_lesser( expect=0, actual=gitPullResult,
+                                      onpass="Git pull successful",
+                                      onfail="Git pull failed" )
+
+        main.ONOSbench.getVersion( report=True )
+
+        main.step( "Using mvn clean install" )
+        cleanInstallResult = main.TRUE
+        if PULLCODE and gitPullResult == main.TRUE:
+            cleanInstallResult = main.ONOSbench.cleanInstall()
+        else:
+            main.log.warn( "Did not pull new code so skipping mvn" +
+                           "clean install" )
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=cleanInstallResult,
+                                 onpass="MCI successful",
+                                 onfail="MCI failed" )
+
+        main.step( "Creating ONOS package" )
+        packageResult = main.ONOSbench.onosPackage()
+        utilities.assert_equals( expect=main.TRUE,
+                                     actual=packageResult,
+                                     onpass="Successfully created ONOS package",
+                                     onfail="Failed to create ONOS package" )
+
+        main.step( "Installing ONOS package" )
+        onosInstallResult = main.ONOSbench.onosInstall(
+                options="-f", node=main.nodes[0].ip_address )
+        utilities.assert_equals( expect=main.TRUE, actual=onosInstallResult,
+                                 onpass="ONOS install successful",
+                                 onfail="ONOS install failed" )
+
+        main.step( "Checking if ONOS is up yet" )
+        print main.nodes[0].ip_address
+        for i in range( 2 ):
+            onos1Isup = main.ONOSbench.isup( main.nodes[0].ip_address )
+            if onos1Isup:
+                break
+        utilities.assert_equals( expect=main.TRUE, actual=onos1Isup,
+                                 onpass="ONOS startup successful",
+                                 onfail="ONOS startup failed" )
+        main.log.step( "Starting ONOS CLI sessions" )
+        print main.nodes[0].ip_address
+        cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address )
+        utilities.assert_equals( expect=main.TRUE, actual=cliResults,
+                                 onpass="ONOS cli startup successful",
+                                 onfail="ONOS cli startup failed" )
+
+        main.step( "App Ids check" )
+        appCheck = main.ONOScli1.appToIDCheck()
+
+        if appCheck !=main.TRUE:
+            main.log.warn( main.CLIs[0].apps() )
+            main.log.warn( main.CLIs[0].appIDs() )
+            utilities.assert_equals( expect=main.TRUE, actual=appCheck,
+                                 onpass="App Ids seem to be correct",
+                                 onfail="Something is wrong with app Ids" )
+        if cliResults == main.FALSE:
+            main.log.error( "Failed to start ONOS,stopping test" )
+            main.cleanup()
+            main.exit()
+
+        main.step( "Install onos-ovsdatabase" )
+        installResults = main.ONOScli1.activateApp( "org.onosproject.ovsdb" )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Install onos-ovsdatabase successful",
+                                 onfail="Install onos-ovsdatabase failed" )
+
+        main.step( "Install onos-app-vtnrsc" )
+        installResults = main.ONOScli1.activateApp( "org.onosproject.vtnrsc" )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Install onos-app-vtnrsc successful",
+                                 onfail="Install onos-app-vtnrsc failed" )
+
+        main.step( "Install onos-app-vtn" )
+        installResults = main.ONOScli1.activateApp( "org.onosproject.vtn" )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Install onos-app-vtn successful",
+                                 onfail="Install onos-app-vtn failed" )
+
+        main.step( "Install onos-app-vtnweb" )
+        installResults = main.ONOScli1.activateApp( "org.onosproject.vtnweb" )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Install onos-app-vtnweb successful",
+                                 onfail="Install onos-app-vtnweb failed" )
+
+    def CASE2( self, main ):
+
+        """
+        Test ovsdb connection and teardown
+        """
+        import os,sys
+        import re
+        import time
+
+        main.case( "Test ovsdb connection and teardown" )
+        main.caseExplanation = "Test ovsdb connection create and delete" +\
+                                " over ovsdb node and onos node "
+
+        ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
+        ovsdbport = main.params[ 'CTRL' ][ 'ovsdbport' ]
+        delaytime = main.params[ 'TIMER' ][ 'delaytime' ]
+
+        main.step( "Set ovsdb node manager" )
+        assignResult = main.OVSDB1.setManager( ip=ctrlip, port=ovsdbport, delaytime=delaytime )
+        stepResult = assignResult
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="Set ovsdb node manager sucess",
+                                 onfail="Set ovsdb node manager failed" )
+
+        main.step( "Check ovsdb node manager is " + str( ctrlip ) )
+        response = main.OVSDB1.getManager()
+        if re.search( ctrlip, response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="Check ovsdb node manager is " + str( response ) ,
+                                 onfail="Check ovsdb node manager failed" )
+
+        main.step( "Delete ovsdb node manager" )
+        deleteResult = main.OVSDB1.delManager( delaytime=delaytime )
+        stepResult = deleteResult
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="ovsdb node delete manager sucess",
+                                 onfail="ovsdb node delete manager failed" )
+
+        main.step( "Check ovsdb node delete manager " + str( ctrlip ) )
+        response = main.OVSDB1.getManager()
+        if not re.search( ctrlip, response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="Check ovsdb node delete manager sucess",
+                                 onfail="Check ovsdb node delete manager failed" )
+
+    def CASE3( self, main ):
+
+        """
+        Test default br-int configuration and vxlan port
+        """
+        import re
+        import time
+        import os,sys
+
+        main.case( "Test default br-int configuration and vxlan port" )
+        main.caseExplanation = "onos create default br-int bridge and" +\
+                                " vxlan port on the ovsdb node"
+
+        ctrlip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
+        ovsdbport = main.params[ 'CTRL' ][ 'ovsdbport' ]
+        delaytime = main.params[ 'TIMER' ][ 'delaytime' ]
+
+        main.step( "ovsdb node 1 set ovs manager to " + str( ctrlip ) )
+        assignResult = main.OVSDB1.setManager( ip=ctrlip, port=ovsdbport, delaytime=delaytime )
+        stepResult = assignResult
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="ovsdb node 1 set ovs manager to  to " +\
+                                  str( ctrlip ) + " sucess",
+                                 onfail="ovsdb node 1 set ovs manager to  to " +\
+                                  str( ctrlip ) + " failed" )
+
+        main.step( "ovsdb node 2 set ovs manager to " + str( ctrlip ) )
+        assignResult = main.OVSDB2.setManager( ip=ctrlip, port=ovsdbport, delaytime=delaytime )
+        stepResult = assignResult
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="ovsdb node 2 set ovs manager to  to " +\
+                                  str( ctrlip ) + " sucess",
+                                 onfail="ovsdb node 2 set ovs manager to  to " +\
+                                  str( ctrlip ) + " failed" )
+
+        main.step( "Check ovsdb node 1 manager is " + str( ctrlip ) )
+        response = main.OVSDB1.getManager()
+        if re.search( ctrlip, response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="ovsdb node 1 manager is " + str( response ) ,
+                                 onfail="ovsdb node 1 manager check failed" )
+
+        main.step( "Check ovsdb node 2 manager is " + str( ctrlip ) )
+        response = main.OVSDB2.getManager()
+        if re.search( ctrlip, response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="ovsdb node 2 manager is " + str( response ) ,
+                                 onfail="ovsdb node 2 manager check failed" )
+
+        main.step( "Check default br-int bridge on ovsdb node " + str( OVSDB1Ip ) )
+        response = main.OVSDB1.listBr()
+        if re.search( "br-int", response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="onos add default bridge on the node 1 sucess",
+                                 onfail="onos add default bridge on the node 1 failed" )
+
+        main.step( "Check default br-int bridge on ovsdb node " + str( OVSDB2Ip ) )
+        response = main.OVSDB2.listBr()
+        if re.search( "br-int", response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="onos add default bridge on the node 2 sucess",
+                                 onfail="onos add default bridge on the node 2 failed" )
+
+        main.step( "Check default vxlan port on ovsdb node " + str( OVSDB1Ip ) )
+        response = main.OVSDB1.listPorts( "br-int" )
+        if re.search( "vxlan", response ) and re.search( str( OVSDB2Ip ), response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="onos add default vxlan port on the node 1 sucess",
+                                 onfail="onos add default vxlan port on the node 1 failed" )
+
+        main.step( "Check default vxlan port on ovsdb node " + str( OVSDB2Ip ) )
+        response = main.OVSDB2.listPorts( "br-int" )
+        if re.search( "vxlan", response ) and re.search( str( OVSDB1Ip ), response ):
+            stepResult = main.TRUE
+        else:
+            stepResult = main.FALSE
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=stepResult,
+                                 onpass="onos add default vxlan port on the node 2 sucess",
+                                 onfail="onos add default vxlan port on the node 2 failed" )
diff --git a/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.topo b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.topo
new file mode 100644
index 0000000..f788471
--- /dev/null
+++ b/TestON/tests/FUNCovsdbtest/FUNCovsdbtest.topo
@@ -0,0 +1,60 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOSbench>
+            <host>OCN</host>
+            <user>onos</user>
+            <password></password>
+            <type>OnosDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+            </COMPONENTS>
+        </ONOSbench>
+
+        <ONOScli1>
+            <host>OCN</host>
+            <user>onos</user>
+            <password></password>
+            <type>OnosCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOScli1>
+
+        <ONOS1>
+            <host>OC1</host>
+            <user>onos</user>
+            <password></password>
+            <type>OnosDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS1>
+
+        <ONOSrest>
+            <host>OC1</host>
+            <user>onos</user>
+            <password></password>
+            <type>OnosRestDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOSrest>
+
+        <OVSDB1>
+            <host>OCN</host>
+            <user>onos</user>
+            <password></password>
+            <type>OvsdbDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </OVSDB1>
+
+        <OVSDB2>
+            <host>OC1</host>
+            <user>onos</user>
+            <password></password>
+            <type>OvsdbDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </OVSDB2>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/FUNCovsdbtest/__init__.py b/TestON/tests/FUNCovsdbtest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FUNCovsdbtest/__init__.py
diff --git a/TestON/tests/FUNCovsdbtest/dependencies/__init__.py b/TestON/tests/FUNCovsdbtest/dependencies/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FUNCovsdbtest/dependencies/__init__.py
diff --git a/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py b/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
index 582afb7..65a1da2 100644
--- a/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
+++ b/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
@@ -218,11 +218,10 @@
                     time.sleep(5)
 
                 myRawResult = "--"
-                while "ms" not in myRawResult:
-                    main.ONOSbench.handle.sendline(cmd)
-                    main.ONOSbench.handle.expect(":~")
-                    myRawResult = main.ONOSbench.handle.before
-                    if debug: main.log.info(myRawResult)
+
+                main.ONOSbench.handle.sendline(cmd)
+                main.ONOSbench.handle.expect(":~")
+                myRawResult = main.ONOSbench.handle.before
 
                 if debug: main.log.info(myRawResult)
 
@@ -232,22 +231,19 @@
                         if "install" in line:
                             installed.append(int(line.split(" ")[5]))
 
-                    for line in myRawResult:
                         if "withdraw" in line:
                             withdrawn.append(int(line.split(" ")[5]))
 
-                    for line in myRawResult:
                         if "Failure:" in line:
                             main.log.error("INTENT TEST FAILURE, ABORTING TESTCASE")
                             testStatus = "fail"
                 if testStatus == "fail":
-                    break
-
                     print("installed: " + str(installed))
                     print("withraw: " + str(withdrawn) + "\n")
                     if withdrawn[len(withdrawn) -1] > 1000 or installed[len(installed) -1] > 1000:
                         main.log.info("ABNORMAL VALUE, CHECKING LOG")
                         main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"], outputMode="d")
+                    break
 
             if testStatus == "fail":
                 break
diff --git a/TestON/tests/SDNIPperf/SDNIPperf.py b/TestON/tests/SDNIPperf/SDNIPperf.py
index cd41ea6..5e1184f 100644
--- a/TestON/tests/SDNIPperf/SDNIPperf.py
+++ b/TestON/tests/SDNIPperf/SDNIPperf.py
@@ -40,7 +40,7 @@
         #Need to push some new code to ONOS before using the git pull
         #gitPullResult = main.ONOSbench.gitPull()
 
-        main.step( "Using mvn clean & install" )
+        main.step( "Using mvn clean install" )
         if gitPullResult == main.TRUE:
             cleanInstallResult = main.ONOSbench.cleanInstall()
         else:
@@ -116,7 +116,7 @@
 
         main.step("Sleep 1200 seconds")
         # wait until SDN-IP receives all routes and ONOS installs all intents
-        time.sleep( float(main.params[ 'timers' ][ 'SystemBoot' ]) )
+        time.sleep( int(main.params[ 'timers' ][ 'SystemBoot' ]) )
 
         main.step( "Checking routes installed" )
 
diff --git a/TestON/tests/SDNIPperf/SDNIPperf.topo b/TestON/tests/SDNIPperf/SDNIPperf.topo
index 50629d1..9932966 100644
--- a/TestON/tests/SDNIPperf/SDNIPperf.topo
+++ b/TestON/tests/SDNIPperf/SDNIPperf.topo
@@ -2,7 +2,7 @@
     <COMPONENT>
 
         <ONOSbench>
-            <host>10.128.4.60</host>
+            <host>10.128.4.53</host>
             <user>admin</user>
             <password></password>
             <type>OnosDriver</type>
@@ -11,7 +11,7 @@
         </ONOSbench>
 
         <ONOScli>
-            <host>10.128.4.60</host>
+            <host>10.128.4.53</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>