blob: 553fa8ee8b8af16f69253d37554c61d8ab65462b [file] [log] [blame]
"""
Copyright 2016 Open Networking Foundation (ONF)
Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
TestON is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TestON is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with TestON. If not, see <http://www.gnu.org/licenses/>.
"""
# This is a sample template that starts up ONOS cluster, this template
# can be use as a base script for ONOS System Testing.
class SAMPstartTemplate_3node:
def __init__( self ):
self.default = ''
def CASE0(self, main):
'''
Pull specific ONOS branch, then Build ONOS on ONOS Bench.
This step is usually skipped. Because in a Jenkins driven automated
test env. We want Jenkins jobs to pull&build for flexibility to handle
different versions of ONOS.
'''
try:
from tests.dependencies.ONOSSetup import ONOSSetup
except ImportError:
main.log.error( "ONOSSetup not found. exiting the test" )
main.cleanAndExit()
try:
main.testSetUp
except ( NameError, AttributeError ):
main.testSetUp = ONOSSetup()
main.testSetUp.gitPulling()
def CASE1( self, main ):
'''
Set up global test variables;
Uninstall all running cells in test env defined in .topo file
'''
try:
from tests.dependencies.ONOSSetup import ONOSSetup
except ImportError:
main.log.error( "ONOSSetup not found. exiting the test" )
main.cleanAndExit()
try:
main.testSetUp
except ( NameError, AttributeError ):
main.testSetUp = ONOSSetup()
main.testSetUp.envSetupDescription()
stepResult = main.FALSE
try:
main.onosStartupSleep = float(main.params['CASE1']['SleepTimers']['onosStartup'])
main.onosCfgSleep = float(main.params['CASE1']['SleepTimers']['onosCfg'])
main.mnStartupSleep = float(main.params['CASE1']['SleepTimers']['mnStartup'])
main.mnCfgSleep = float(main.params['CASE1']['SleepTimers']['mnCfg'])
stepResult = main.testSetUp.envSetup( includeGitPull=False )
except Exception as e:
main.testSetUp.envSetupException( e )
main.testSetUp.evnSetupConclusion( stepResult )
def CASE2( self, main ):
'''
Report errors/warnings/exceptions
'''
main.log.info("Error report: \n" )
main.ONOSbench.logReport( main.Cluster.runningNodes[0].ipAddress,
[ "INFO",
"FOLLOWER",
"WARN",
"flow",
"ERROR",
"Except" ],
"s" )
def CASE10( self, main ):
"""
Start ONOS cluster (3 nodes in this example) in three steps:
1) start a basic cluster with drivers app via ONOSDriver;
2) activate apps via ONOSCliDriver;
3) configure onos via ONOSCliDriver;
"""
try:
from tests.dependencies.ONOSSetup import ONOSSetup
except ImportError:
main.log.error( "ONOSSetup not found. exiting the test" )
main.cleanAndExit()
try:
main.testSetUp
except ( NameError, AttributeError ):
main.testSetUp = ONOSSetup()
import time
main.case( "Start up " + str( main.Cluster.numCtrls ) + "-node onos cluster." )
main.step( "Start ONOS cluster with basic (drivers) app.")
stepResult = main.ONOSbench.startBasicONOS( nodeList=main.Cluster.getIps(), opSleep=200,
onosUser=main.ONOScell.karafUser )
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully started basic ONOS cluster ",
onfail="Failed to start basic ONOS Cluster " )
main.testSetUp.startOnosClis()
main.step( "Activate onos apps.")
main.apps = main.params['CASE10'].get( 'Apps' )
if main.apps:
main.log.info( "Apps to activate: " + main.apps )
activateResult = main.TRUE
for a in main.apps.split(","):
activateResult = activateResult & main.Cluster.active( 0 ).CLI.activateApp(a)
# TODO: check this worked
time.sleep( main.onosCfgSleep ) # wait for apps to activate
else:
main.log.warn( "No configurations were specified to be changed after startup" )
utilities.assert_equals( expect=main.TRUE,
actual=activateResult,
onpass="Successfully set config",
onfail="Failed to set config" )
main.step( "Set ONOS configurations" )
config = main.params['CASE10'].get( 'ONOS_Configuration' )
if config:
main.log.debug( config )
checkResult = main.TRUE
for component in config:
for setting in config[component]:
value = config[component][setting]
check = main.Cluster.runningNodes[0].setCfg( component, setting, value )
main.log.info( "Value was changed? {}".format( main.TRUE == check ) )
checkResult = check and checkResult
utilities.assert_equals( expect=main.TRUE,
actual=checkResult,
onpass="Successfully set config",
onfail="Failed to set config" )
else:
main.log.warn( "No configurations were specified to be changed after startup" )
def CASE11( self, main ):
"""
Start mininet and assign controllers
"""
import time
topology = main.params['CASE11']['topo']
main.log.report( "Start Mininet topology" )
main.case( "Start Mininet topology" )
main.step( "Starting Mininet Topology" )
topoResult = main.Mininet1.startNet(mnCmd=topology )
stepResult = topoResult
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully loaded topology",
onfail="Failed to load topology" )
# Exit if topology did not load properly
if not topoResult:
main.cleanAndExit()
main.step( "Assign switches to controllers.")
assignResult = main.TRUE
for i in range(1, 8):
assignResult = assignResult & main.Mininet1.assignSwController( sw="s" + str( i ),
ip=main.Cluster.getIps(),
port='6653' )
time.sleep(main.mnCfgSleep)
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully assign switches to controllers",
onfail="Failed to assign switches to controllers" )
def CASE12( self, main ):
"""
Tests using through ONOS CLI handles
"""
main.case( "Test some onos commands through CLI. ")
main.log.debug( main.Cluster.active( 0 ).CLI.sendline( "summary" ) )
main.log.debug( main.Cluster.active( 1 ).CLI.sendline( "devices" ) )
def CASE22( self, main ):
"""
Tests using ONOS REST API handles
"""
main.case( " Sample tests using ONOS REST API handles. ")
main.log.debug( main.Cluster.active( 0 ).REST.send( "/devices" ) )
main.log.debug( main.Cluster.active( 2 ).REST.apps() )
def CASE32( self, main ):
"""
Configure fwd app from .params json string with parameter configured
Check if configuration successful
Run pingall to check connectivity
Check ONOS log for warning/error/exceptions
"""
main.case( "Configure onos-app-fwd and check if configuration successful. " )
main.step( "Install reactive forwarding app." )
installResults = main.Cluster.active( 0 ).CLI.activateApp( "org.onosproject.fwd" )
utilities.assert_equals( expect=main.TRUE,
actual=installResults,
onpass= "Configure fwd successful",
onfail= "Configure fwd failed" )
main.step( "Run pingall to check connectivity. " )
pingResult = main.FALSE
passMsg = "Reactive Pingall test passed"
pingResult = main.Mininet1.pingall()
if not pingResult:
main.log.warn("First pingall failed. Trying again...")
pingResult = main.Mininet1.pingall()
passMsg += "on the second try"
utilities.assert_equals( expect=main.TRUE,
actual=pingResult,
onpass=passMsg,
onfail= "Reactive Pingall failed, " + "one or more ping pairs failed" )