Merge "Better checking for failed intents"
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/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