blob: 5dbd2b63f68c28ebcdfbab98fe14b23cbda90810 [file] [log] [blame]
pingping-linffca7e22015-11-13 15:43:08 -08001# Testing the functionality of SDN-IP with single ONOS instance
2class USECASE_SdnipFunction_fsfw:
3
4 def __init__( self ):
5 self.default = ''
6 global branchName
7
pingping-linffca7e22015-11-13 15:43:08 -08008 def CASE100( self, main ):
9 """
10 Start mininet
11 """
12 import os
13 import imp
Jon Hall70b768c2016-04-19 08:38:29 -070014 main.case( "Setup the Mininet testbed" )
pingping-linffca7e22015-11-13 15:43:08 -080015 main.dependencyPath = main.testDir + \
16 main.params[ 'DEPENDENCY' ][ 'path' ]
17 main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
18
19 main.step( "Starting Mininet Topology" )
20 topology = main.dependencyPath + main.topology
Jon Hall6e9897d2016-02-29 14:41:32 -080021 topoResult = main.Mininet.startNet( topoFile=topology )
22 utilities.assert_equals( expect=main.TRUE,
23 actual=topoResult,
24 onpass="Successfully loaded topology",
25 onfail="Failed to load topology" )
pingping-linffca7e22015-11-13 15:43:08 -080026 # Exit if topology did not load properly
27 if not topoResult:
28 main.cleanup()
29 main.exit()
pingping-lin14776632015-12-16 12:05:30 -080030 main.step( "Connect switches to FSFW" )
pingping-linffca7e22015-11-13 15:43:08 -080031
32 global ONOS1Ip
33 ONOS1Ip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
pingping-lin8c178802015-11-30 17:25:43 -080034 global fsfwIp
pingping-line9107e42015-11-30 19:19:38 -080035 # TDOO: there is some setup sequence issue, will fix it later
36 # fsfwIp = os.getenv( main.params[ 'CTRL' ][ 'ipN' ] )
37 fsfwIp = main.params[ 'CTRL' ][ 'fsfwIp' ]
pingping-lin15fa4be2015-11-30 18:27:58 -080038 global fsfwPort
pingping-line9107e42015-11-30 19:19:38 -080039 fsfwPort = main.params[ 'CTRL' ][ 'fsfwPort' ]
pingping-lin8c178802015-11-30 17:25:43 -080040
pingping-linffca7e22015-11-13 15:43:08 -080041 # connect all switches to controller
42 swResult = main.TRUE
43 for i in range ( 1, int( main.params['config']['switchNum'] ) + 1 ):
44 sw = "sw%s" % ( i )
pingping-lin15fa4be2015-11-30 18:27:58 -080045 swResult = swResult and main.Mininet.assignSwController( sw, fsfwIp,
Jon Hall6e9897d2016-02-29 14:41:32 -080046 port=fsfwPort )
47 utilities.assert_equals( expect=main.TRUE,
48 actual=swResult,
49 onpass="Successfully connect all switches to ONOS",
50 onfail="Failed to connect all switches to ONOS" )
pingping-linffca7e22015-11-13 15:43:08 -080051 if not swResult:
52 main.cleanup()
53 main.exit()
54
55 main.step( "Set up tunnel from Mininet node to onos node" )
56 forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', ONOS1Ip )
Jon Hall6e9897d2016-02-29 14:41:32 -080057 command = 'ssh -nNT -o "PasswordAuthentication no"'
58 command += ' -o "StrictHostKeyChecking no" -l sdn'
59 command += ' -L %s %s & ' % ( forwarding1, ONOS1Ip )
pingping-linffca7e22015-11-13 15:43:08 -080060
61 tunnelResult = main.TRUE
62 tunnelResult = main.Mininet.node( "root", command )
Jon Hall6e9897d2016-02-29 14:41:32 -080063 utilities.assert_equals( expect=True,
64 actual=( "PasswordAuthentication" in tunnelResult ),
65 onpass="Created tunnel succeeded",
66 onfail="Create tunnel failed" )
pingping-linffca7e22015-11-13 15:43:08 -080067 if ("PasswordAuthentication" not in tunnelResult) :
68 main.cleanup()
69 main.exit()
70
pingping-linffca7e22015-11-13 15:43:08 -080071 def CASE101( self, main ):
72 """
73 Package ONOS and install it
74 Startup sequence:
75 cell <name>
76 onos-verify-cell
77 onos-package
78 onos-install -f
79 onos-wait-for-start
80 """
81 import json
82 import time
Jon Hall6e9897d2016-02-29 14:41:32 -080083 import os
pingping-linffca7e22015-11-13 15:43:08 -080084 from operator import eq
85
Jon Hall70b768c2016-04-19 08:38:29 -070086 main.case( "Setting up ONOS environment" )
pingping-linffca7e22015-11-13 15:43:08 -080087
88 cellName = main.params[ 'ENV' ][ 'cellName' ]
Jon Hall6e9897d2016-02-29 14:41:32 -080089 global ONOS1Ip
90 ONOS1Ip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
91 ipList = [ ONOS1Ip ]
92
Jon Hall70b768c2016-04-19 08:38:29 -070093 main.step( "Copying config files" )
94 src = os.path.dirname( main.testFile ) + "/network-cfg.json"
95 dst = main.ONOSbench.home + "/tools/package/config/network-cfg.json"
96 status = main.ONOSbench.scp( main.ONOSbench, src, dst, direction="to" )
97 utilities.assert_equals( expect=main.TRUE,
98 actual=status,
99 onpass="Copy config file succeeded",
100 onfail="Copy config file failed" )
101
Jon Hall6e9897d2016-02-29 14:41:32 -0800102 main.step( "Create cell file" )
103 cellAppString = main.params[ 'ENV' ][ 'appString' ]
104 main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName,
105 main.Mininet.ip_address,
106 cellAppString, ipList )
pingping-linffca7e22015-11-13 15:43:08 -0800107
108 main.step( "Applying cell variable to environment" )
109 cellResult = main.ONOSbench.setCell( cellName )
Jon Hall6e9897d2016-02-29 14:41:32 -0800110 utilities.assert_equals( expect=main.TRUE,
111 actual=cellResult,
112 onpass="Set cell succeeded",
113 onfail="Set cell failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800114
Jon Hall70b768c2016-04-19 08:38:29 -0700115 main.step( "Verify cell connectivity" )
pingping-linffca7e22015-11-13 15:43:08 -0800116 verifyResult = main.ONOSbench.verifyCell()
Jon Hall6e9897d2016-02-29 14:41:32 -0800117 utilities.assert_equals( expect=main.TRUE,
118 actual=verifyResult,
119 onpass="Verify cell succeeded",
120 onfail="Verify cell failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800121
122 branchName = main.ONOSbench.getBranchName()
123 main.log.report( "ONOS is on branch: " + branchName )
124
Jon Hall6509dbf2016-06-21 17:01:17 -0700125 main.step( "Uninstalling ONOS" )
pingping-linffca7e22015-11-13 15:43:08 -0800126 uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
Jon Hall6e9897d2016-02-29 14:41:32 -0800127 utilities.assert_equals( expect=main.TRUE,
128 actual=uninstallResult,
129 onpass="Uninstall ONOS succeeded",
130 onfail="Uninstall ONOS failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800131
Jon Hall6e9897d2016-02-29 14:41:32 -0800132 main.ONOSbench.getVersion( report=True )
pingping-linffca7e22015-11-13 15:43:08 -0800133
134 main.step( "Creating ONOS package" )
Jon Hallbd60ea02016-08-23 10:03:59 -0700135 packageResult = main.ONOSbench.buckBuild()
Jon Hall6e9897d2016-02-29 14:41:32 -0800136 utilities.assert_equals( expect=main.TRUE,
137 actual=packageResult,
138 onpass="Package ONOS succeeded",
139 onfail="Package ONOS failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800140
141 main.step( "Installing ONOS package" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800142 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
143 node=ONOS1Ip )
144 utilities.assert_equals( expect=main.TRUE,
145 actual=onos1InstallResult,
146 onpass="Install ONOS succeeded",
147 onfail="Install ONOS failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800148
149 main.step( "Checking if ONOS is up yet" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800150 onos1UpResult = main.ONOSbench.isup( ONOS1Ip, timeout=420 )
151 utilities.assert_equals( expect=main.TRUE,
152 actual=onos1UpResult,
153 onpass="ONOS is up",
154 onfail="ONOS is NOT up" )
pingping-linffca7e22015-11-13 15:43:08 -0800155
156 main.step( "Checking if ONOS CLI is ready" )
suibin zhangc2a4b012016-05-23 16:48:19 -0700157 cliResult = main.ONOScli1.startOnosCli( ONOS1Ip,
Jon Hall6e9897d2016-02-29 14:41:32 -0800158 commandlineTimeout=100,
159 onosStartTimeout=600 )
160 utilities.assert_equals( expect=main.TRUE,
161 actual=cliResult,
162 onpass="ONOS CLI is ready",
163 onfail="ONOS CLI is not ready" )
pingping-linffca7e22015-11-13 15:43:08 -0800164
Jon Hall6e9897d2016-02-29 14:41:32 -0800165 for i in range( 10 ):
166 ready = True
suibin zhangc2a4b012016-05-23 16:48:19 -0700167 output = main.ONOScli1.summary()
Jon Hall6e9897d2016-02-29 14:41:32 -0800168 if not output:
169 ready = False
170 if ready:
171 break
172 time.sleep( 30 )
173 utilities.assert_equals( expect=True, actual=ready,
174 onpass="ONOS summary command succeded",
175 onfail="ONOS summary command failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800176
Jon Hall6e9897d2016-02-29 14:41:32 -0800177 if not ready:
178 main.log.error( "ONOS startup failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800179 main.cleanup()
180 main.exit()
181
182 main.log.info( "Get links in the network" )
183 time.sleep( int ( main.params['timers']['TopoDiscovery'] ) )
suibin zhangc2a4b012016-05-23 16:48:19 -0700184 summaryResult = main.ONOScli1.summary()
pingping-linffca7e22015-11-13 15:43:08 -0800185 linkNum = json.loads( summaryResult )[ "links" ]
suibin zhangc2a4b012016-05-23 16:48:19 -0700186 listResult = main.ONOScli1.links( jsonFormat=False )
Jon Hall6e9897d2016-02-29 14:41:32 -0800187 main.log.info( listResult )
pingping-linffca7e22015-11-13 15:43:08 -0800188 if linkNum < 100:
Jon Hall6e9897d2016-02-29 14:41:32 -0800189 main.log.error( "Link number is wrong!" )
190 time.sleep( int( main.params['timers']['TopoDiscovery'] ) )
suibin zhangc2a4b012016-05-23 16:48:19 -0700191 listResult = main.ONOScli1.links( jsonFormat=False )
pingping-linffca7e22015-11-13 15:43:08 -0800192 main.log.info( listResult )
193 main.cleanup()
194 main.exit()
195
pingping-linffca7e22015-11-13 15:43:08 -0800196 main.step( "Activate sdn-ip application" )
suibin zhangc2a4b012016-05-23 16:48:19 -0700197 activeSDNIPresult = main.ONOScli1.activateApp( "org.onosproject.sdnip" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800198 utilities.assert_equals( expect=main.TRUE,
199 actual=activeSDNIPresult,
200 onpass="Activate SDN-IP succeeded",
201 onfail="Activate SDN-IP failed" )
pingping-linffca7e22015-11-13 15:43:08 -0800202 if not activeSDNIPresult:
203 main.log.info( "Activate SDN-IP failed!" )
204 main.cleanup()
205 main.exit()
206
207
Jon Hall6e9897d2016-02-29 14:41:32 -0800208 main.log.info( "Wait for SDN-IP to finish installing connectivity intents " +
209 "and for the BGP paths in the data plane to be ready..." )
pingping-linffca7e22015-11-13 15:43:08 -0800210 time.sleep( int( main.params[ 'timers' ][ 'SdnIpSetup' ] ) )
Jon Hall6e9897d2016-02-29 14:41:32 -0800211 main.log.info( "Wait for Quagga to finish delivery of all routes to each " +
212 "other and sdn-ip, plus finish installing all intents..." )
pingping-linffca7e22015-11-13 15:43:08 -0800213 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
214 time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
215
216
217 def CASE102( self, main ):
218 '''
219 This test case is to load the methods from other Python files.
220 '''
221 main.case( "Loading methods from other Python file" )
222 # load the methods from other file
223 wrapperFile = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
224 main.Functions = imp.load_source( wrapperFile,
225 main.dependencyPath +
226 wrapperFile +
227 ".py" )
228
229
230 def CASE1( self, main ):
231 '''
232 ping test from 3 bgp peers to BGP speaker
233 '''
234
235 main.case( "Ping tests between BGP peers and speakers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800236 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
237 peers=["pr64514", "pr64515", "pr64516"],
238 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800239
240
241 def CASE2( self, main ):
242 '''
243 point-to-point intents test for each BGP peer and BGP speaker pair
244 '''
Jon Hall6e9897d2016-02-29 14:41:32 -0800245 import time
pingping-linffca7e22015-11-13 15:43:08 -0800246 main.case( "Check point-to-point intents" )
247 main.log.info( "There are %s BGP peers in total "
248 % main.params[ 'config' ][ 'peerNum' ] )
249 main.step( "Check P2P intents number from ONOS CLI" )
250
suibin zhangc2a4b012016-05-23 16:48:19 -0700251 getIntentsResult = main.ONOScli1.intents( jsonFormat=True )
pingping-linffca7e22015-11-13 15:43:08 -0800252 bgpIntentsActualNum = \
253 main.QuaggaCliSpeaker1.extractActualBgpIntentNum( getIntentsResult )
254 bgpIntentsExpectedNum = int( main.params[ 'config' ][ 'peerNum' ] ) * 6
Jon Hall6e9897d2016-02-29 14:41:32 -0800255 if bgpIntentsActualNum != bgpIntentsExpectedNum:
256 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
suibin zhangc2a4b012016-05-23 16:48:19 -0700257 getIntentsResult = main.ONOScli1.intents( jsonFormat=True )
Jon Hall6e9897d2016-02-29 14:41:32 -0800258 bgpIntentsActualNum = \
259 main.QuaggaCliSpeaker1.extractActualBgpIntentNum( getIntentsResult )
pingping-linffca7e22015-11-13 15:43:08 -0800260 main.log.info( "bgpIntentsExpected num is:" )
261 main.log.info( bgpIntentsExpectedNum )
262 main.log.info( "bgpIntentsActual num is:" )
263 main.log.info( bgpIntentsActualNum )
264 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800265 expect=True,
266 actual=eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
267 onpass="PointToPointIntent Intent Num is correct!",
268 onfail="PointToPointIntent Intent Num is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800269
270
271 def CASE3( self, main ):
272 '''
273 routes and intents check to all BGP peers
274 '''
Jon Hall6e9897d2016-02-29 14:41:32 -0800275 import time
pingping-linffca7e22015-11-13 15:43:08 -0800276 main.case( "Check routes and M2S intents to all BGP peers" )
277
278 allRoutesExpected = []
279 allRoutesExpected.append( "4.0.0.0/24" + "/" + "10.0.4.1" )
280 allRoutesExpected.append( "5.0.0.0/24" + "/" + "10.0.5.1" )
281 allRoutesExpected.append( "6.0.0.0/24" + "/" + "10.0.6.1" )
282
suibin zhangc2a4b012016-05-23 16:48:19 -0700283 getRoutesResult = main.ONOScli1.routes( jsonFormat=True )
pingping-linffca7e22015-11-13 15:43:08 -0800284 allRoutesActual = \
285 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
286 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
287 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800288 if allRoutesStrActual != allRoutesStrExpected:
289 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
suibin zhangc2a4b012016-05-23 16:48:19 -0700290 getRoutesResult = main.ONOScli1.routes( jsonFormat=True )
Jon Hall6e9897d2016-02-29 14:41:32 -0800291 allRoutesActual = \
292 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
293 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
pingping-linffca7e22015-11-13 15:43:08 -0800294
295 main.step( "Check routes installed" )
296 main.log.info( "Routes expected:" )
297 main.log.info( allRoutesStrExpected )
298 main.log.info( "Routes get from ONOS CLI:" )
299 main.log.info( allRoutesStrActual )
300 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800301 expect=allRoutesStrExpected, actual=allRoutesStrActual,
302 onpass="Routes are correct!",
303 onfail="Routes are wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800304
305 main.step( "Check M2S intents installed" )
suibin zhangc2a4b012016-05-23 16:48:19 -0700306 getIntentsResult = main.ONOScli1.intents( jsonFormat=True )
pingping-linffca7e22015-11-13 15:43:08 -0800307 routeIntentsActualNum = \
308 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
309 routeIntentsExpectedNum = 3
Jon Hall6e9897d2016-02-29 14:41:32 -0800310 if routeIntentsActualNum != routeIntentsExpectedNum:
311 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
suibin zhangc2a4b012016-05-23 16:48:19 -0700312 getIntentsResult = main.ONOScli1.intents( jsonFormat=True )
Jon Hall6e9897d2016-02-29 14:41:32 -0800313 routeIntentsActualNum = \
314 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
pingping-linffca7e22015-11-13 15:43:08 -0800315
316 main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
317 main.log.info( routeIntentsExpectedNum )
318 main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
319 main.log.info( routeIntentsActualNum )
320 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800321 expect=routeIntentsExpectedNum,
322 actual=routeIntentsActualNum,
323 onpass="MultiPointToSinglePoint Intent Num is correct!",
324 onfail="MultiPointToSinglePoint Intent Num is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800325
326 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800327 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
328 main.FALSE,
329 kwargs={'isPENDING':False},
330 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800331 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800332 expect=main.TRUE,
333 actual=flowCheck,
334 onpass="Flow status is correct!",
335 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800336
337
338 def CASE4( self, main ):
339 '''
340 Ping test in data plane for each route
341 '''
342 main.case( "Ping test for each route, all hosts behind BGP peers" )
343 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800344 hosts=["host64514", "host64515", "host64516"],
345 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800346
347
348 def CASE5( self, main ):
349 '''
350 Cut links to peers one by one, check routes/intents
351 '''
352 import time
353 main.case( "Bring down links and check routes/intents" )
354 main.step( "Bring down the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800355 linkResult1 = main.Mininet.link( END1="sw32", END2="pr64514",
356 OPTION="down" )
357 utilities.assertEquals( expect=main.TRUE,
358 actual=linkResult1,
359 onpass="Bring down link succeeded!",
360 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800361
362 if linkResult1 == main.TRUE:
363 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
364 main.Functions.checkRouteNum( main, 2 )
365 main.Functions.checkM2SintentNum( main, 2 )
366 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800367 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800368 main.cleanup()
369 main.exit()
370
371 main.step( "Bring down the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800372 linkResult2 = main.Mininet.link( END1="sw8", END2="pr64515",
373 OPTION="down" )
374 utilities.assertEquals( expect=main.TRUE,
375 actual=linkResult2,
376 onpass="Bring down link succeeded!",
377 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800378 if linkResult2 == main.TRUE:
379 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
380 main.Functions.checkRouteNum( main, 1 )
381 main.Functions.checkM2SintentNum( main, 1 )
382 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800383 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800384 main.cleanup()
385 main.exit()
386
387 main.step( "Bring down the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800388 linkResult3 = main.Mininet.link( END1="sw28", END2="pr64516",
389 OPTION="down" )
390 utilities.assertEquals( expect=main.TRUE,
391 actual=linkResult3,
392 onpass="Bring down link succeeded!",
393 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800394 if linkResult3 == main.TRUE:
395 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
396 main.Functions.checkRouteNum( main, 0 )
397 main.Functions.checkM2SintentNum( main, 0 )
398 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800399 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800400 main.cleanup()
401 main.exit()
402
403 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800404 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
405 main.FALSE,
406 kwargs={'isPENDING':False},
407 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800408 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800409 expect=main.TRUE,
410 actual=flowCheck,
411 onpass="Flow status is correct!",
412 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800413
414 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800415 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
416 peers=["pr64514", "pr64515", "pr64516"],
417 expectAllSuccess=False )
pingping-linffca7e22015-11-13 15:43:08 -0800418 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800419 hosts=["host64514", "host64515", "host64516"],
420 expectAllSuccess=False )
pingping-linffca7e22015-11-13 15:43:08 -0800421
422
423 def CASE6( self, main ):
424 '''
425 Recover links to peers one by one, check routes/intents
426 '''
427 import time
428 main.case( "Bring up links and check routes/intents" )
429 main.step( "Bring up the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800430 linkResult1 = main.Mininet.link( END1="sw32", END2="pr64514",
431 OPTION="up" )
432 utilities.assertEquals( expect=main.TRUE,
433 actual=linkResult1,
434 onpass="Bring up link succeeded!",
435 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800436 if linkResult1 == main.TRUE:
437 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
438 main.Functions.checkRouteNum( main, 1 )
439 main.Functions.checkM2SintentNum( main, 1 )
440 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800441 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800442 main.cleanup()
443 main.exit()
444
445 main.step( "Bring up the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800446 linkResult2 = main.Mininet.link( END1="sw8", END2="pr64515",
447 OPTION="up" )
448 utilities.assertEquals( expect=main.TRUE,
449 actual=linkResult2,
450 onpass="Bring up link succeeded!",
451 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800452 if linkResult2 == main.TRUE:
453 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
454 main.Functions.checkRouteNum( main, 2 )
455 main.Functions.checkM2SintentNum( main, 2 )
456 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800457 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800458 main.cleanup()
459 main.exit()
460
461 main.step( "Bring up the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800462 linkResult3 = main.Mininet.link( END1="sw28", END2="pr64516",
463 OPTION="up" )
464 utilities.assertEquals( expect=main.TRUE,
465 actual=linkResult3,
466 onpass="Bring up link succeeded!",
467 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800468 if linkResult3 == main.TRUE:
469 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
470 main.Functions.checkRouteNum( main, 3 )
471 main.Functions.checkM2SintentNum( main, 3 )
472 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800473 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800474 main.cleanup()
475 main.exit()
476
477 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800478 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
479 main.FALSE,
480 kwargs={'isPENDING':False},
481 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800482 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800483 expect=main.TRUE,
484 actual=flowCheck,
485 onpass="Flow status is correct!",
486 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800487
488 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800489 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
490 peers=["pr64514", "pr64515", "pr64516"],
491 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800492 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800493 hosts=["host64514", "host64515", "host64516"],
494 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800495
496
497 def CASE7( self, main ):
498 '''
499 Shut down a edge switch, check P-2-P and M-2-S intents, ping test
500 '''
501 import time
502 main.case( "Stop edge sw32,check P-2-P and M-2-S intents, ping test" )
503 main.step( "Stop sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800504 result = main.Mininet.switch( SW="sw32", OPTION="stop" )
505 utilities.assertEquals( expect=main.TRUE, actual=result,
506 onpass="Stopping switch succeeded!",
507 onfail="Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800508
509 if result == main.TRUE:
510 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
511 main.Functions.checkRouteNum( main, 2 )
512 main.Functions.checkM2SintentNum( main, 2 )
513 main.Functions.checkP2PintentNum( main, 12 )
514 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800515 main.log.error( "Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800516 main.cleanup()
517 main.exit()
518
519 main.step( "Check ping between hosts behind BGP peers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800520 result1 = main.Mininet.pingHost( src="host64514", target="host64515" )
521 result2 = main.Mininet.pingHost( src="host64515", target="host64516" )
522 result3 = main.Mininet.pingHost( src="host64514", target="host64516" )
pingping-linffca7e22015-11-13 15:43:08 -0800523
524 pingResult1 = ( result1 == main.FALSE ) and ( result2 == main.TRUE ) \
525 and ( result3 == main.FALSE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800526 utilities.assert_equals( expect=True, actual=pingResult1,
527 onpass="Ping test result is correct",
528 onfail="Ping test result is wrong" )
pingping-linffca7e22015-11-13 15:43:08 -0800529
530 if pingResult1 == False:
531 main.cleanup()
532 main.exit()
533
534 main.step( "Check ping between BGP peers and speakers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800535 result4 = main.Mininet.pingHost( src="speaker1", target="pr64514" )
536 result5 = main.Mininet.pingHost( src="speaker1", target="pr64515" )
537 result6 = main.Mininet.pingHost( src="speaker1", target="pr64516" )
pingping-linffca7e22015-11-13 15:43:08 -0800538
539 pingResult2 = ( result4 == main.FALSE ) and ( result5 == main.TRUE ) \
540 and ( result6 == main.TRUE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800541 utilities.assert_equals( expect=True, actual=pingResult2,
542 onpass="Speaker1 ping peers successful",
543 onfail="Speaker1 ping peers NOT successful" )
pingping-linffca7e22015-11-13 15:43:08 -0800544
545 if pingResult2 == False:
546 main.cleanup()
547 main.exit()
548
549 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800550 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
551 main.FALSE,
552 kwargs={'isPENDING':False},
553 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800554 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800555 expect=main.TRUE,
556 actual=flowCheck,
557 onpass="Flow status is correct!",
558 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800559
560
561 def CASE8( self, main ):
562 '''
563 Bring up the edge switch (sw32) which was shut down in CASE7,
564 check P-2-P and M-2-S intents, ping test
565 '''
566 import time
567 main.case( "Start the edge sw32, check P-2-P and M-2-S intents, ping test" )
568 main.step( "Start sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800569 result1 = main.Mininet.switch( SW="sw32", OPTION="start" )
pingping-linffca7e22015-11-13 15:43:08 -0800570 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800571 expect=main.TRUE,
572 actual=result1,
573 onpass="Starting switch succeeded!",
574 onfail="Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800575
pingping-lin6cae4422016-01-04 10:00:35 -0800576 result2 = main.Mininet.assignSwController( "sw32", fsfwIp,
Jon Hall6e9897d2016-02-29 14:41:32 -0800577 port=fsfwPort )
pingping-linffca7e22015-11-13 15:43:08 -0800578 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800579 expect=main.TRUE,
580 actual=result2,
581 onpass="Connect switch to FSFW succeeded!",
582 onfail="Connect switch to FSFW failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800583
584 if result1 and result2:
585 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
586 main.Functions.checkRouteNum( main, 3 )
587 main.Functions.checkM2SintentNum( main, 3 )
588 main.Functions.checkP2PintentNum( main, 18 )
589 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800590 main.log.error( "Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800591 main.cleanup()
592 main.exit()
593
594 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800595 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
596 main.FALSE,
597 kwargs={'isPENDING':False},
598 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800599 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800600 expect=main.TRUE,
601 actual=flowCheck,
602 onpass="Flow status is correct!",
603 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800604
605 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800606 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
607 peers=["pr64514", "pr64515", "pr64516"],
608 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800609 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800610 hosts=["host64514", "host64515", "host64516"],
611 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800612
613
614 def CASE9( self, main ):
615 '''
616 Bring down a switch in best path, check:
617 route number, P2P intent number, M2S intent number, ping test
618 '''
619 main.case( "Stop sw11 located in best path, \
620 check route number, P2P intent number, M2S intent number, ping test" )
621
622 main.log.info( "Check the flow number correctness before stopping sw11" )
suibin zhangc349f3c2016-05-24 16:21:24 -0700623 main.Functions.checkFlowNum( main, "sw11", 19 )
624 main.Functions.checkFlowNum( main, "sw1", 9 )
625 main.Functions.checkFlowNum( main, "sw7", 6 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800626 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
627 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
628 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linffca7e22015-11-13 15:43:08 -0800629
630 main.step( "Stop sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800631 result = main.Mininet.switch( SW="sw11", OPTION="stop" )
632 utilities.assertEquals( expect=main.TRUE, actual=result,
633 onpass="Stopping switch succeeded!",
634 onfail="Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800635 if result:
636 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
637 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
638 main.Functions.checkRouteNum( main, 3 )
639 main.Functions.checkM2SintentNum( main, 3 )
640 main.Functions.checkP2PintentNum( main, 18 )
641 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800642 main.log.error( "Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800643 main.cleanup()
644 main.exit()
645
646 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800647 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
648 main.FALSE,
649 kwargs={'isPENDING':False},
650 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800651 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800652 expect=main.TRUE,
653 actual=flowCheck,
654 onpass="Flow status is correct!",
655 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800656 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800657 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
658 peers=["pr64514", "pr64515", "pr64516"],
659 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800660 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800661 hosts=["host64514", "host64515", "host64516"],
662 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800663
664
665 def CASE10( self, main ):
666 '''
667 Bring up the switch which was stopped in CASE9, check:
668 route number, P2P intent number, M2S intent number, ping test
669 '''
670 main.case( "Start sw11 which was stopped in CASE9, \
671 check route number, P2P intent number, M2S intent number, ping test" )
672
673 main.log.info( "Check the flow status before starting sw11" )
suibin zhangc349f3c2016-05-24 16:21:24 -0700674 main.Functions.checkFlowNum( main, "sw1", 17 )
675 main.Functions.checkFlowNum( main, "sw7", 8 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800676 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
677 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linffca7e22015-11-13 15:43:08 -0800678
679 main.step( "Start sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800680 result1 = main.Mininet.switch( SW="sw11", OPTION="start" )
681 utilities.assertEquals( expect=main.TRUE, actual=result1,
682 onpass="Starting switch succeeded!",
683 onfail="Starting switch failed!" )
pingping-lin6cae4422016-01-04 10:00:35 -0800684 result2 = main.Mininet.assignSwController( "sw11", fsfwIp,
Jon Hall6e9897d2016-02-29 14:41:32 -0800685 port=fsfwPort )
686 utilities.assertEquals( expect=main.TRUE, actual=result2,
687 onpass="Connect switch to FSFW succeeded!",
688 onfail="Connect switch to FSFW failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800689 if result1 and result2:
690 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
691 main.Functions.checkRouteNum( main, 3 )
692 main.Functions.checkM2SintentNum( main, 3 )
693 main.Functions.checkP2PintentNum( main, 18 )
694
695 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
696 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
697 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
698 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800699 main.log.error( "Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800700 main.cleanup()
701 main.exit()
702
703 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800704 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
705 main.FALSE,
706 kwargs={'isPENDING':False},
707 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800708 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800709 expect=main.TRUE,
710 actual=flowCheck,
711 onpass="Flow status is correct!",
712 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800713 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800714 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
715 peers=["pr64514", "pr64515", "pr64516"],
716 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800717 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800718 hosts=["host64514", "host64515", "host64516"],
719 expectAllSuccess=True )