blob: 5c1244eb73745943e1a4586e1595dfdc286c841a [file] [log] [blame]
# Testing the functionality of SDN-IP with single ONOS instance
class SDNIPfunction:
def __init__( self ):
self.default = ''
global branchName
# This case is to setup ONOS
def CASE100( self, main ):
"""
CASE100 is to compile ONOS and install it
Startup sequence:
cell <name>
onos-verify-cell
git pull
mvn clean install
onos-package
onos-install -f
onos-wait-for-start
"""
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
try:
cellName = main.params[ 'ENV' ][ 'cellName' ]
ONOS1Ip = main.params['CTRL']['ip1']
stepResult = main.testSetUp.envSetup( specificIp=ONOS1Ip )
except Exception as e:
main.testSetUp.envSetupException( e )
main.testSetUp.evnSetupConclusion( stepResult )
case1Result = main.testSetUp.ONOSSetUp( "", newCell=False, cellname=cellName )
if case1Result == main.FALSE:
main.cleanup()
main.exit()
def CASE4( self, main ):
"""
Test the SDN-IP functionality
allRoutesExpected: all expected routes for all BGP peers
routeIntentsExpected: all expected MultiPointToSinglePointIntent \
intents
bgpIntentsExpected: expected PointToPointIntent intents
allRoutesActual: all routes from ONOS LCI
routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
ONOS CLI
bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
"""
import json
import time
from operator import eq
from time import localtime, strftime
main.case( "This case is to testing the functionality of SDN-IP with \
single ONOS instance" )
SDNIPJSONFILEPATH = \
"~/ONOS/tools/package/config/sdnip.json"
# all expected routes for all BGP peers
allRoutesExpected = []
main.step( "Start to generate routes for all BGP peers" )
main.log.info( "Generate prefixes for host3" )
prefixesHost3 = main.QuaggaCliHost3.generatePrefixes( 3, 10 )
main.log.info( prefixesHost3 )
# generate route with next hop
for prefix in prefixesHost3:
allRoutesExpected.append( prefix + "/" + "192.168.20.1" )
routeIntentsExpectedHost3 = \
main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
SDNIPJSONFILEPATH )
main.log.info( "Generate prefixes for host4" )
prefixesHost4 = main.QuaggaCliHost4.generatePrefixes( 4, 10 )
main.log.info( prefixesHost4 )
# generate route with next hop
for prefix in prefixesHost4:
allRoutesExpected.append( prefix + "/" + "192.168.30.1" )
routeIntentsExpectedHost4 = \
main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
SDNIPJSONFILEPATH )
main.log.info( "Generate prefixes for host5" )
prefixesHost5 = main.QuaggaCliHost5.generatePrefixes( 5, 10 )
main.log.info( prefixesHost5 )
for prefix in prefixesHost5:
allRoutesExpected.append( prefix + "/" + "192.168.60.2" )
routeIntentsExpectedHost5 = \
main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
SDNIPJSONFILEPATH )
routeIntentsExpected = routeIntentsExpectedHost3 + \
routeIntentsExpectedHost4 + routeIntentsExpectedHost5
main.step( "Get links in the network" )
listResult = main.ONOScli1.links( jsonFormat = False )
main.log.info( listResult )
main.log.info( "Activate sdn-ip application" )
main.ONOScli1.activateApp( "org.onosproject.sdnip" )
# wait sdn-ip to finish installing connectivity intents, and the BGP
# paths in data plane are ready.
time.sleep( int( main.params[ 'timers' ][ 'SdnIpSetup' ] ) )
main.step( "Login all BGP peers and add routes into peers" )
main.log.info( "Login Quagga CLI on host3" )
main.QuaggaCliHost3.loginQuagga( "1.168.30.2" )
main.log.info( "Enter configuration model of Quagga CLI on host3" )
main.QuaggaCliHost3.enterConfig( 64514 )
main.log.info( "Add routes to Quagga on host3" )
main.QuaggaCliHost3.addRoutes( prefixesHost3, 1 )
main.log.info( "Login Quagga CLI on host4" )
main.QuaggaCliHost4.loginQuagga( "1.168.30.3" )
main.log.info( "Enter configuration model of Quagga CLI on host4" )
main.QuaggaCliHost4.enterConfig( 64516 )
main.log.info( "Add routes to Quagga on host4" )
main.QuaggaCliHost4.addRoutes( prefixesHost4, 1 )
main.log.info( "Login Quagga CLI on host5" )
main.QuaggaCliHost5.loginQuagga( "1.168.30.5" )
main.log.info( "Enter configuration model of Quagga CLI on host5" )
main.QuaggaCliHost5.enterConfig( 64521 )
main.log.info( "Add routes to Quagga on host5" )
main.QuaggaCliHost5.addRoutes( prefixesHost5, 1 )
for i in range( 101, 201 ):
prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
main.log.info( prefixesHostX )
for prefix in prefixesHostX:
allRoutesExpected.append( prefix + "/" + "192.168.40."
+ str( i - 100 ) )
routeIntentsExpectedHostX = \
main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
prefixesHostX, "192.168.40." + str( i - 100 ),
"00:00:%02d:00:00:90" % ( i - 101 ), SDNIPJSONFILEPATH )
routeIntentsExpected = routeIntentsExpected + \
routeIntentsExpectedHostX
main.log.info( "Login Quagga CLI on host" + str( i ) )
QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
QuaggaCliHostX.loginQuagga( "1.168.30." + str( i ) )
main.log.info( \
"Enter configuration model of Quagga CLI on host" + str( i ) )
QuaggaCliHostX.enterConfig( 65000 + i - 100 )
main.log.info( "Add routes to Quagga on host" + str( i ) )
QuaggaCliHostX.addRoutes( prefixesHostX, 1 )
# wait Quagga to finish delivery all routes to each other and to sdn-ip,
# plus finish installing all intents.
time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
# get routes inside SDN-IP
getRoutesResult = main.ONOScli1.routes( jsonFormat = True )
allRoutesActual = \
main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
allRoutesStrExpected = str( sorted( allRoutesExpected ) )
allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
main.step( "Check routes installed" )
main.log.info( "Routes expected:" )
main.log.info( allRoutesStrExpected )
main.log.info( "Routes get from ONOS CLI:" )
main.log.info( allRoutesStrActual )
utilities.assertEquals( \
expect = allRoutesStrExpected, actual = allRoutesStrActual,
onpass = "***Routes in SDN-IP are correct!***",
onfail = "***Routes in SDN-IP are wrong!***" )
getIntentsResult = main.ONOScli1.intents( jsonFormat = True )
main.step( "Check MultiPointToSinglePointIntent intents installed" )
# routeIntentsExpected are generated when generating routes
# get route intents from ONOS CLI
routeIntentsActualNum = \
main.QuaggaCliHost3.extractActualRouteIntentNum( getIntentsResult )
routeIntentsExpectedNum = 1030
main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
main.log.info( routeIntentsExpectedNum )
main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
main.log.info( routeIntentsActualNum )
utilities.assertEquals( \
expect = True,
actual = eq( routeIntentsExpectedNum, routeIntentsActualNum ),
onpass = "***MultiPointToSinglePoint Intent Num in SDN-IP is \
correct!***",
onfail = "***MultiPointToSinglePoint Intent Num in SDN-IP is \
wrong!***" )
main.step( "Check BGP PointToPointIntent intents installed" )
bgpIntentsActualNum = \
main.QuaggaCliHost3.extractActualBgpIntentNum( getIntentsResult )
bgpIntentsExpectedNum = 624
main.log.info( "bgpIntentsExpected num is:" )
main.log.info( bgpIntentsExpectedNum )
main.log.info( "bgpIntentsActual num is:" )
main.log.info( bgpIntentsActualNum )
utilities.assertEquals( \
expect = True,
actual = eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
onpass = "***PointToPointIntent Intent Num in SDN-IP are correct!***",
onfail = "***PointToPointIntent Intent Num in SDN-IP are wrong!***" )
#============================= Ping Test ========================
pingTestScript = "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/CASE4-ping-as2host.sh"
pingTestResultsFile = \
"~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/log/CASE4-ping-results-before-delete-routes-"\
+ strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingTestResults = main.QuaggaCliHost.pingTest( \
"1.168.30.100", pingTestScript, pingTestResultsFile )
main.log.info( pingTestResults )
# wait to finish the ping test
time.sleep( int( main.params[ 'timers' ][ 'PingTestWithRoutes' ] ) )
#============================= Deleting Routes ==================
main.step( "Check deleting routes installed" )
main.QuaggaCliHost3.deleteRoutes( prefixesHost3, 1 )
main.QuaggaCliHost4.deleteRoutes( prefixesHost4, 1 )
main.QuaggaCliHost5.deleteRoutes( prefixesHost5, 1 )
for i in range( 101, 201 ):
prefixesHostX = main.QuaggaCliHost.generatePrefixes( str( i ), 10 )
main.log.info( prefixesHostX )
QuaggaCliHostX = getattr( main, ( 'QuaggaCliHost' + str( i ) ) )
QuaggaCliHostX.deleteRoutes( prefixesHostX, 1 )
# wait Quagga to finish delivery all routes to each other and to sdn-ip,
# plus finish un-installing all intents.
time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
getRoutesResult = main.ONOScli1.routes( jsonFormat = True )
allRoutesActual = \
main.QuaggaCliHost3.extractActualRoutesMaster( getRoutesResult )
main.log.info( "allRoutes_actual = " )
main.log.info( allRoutesActual )
utilities.assertEquals( \
expect = "[]", actual = str( allRoutesActual ),
onpass = "***Route number in SDN-IP is 0, correct!***",
onfail = "***Routes number in SDN-IP is not 0, wrong!***" )
main.step( "Check intents after deleting routes" )
getIntentsResult = main.ONOScli1.intents( jsonFormat = True )
routeIntentsActualNum = \
main.QuaggaCliHost3.extractActualRouteIntentNum(
getIntentsResult )
main.log.info( "route Intents Actual Num is: " )
main.log.info( routeIntentsActualNum )
utilities.assertEquals( \
expect = 0, actual = routeIntentsActualNum,
onpass = "***MultiPointToSinglePoint Intent Num in SDN-IP is 0, \
correct!***",
onfail = "***MultiPointToSinglePoint Intent Num in SDN-IP is not 0, \
wrong!***" )
pingTestScript = "~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/CASE4-ping-as2host.sh"
pingTestResultsFile = \
"~/OnosSystemTest/TestON/tests/SDNIPfunction/dependencies/log/CASE4-ping-results-after-delete-routes-"\
+ strftime( "%Y-%m-%d_%H:%M:%S", localtime() ) + ".txt"
pingTestResults = main.QuaggaCliHost.pingTest( \
"1.168.30.100", pingTestScript, pingTestResultsFile )
main.log.info( pingTestResults )
# wait to finish the ping test
time.sleep( int( main.params[ 'timers' ][ 'PingTestWithoutRoutes' ] ) )