[ONOS-6593]Review and Refactor ONOS startup procedures in TestON
Change-Id: I509a8ee7a26c198957bebf59da5c85a0edb8b995
diff --git a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.params b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.params
index 585eca3..ca223bd 100644
--- a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.params
+++ b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.params
@@ -10,7 +10,7 @@
# 7 - Testing GROUP with type "INDIRECT"
# 8 - Deleting the group and flow
# 100 - Check logs for Errors and Warnings
- <testcases>1,2,3,5,6,7,8,100</testcases>
+ <testcases>1,2,3,5,6,7,6,100</testcases>
<SCALE>
<max>1</max>
diff --git a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
index 4c80ee0..f50e7c5 100644
--- a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
+++ b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.py
@@ -6,7 +6,6 @@
def CASE1( self, main ):
import os
import imp
-
"""
- Construct tests variables
- GIT ( optional )
@@ -16,90 +15,71 @@
- Install ONOS package
- Build ONOS package
"""
- main.case( "Constructing test variables and building ONOS package" )
- main.step( "Constructing test variables" )
+ try:
+ from tests.dependencies.ONOSSetup import ONOSSetup
+ main.testSetUp = ONOSSetup()
+ except ImportError:
+ main.log.error( "ONOSSetup not found. exiting the test" )
+ main.exit()
+ main.testSetUp.envSetupDescription()
+ stepResult = main.FALSE
- # Test variables
- main.testOnDirectory = os.path.dirname( os.getcwd() )
- main.cellName = main.params[ 'ENV' ][ 'cellName' ]
- main.apps = main.params[ 'ENV' ][ 'cellApps' ]
- gitBranch = main.params[ 'GIT' ][ 'branch' ]
- gitPull = main.params[ 'GIT' ][ 'pull' ]
- main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
- main.dependencyPath = main.testOnDirectory + \
- main.params[ 'DEPENDENCY' ][ 'path' ]
- wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
- wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
- main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
- bucket = main.params[ 'DEPENDENCY' ][ 'bucket' ]
- main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] )
- main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
- main.startMNSleep = int( main.params[ 'SLEEP' ][ 'startMN' ] )
- main.addFlowSleep = int( main.params[ 'SLEEP' ][ 'addFlow' ] )
- main.delFlowSleep = int( main.params[ 'SLEEP' ][ 'delFlow' ] )
- main.addGroupSleep = int( main.params[ 'SLEEP' ][ 'addGroup' ] )
- main.delGroupSleep = int( main.params[ 'SLEEP' ][ 'delGroup' ] )
- main.debug = main.params[ 'DEBUG' ]
- main.swDPID = main.params[ 'TEST' ][ 'swDPID' ]
- egressPort1 = main.params[ 'TEST' ][ 'egressPort1' ]
- egressPort2 = main.params[ 'TEST' ][ 'egressPort2' ]
- egressPort3 = main.params[ 'TEST' ][ 'egressPort3' ]
- ingressPort = main.params[ 'TEST' ][ 'ingressPort' ]
- appCookie = main.params[ 'TEST' ][ 'appCookie' ]
- type1 = main.params[ 'TEST' ][ 'type1' ]
- type2 = main.params[ 'TEST' ][ 'type2' ]
- groupId = main.params[ 'TEST' ][ 'groupId' ]
- priority = main.params[ 'TEST' ][ 'priority' ]
- deviceId = main.params[ 'TEST' ][ 'swDPID' ]
+ try:
+ # Test variables
+ main.cellName = main.params['ENV']['cellName']
+ main.apps = main.params['ENV']['cellApps']
+ main.ONOSport = main.params['CTRL']['port']
+ main.dependencyPath = main.testOnDirectory + \
+ main.params['DEPENDENCY']['path']
+ wrapperFile1 = main.params['DEPENDENCY']['wrapper1']
+ wrapperFile2 = main.params['DEPENDENCY']['wrapper2']
+ main.topology = main.params['DEPENDENCY']['topology']
+ bucket = main.params['DEPENDENCY']['bucket']
+ main.maxNodes = int(main.params['SCALE']['max'])
+ main.startUpSleep = int(main.params['SLEEP']['startup'])
+ main.startMNSleep = int(main.params['SLEEP']['startMN'])
+ main.addFlowSleep = int(main.params['SLEEP']['addFlow'])
+ main.delFlowSleep = int(main.params['SLEEP']['delFlow'])
+ main.addGroupSleep = int(main.params['SLEEP']['addGroup'])
+ main.delGroupSleep = int(main.params['SLEEP']['delGroup'])
+ main.debug = main.params['DEBUG']
+ main.swDPID = main.params['TEST']['swDPID']
+ egressPort1 = main.params['TEST']['egressPort1']
+ egressPort2 = main.params['TEST']['egressPort2']
+ egressPort3 = main.params['TEST']['egressPort3']
+ ingressPort = main.params['TEST']['ingressPort']
+ appCookie = main.params['TEST']['appCookie']
+ type1 = main.params['TEST']['type1']
+ type2 = main.params['TEST']['type2']
+ groupId = main.params['TEST']['groupId']
+ priority = main.params['TEST']['priority']
+ deviceId = main.params['TEST']['swDPID']
- main.cellData = {} # for creating cell file
- main.CLIs = []
- main.ONOSip = []
+ main.debug = True if "on" in main.debug else False
+ # -- INIT SECTION, ONLY RUNS ONCE -- #
- main.debug = True if "on" in main.debug else False
+ main.buckets = imp.load_source(bucket,
+ main.dependencyPath +
+ bucket +
+ ".py")
- main.ONOSip = main.ONOSbench.getOnosIps()
+ copyResult = main.ONOSbench.scp(main.Mininet1,
+ main.dependencyPath + main.topology,
+ main.Mininet1.home + '/custom/',
+ direction="to")
- # Assigning ONOS cli handles to a list
- for i in range( 1, main.maxNodes + 1 ):
- main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
+ utilities.assert_equals(expect=main.TRUE,
+ actual=copyResult,
+ onpass="Successfully copy " + "test variables ",
+ onfail="Failed to copy test variables")
+ stepResult = main.testSetUp.envSetup()
- # -- INIT SECTION, ONLY RUNS ONCE -- #
- main.startUp = imp.load_source( wrapperFile1,
- main.dependencyPath +
- wrapperFile1 +
- ".py" )
+ except Exception as e:
+ main.testSetUp.envSetupException( e )
- main.topo = imp.load_source( wrapperFile2,
- main.dependencyPath +
- wrapperFile2 +
- ".py" )
+ main.testSetUp.evnSetupConclusion( stepResult )
- main.buckets = imp.load_source( bucket,
- main.dependencyPath +
- bucket +
- ".py" )
- copyResult = main.ONOSbench.scp( main.Mininet1,
- main.dependencyPath + main.topology,
- main.Mininet1.home + '/custom/',
- direction="to" )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=copyResult,
- onpass="Successfully copy " + "test variables ",
- onfail="Failed to copy test variables" )
-
- if main.CLIs:
- stepResult = main.TRUE
- else:
- main.log.error( "Did not properly created list of ONOS CLI handle" )
- stepResult = main.FALSE
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully construct " + "test variables ",
- onfail="Failed to construct test variables" )
def CASE2( self, main ):
"""
@@ -113,121 +93,23 @@
- Install ONOS cluster
- Connect to cli
"""
- import time
-
- main.numCtrls = int( main.maxNodes )
-
- main.case( "Starting up " + str( main.numCtrls ) +
- " node(s) ONOS cluster" )
-
- #kill off all onos processes
- main.log.info( "Safety check, killing all ONOS processes" +
- " before initiating environment setup" )
-
- for i in range( main.maxNodes ):
- main.ONOSbench.onosDie( main.ONOSip[ i ] )
-
- main.log.info( "NODE COUNT = " + str( main.numCtrls ) )
-
- tempOnosIp = []
- for i in range( main.numCtrls ):
- tempOnosIp.append( main.ONOSip[ i ] )
-
- main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
- "temp",
- main.Mininet1.ip_address,
- main.apps,
- tempOnosIp, main.ONOScli1.karafUser )
-
- main.step( "Apply cell to environment" )
- cellResult = main.ONOSbench.setCell( "temp" )
- verifyResult = main.ONOSbench.verifyCell()
- stepResult = cellResult and verifyResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully applied cell to " + "environment",
- onfail="Failed to apply cell to environment " )
-
- main.step( "Creating ONOS package" )
- packageResult = main.ONOSbench.buckBuild()
- stepResult = packageResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully created ONOS package",
- onfail="Failed to create ONOS package" )
-
- time.sleep( main.startUpSleep )
- main.step( "Uninstalling ONOS package" )
- onosUninstallResult = main.TRUE
- for ip in main.ONOSip:
- onosUninstallResult = onosUninstallResult and \
- main.ONOSbench.onosUninstall( nodeIp=ip )
- stepResult = onosUninstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully uninstalled ONOS package",
- onfail="Failed to uninstall ONOS package" )
- time.sleep( main.startUpSleep )
- main.step( "Installing ONOS package" )
- onosInstallResult = main.TRUE
- for i in range( main.numCtrls ):
- onosInstallResult = onosInstallResult and \
- main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
- stepResult = onosInstallResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully installed ONOS package",
- onfail="Failed to install ONOS package" )
-
- time.sleep( main.startUpSleep )
- main.step( "Starting ONOS service" )
- stopResult = main.TRUE
- startResult = main.TRUE
- onosIsUp = main.TRUE
-
- for i in range( main.numCtrls ):
- onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
- if onosIsUp == main.TRUE:
- main.log.report( "ONOS instance is up and ready" )
- else:
- main.log.report( "ONOS instance may not be up, stop and " +
- "start ONOS again " )
- for i in range( main.numCtrls ):
- stopResult = stopResult and \
- main.ONOSbench.onosStop( main.ONOSip[ i ] )
- for i in range( main.numCtrls ):
- startResult = startResult and \
- main.ONOSbench.onosStart( main.ONOSip[ i ] )
- stepResult = onosIsUp and stopResult and startResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="ONOS service is ready",
- onfail="ONOS service did not start properly" )
-
- main.step( "Set up ONOS secure SSH" )
- secureSshResult = main.TRUE
- for i in range( int( main.numCtrls ) ):
- secureSshResult = secureSshResult and main.ONOSbench.onosSecureSSH( node=main.ONOSip[ i ] )
- utilities.assert_equals( expect=main.TRUE, actual=secureSshResult,
- onpass="Test step PASS",
- onfail="Test step FAIL" )
-
- main.step( "Start ONOS cli" )
- cliResult = main.TRUE
- for i in range( main.numCtrls ):
- cliResult = cliResult and \
- main.CLIs[ i ].startOnosCli( main.ONOSip[ i ] )
- stepResult = cliResult
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult,
- onpass="Successfully start ONOS cli",
- onfail="Failed to start ONOS cli" )
+ main.testSetUp.ONOSSetUp( main.Mininet1 )
def CASE3( self, main ):
"""
Start Mininet
"""
import json
+ import time
+ try:
+ from tests.dependencies.topology import Topology
+ except ImportError:
+ main.log.error( "Topology not found exiting the test" )
+ main.exit()
+ try:
+ main.topoRelated
+ except ( NameError, AttributeError ):
+ main.topoRelated = Topology()
main.case( "Setup mininet and compare ONOS topology view to Mininet topology" )
main.caseExplanation = "Start mininet with custom topology and compare topology " +\
@@ -252,60 +134,7 @@
time.sleep( main.startMNSleep )
- main.step( "Comparing MN topology to ONOS topology" )
- main.log.info( "Gathering topology information" )
- devices = main.topo.getAllDevices( main )
- hosts = main.topo.getAllHosts( main )
- ports = main.topo.getAllPorts( main )
- links = main.topo.getAllLinks( main )
-
- mnSwitches = main.Mininet1.getSwitches()
- mnLinks = main.Mininet1.getLinks()
- mnHosts = main.Mininet1.getHosts()
-
- for controller in range( main.numCtrls ):
- controllerStr = str( controller + 1 )
- if devices[ controller ] and ports[ controller ] and\
- "Error" not in devices[ controller ] and\
- "Error" not in ports[ controller ]:
-
- currentDevicesResult = main.Mininet1.compareSwitches(
- mnSwitches,
- json.loads( devices[ controller ] ),
- json.loads( ports[ controller ] ) )
- else:
- currentDevicesResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentDevicesResult,
- onpass="ONOS" + controllerStr +
- " Switches view is correct",
- onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
- if links[ controller ] and "Error" not in links[ controller ]:
- currentLinksResult = main.Mininet1.compareLinks(
- mnSwitches, mnLinks,
- json.loads( links[ controller ] ) )
- else:
- currentLinksResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentLinksResult,
- onpass="ONOS" + controllerStr +
- " links view is correct",
- onfail="ONOS" + controllerStr +
- " links view is incorrect" )
-
- if hosts[ controller ] or "Error" not in hosts[ controller ]:
- currentHostsResult = main.Mininet1.compareHosts(
- mnHosts,
- json.loads( hosts[ controller ] ) )
- else:
- currentHostsResult = main.FALSE
- utilities.assert_equals( expect=main.TRUE,
- actual=currentHostsResult,
- onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
- onfail="ONOS" + controllerStr +
- " hosts don't match Mininet" )
+ main.topoRelated.compareTopos( main.Mininet1 )
def CASE4( self, main ):
"""
@@ -459,7 +288,7 @@
"""
Sends a packet using scapy
"""
- main.step( "Testing Group by sending packet using Scapy" )
+ main.step( "Testing Group by sending packet using Scapy" )
main.log.info( "Creating host components" )
main.Scapy.createHostComponent( "h1" )
main.Scapy.createHostComponent( "h2" )
@@ -640,7 +469,7 @@
"""
Sends a packet using scapy
"""
- main.step( "Testing Group by sending packet using Scapy" )
+ main.step( "Testing Group by sending packet using Scapy" )
main.log.info( "Creating host components" )
main.Scapy.createHostComponent( "h1" )
main.Scapy.createHostComponent( "h2" )
@@ -676,47 +505,6 @@
onpass="Packet sent to port 1 is received at port 2 successfully!!!",
onfail="Failure!!!Packet sent to port 1 is not received at port 2" )
- def CASE8( self, main ):
- """
- Deleting the Group and Flow
- """
- import json
- import time
- respFlowId = 1
-
- main.case( "Delete the Group and Flow added through Rest api " )
- main.step( "Deleting Group and Flows" )
-
- #Getting Flow ID
- response = main.ONOSrest.getFlows( deviceId=deviceId )
- responsejson = json.loads( response )
- for item in responsejson:
- if item[ "priority" ] == int( priority ):
- respFlowId = item[ "id" ]
-
- main.step( "Deleting the created flow by deviceId and flowId" )
- flowResponse = main.ONOSrest.removeFlow( deviceId=deviceId,
- flowId=respFlowId )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=flowResponse,
- onpass="Deleting flow is successful!!!",
- onfail="Deleting flow is failure!!!" )
-
- # Giving ONOS time to delete the flow
- time.sleep( main.delFlowSleep )
-
- groupResponse = main.ONOSrest.removeGroup( deviceId=deviceId,
- appCookie=appCookie )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=groupResponse,
- onpass="Deleting Group is successful!!!",
- onfail="Deleting Group is failure!!!" )
-
- # Giving ONOS time to delete the group
- time.sleep( main.delGroupSleep )
-
def CASE100( self, main ):
"""
Report errors/warnings/exceptions
diff --git a/TestON/tests/FUNC/FUNCgroup/dependencies/startUp.py b/TestON/tests/FUNC/FUNCgroup/dependencies/startUp.py
deleted file mode 100644
index a9becf9..0000000
--- a/TestON/tests/FUNC/FUNCgroup/dependencies/startUp.py
+++ /dev/null
@@ -1,33 +0,0 @@
-"""
- This wrapper function is use for starting up onos instance
-"""
-import time
-import os
-import json
-
-
-def onosBuild( main, gitBranch ):
- """
- This includes pulling ONOS and building it using maven install
- """
- buildResult = main.FALSE
-
- # Git checkout a branch of ONOS
- checkOutResult = main.ONOSbench.gitCheckout( gitBranch )
- # Does the git pull on the branch that was checked out
- if not checkOutResult:
- main.log.warn( "Failed to checked out " + gitBranch +
- " branch" )
- else:
- main.log.info( "Successfully checked out " + gitBranch +
- " branch" )
- gitPullResult = main.ONOSbench.gitPull()
- if gitPullResult == main.ERROR:
- main.log.error( "Error pulling git branch" )
- else:
- main.log.info( "Successfully pulled " + gitBranch + " branch" )
-
- # buck build
- buildResult = main.ONOSbench.buckBuild()
-
- return buildResult
diff --git a/TestON/tests/FUNC/FUNCgroup/dependencies/topo.py b/TestON/tests/FUNC/FUNCgroup/dependencies/topo.py
deleted file mode 100644
index 7217d4d..0000000
--- a/TestON/tests/FUNC/FUNCgroup/dependencies/topo.py
+++ /dev/null
@@ -1,102 +0,0 @@
-"""
- These functions can be used for topology comparisons
-"""
-import time
-import os
-import json
-
-
-def getAllDevices( main ):
- """
- Return a list containing the devices output from each ONOS node
- """
- devices = []
- threads = []
- for i in range( main.numCtrls ):
- t = main.Thread( target=main.CLIs[ i ].devices,
- name="devices-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- devices.append( t.result )
- return devices
-
-
-def getAllHosts( main ):
- """
- Return a list containing the hosts output from each ONOS node
- """
- hosts = []
- ipResult = main.TRUE
- threads = []
- for i in range( main.numCtrls ):
- t = main.Thread( target=main.CLIs[ i ].hosts,
- name="hosts-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- hosts.append( t.result )
- return hosts
-
-
-def getAllPorts( main ):
- """
- Return a list containing the ports output from each ONOS node
- """
- ports = []
- threads = []
- for i in range( main.numCtrls ):
- t = main.Thread( target=main.CLIs[ i ].ports,
- name="ports-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- ports.append( t.result )
- return ports
-
-
-def getAllLinks( main ):
- """
- Return a list containing the links output from each ONOS node
- """
- links = []
- threads = []
- for i in range( main.numCtrls ):
- t = main.Thread( target=main.CLIs[ i ].links,
- name="links-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- links.append( t.result )
- return links
-
-
-def getAllClusters( main ):
- """
- Return a list containing the clusters output from each ONOS node
- """
- clusters = []
- threads = []
- for i in range( main.numCtrls ):
- t = main.Thread( target=main.CLIs[ i ].clusters,
- name="clusters-" + str( i ),
- args=[] )
- threads.append( t )
- t.start()
-
- for t in threads:
- t.join()
- clusters.append( t.result )
- return clusters