blob: e931a0b99dbd8c0fc3071d25c945be4cd40cebb1 [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
125 main.log.step( "Uninstalling ONOS" )
126 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 Hall6e9897d2016-02-29 14:41:32 -0800135 packageResult = main.ONOSbench.onosPackage( opTimeout=500 )
136 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" )
157 cliResult = main.ONOScli.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
167 output = main.ONOScli.summary()
168 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'] ) )
184 summaryResult = main.ONOScli.summary()
185 linkNum = json.loads( summaryResult )[ "links" ]
Jon Hall6e9897d2016-02-29 14:41:32 -0800186 listResult = main.ONOScli.links( jsonFormat=False )
187 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'] ) )
191 listResult = main.ONOScli.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" )
197 activeSDNIPresult = main.ONOScli.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
Jon Hall6e9897d2016-02-29 14:41:32 -0800251 getIntentsResult = main.ONOScli.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'] ) )
257 bgpIntentsActualNum = \
258 main.QuaggaCliSpeaker1.extractActualBgpIntentNum( getIntentsResult )
pingping-linffca7e22015-11-13 15:43:08 -0800259 main.log.info( "bgpIntentsExpected num is:" )
260 main.log.info( bgpIntentsExpectedNum )
261 main.log.info( "bgpIntentsActual num is:" )
262 main.log.info( bgpIntentsActualNum )
263 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800264 expect=True,
265 actual=eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
266 onpass="PointToPointIntent Intent Num is correct!",
267 onfail="PointToPointIntent Intent Num is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800268
269
270 def CASE3( self, main ):
271 '''
272 routes and intents check to all BGP peers
273 '''
Jon Hall6e9897d2016-02-29 14:41:32 -0800274 import time
pingping-linffca7e22015-11-13 15:43:08 -0800275 main.case( "Check routes and M2S intents to all BGP peers" )
276
277 allRoutesExpected = []
278 allRoutesExpected.append( "4.0.0.0/24" + "/" + "10.0.4.1" )
279 allRoutesExpected.append( "5.0.0.0/24" + "/" + "10.0.5.1" )
280 allRoutesExpected.append( "6.0.0.0/24" + "/" + "10.0.6.1" )
281
Jon Hall6e9897d2016-02-29 14:41:32 -0800282 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-linffca7e22015-11-13 15:43:08 -0800283 allRoutesActual = \
284 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
285 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
286 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800287 if allRoutesStrActual != allRoutesStrExpected:
288 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
289 allRoutesActual = \
290 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
291 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
pingping-linffca7e22015-11-13 15:43:08 -0800292
293 main.step( "Check routes installed" )
294 main.log.info( "Routes expected:" )
295 main.log.info( allRoutesStrExpected )
296 main.log.info( "Routes get from ONOS CLI:" )
297 main.log.info( allRoutesStrActual )
298 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800299 expect=allRoutesStrExpected, actual=allRoutesStrActual,
300 onpass="Routes are correct!",
301 onfail="Routes are wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800302
303 main.step( "Check M2S intents installed" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800304 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-linffca7e22015-11-13 15:43:08 -0800305 routeIntentsActualNum = \
306 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
307 routeIntentsExpectedNum = 3
Jon Hall6e9897d2016-02-29 14:41:32 -0800308 if routeIntentsActualNum != routeIntentsExpectedNum:
309 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
310 routeIntentsActualNum = \
311 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
pingping-linffca7e22015-11-13 15:43:08 -0800312
313 main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
314 main.log.info( routeIntentsExpectedNum )
315 main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
316 main.log.info( routeIntentsActualNum )
317 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800318 expect=routeIntentsExpectedNum,
319 actual=routeIntentsActualNum,
320 onpass="MultiPointToSinglePoint Intent Num is correct!",
321 onfail="MultiPointToSinglePoint Intent Num is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800322
323 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800324 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
325 main.FALSE,
326 kwargs={'isPENDING':False},
327 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800328 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800329 expect=main.TRUE,
330 actual=flowCheck,
331 onpass="Flow status is correct!",
332 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800333
334
335 def CASE4( self, main ):
336 '''
337 Ping test in data plane for each route
338 '''
339 main.case( "Ping test for each route, all hosts behind BGP peers" )
340 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800341 hosts=["host64514", "host64515", "host64516"],
342 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800343
344
345 def CASE5( self, main ):
346 '''
347 Cut links to peers one by one, check routes/intents
348 '''
349 import time
350 main.case( "Bring down links and check routes/intents" )
351 main.step( "Bring down the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800352 linkResult1 = main.Mininet.link( END1="sw32", END2="pr64514",
353 OPTION="down" )
354 utilities.assertEquals( expect=main.TRUE,
355 actual=linkResult1,
356 onpass="Bring down link succeeded!",
357 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800358
359 if linkResult1 == main.TRUE:
360 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
361 main.Functions.checkRouteNum( main, 2 )
362 main.Functions.checkM2SintentNum( main, 2 )
363 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800364 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800365 main.cleanup()
366 main.exit()
367
368 main.step( "Bring down the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800369 linkResult2 = main.Mininet.link( END1="sw8", END2="pr64515",
370 OPTION="down" )
371 utilities.assertEquals( expect=main.TRUE,
372 actual=linkResult2,
373 onpass="Bring down link succeeded!",
374 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800375 if linkResult2 == main.TRUE:
376 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
377 main.Functions.checkRouteNum( main, 1 )
378 main.Functions.checkM2SintentNum( main, 1 )
379 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800380 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800381 main.cleanup()
382 main.exit()
383
384 main.step( "Bring down the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800385 linkResult3 = main.Mininet.link( END1="sw28", END2="pr64516",
386 OPTION="down" )
387 utilities.assertEquals( expect=main.TRUE,
388 actual=linkResult3,
389 onpass="Bring down link succeeded!",
390 onfail="Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800391 if linkResult3 == main.TRUE:
392 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
393 main.Functions.checkRouteNum( main, 0 )
394 main.Functions.checkM2SintentNum( main, 0 )
395 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800396 main.log.error( "Bring down link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800397 main.cleanup()
398 main.exit()
399
400 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800401 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
402 main.FALSE,
403 kwargs={'isPENDING':False},
404 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800405 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800406 expect=main.TRUE,
407 actual=flowCheck,
408 onpass="Flow status is correct!",
409 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800410
411 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800412 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
413 peers=["pr64514", "pr64515", "pr64516"],
414 expectAllSuccess=False )
pingping-linffca7e22015-11-13 15:43:08 -0800415 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800416 hosts=["host64514", "host64515", "host64516"],
417 expectAllSuccess=False )
pingping-linffca7e22015-11-13 15:43:08 -0800418
419
420 def CASE6( self, main ):
421 '''
422 Recover links to peers one by one, check routes/intents
423 '''
424 import time
425 main.case( "Bring up links and check routes/intents" )
426 main.step( "Bring up the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800427 linkResult1 = main.Mininet.link( END1="sw32", END2="pr64514",
428 OPTION="up" )
429 utilities.assertEquals( expect=main.TRUE,
430 actual=linkResult1,
431 onpass="Bring up link succeeded!",
432 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800433 if linkResult1 == main.TRUE:
434 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
435 main.Functions.checkRouteNum( main, 1 )
436 main.Functions.checkM2SintentNum( main, 1 )
437 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800438 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800439 main.cleanup()
440 main.exit()
441
442 main.step( "Bring up the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800443 linkResult2 = main.Mininet.link( END1="sw8", END2="pr64515",
444 OPTION="up" )
445 utilities.assertEquals( expect=main.TRUE,
446 actual=linkResult2,
447 onpass="Bring up link succeeded!",
448 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800449 if linkResult2 == main.TRUE:
450 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
451 main.Functions.checkRouteNum( main, 2 )
452 main.Functions.checkM2SintentNum( main, 2 )
453 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800454 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800455 main.cleanup()
456 main.exit()
457
458 main.step( "Bring up the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800459 linkResult3 = main.Mininet.link( END1="sw28", END2="pr64516",
460 OPTION="up" )
461 utilities.assertEquals( expect=main.TRUE,
462 actual=linkResult3,
463 onpass="Bring up link succeeded!",
464 onfail="Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800465 if linkResult3 == main.TRUE:
466 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
467 main.Functions.checkRouteNum( main, 3 )
468 main.Functions.checkM2SintentNum( main, 3 )
469 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800470 main.log.error( "Bring up link failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800471 main.cleanup()
472 main.exit()
473
474 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800475 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
476 main.FALSE,
477 kwargs={'isPENDING':False},
478 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800479 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800480 expect=main.TRUE,
481 actual=flowCheck,
482 onpass="Flow status is correct!",
483 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800484
485 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800486 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
487 peers=["pr64514", "pr64515", "pr64516"],
488 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800489 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800490 hosts=["host64514", "host64515", "host64516"],
491 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800492
493
494 def CASE7( self, main ):
495 '''
496 Shut down a edge switch, check P-2-P and M-2-S intents, ping test
497 '''
498 import time
499 main.case( "Stop edge sw32,check P-2-P and M-2-S intents, ping test" )
500 main.step( "Stop sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800501 result = main.Mininet.switch( SW="sw32", OPTION="stop" )
502 utilities.assertEquals( expect=main.TRUE, actual=result,
503 onpass="Stopping switch succeeded!",
504 onfail="Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800505
506 if result == main.TRUE:
507 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
508 main.Functions.checkRouteNum( main, 2 )
509 main.Functions.checkM2SintentNum( main, 2 )
510 main.Functions.checkP2PintentNum( main, 12 )
511 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800512 main.log.error( "Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800513 main.cleanup()
514 main.exit()
515
516 main.step( "Check ping between hosts behind BGP peers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800517 result1 = main.Mininet.pingHost( src="host64514", target="host64515" )
518 result2 = main.Mininet.pingHost( src="host64515", target="host64516" )
519 result3 = main.Mininet.pingHost( src="host64514", target="host64516" )
pingping-linffca7e22015-11-13 15:43:08 -0800520
521 pingResult1 = ( result1 == main.FALSE ) and ( result2 == main.TRUE ) \
522 and ( result3 == main.FALSE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800523 utilities.assert_equals( expect=True, actual=pingResult1,
524 onpass="Ping test result is correct",
525 onfail="Ping test result is wrong" )
pingping-linffca7e22015-11-13 15:43:08 -0800526
527 if pingResult1 == False:
528 main.cleanup()
529 main.exit()
530
531 main.step( "Check ping between BGP peers and speakers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800532 result4 = main.Mininet.pingHost( src="speaker1", target="pr64514" )
533 result5 = main.Mininet.pingHost( src="speaker1", target="pr64515" )
534 result6 = main.Mininet.pingHost( src="speaker1", target="pr64516" )
pingping-linffca7e22015-11-13 15:43:08 -0800535
536 pingResult2 = ( result4 == main.FALSE ) and ( result5 == main.TRUE ) \
537 and ( result6 == main.TRUE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800538 utilities.assert_equals( expect=True, actual=pingResult2,
539 onpass="Speaker1 ping peers successful",
540 onfail="Speaker1 ping peers NOT successful" )
pingping-linffca7e22015-11-13 15:43:08 -0800541
542 if pingResult2 == False:
543 main.cleanup()
544 main.exit()
545
546 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800547 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
548 main.FALSE,
549 kwargs={'isPENDING':False},
550 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800551 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800552 expect=main.TRUE,
553 actual=flowCheck,
554 onpass="Flow status is correct!",
555 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800556
557
558 def CASE8( self, main ):
559 '''
560 Bring up the edge switch (sw32) which was shut down in CASE7,
561 check P-2-P and M-2-S intents, ping test
562 '''
563 import time
564 main.case( "Start the edge sw32, check P-2-P and M-2-S intents, ping test" )
565 main.step( "Start sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800566 result1 = main.Mininet.switch( SW="sw32", OPTION="start" )
pingping-linffca7e22015-11-13 15:43:08 -0800567 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800568 expect=main.TRUE,
569 actual=result1,
570 onpass="Starting switch succeeded!",
571 onfail="Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800572
pingping-lin6cae4422016-01-04 10:00:35 -0800573 result2 = main.Mininet.assignSwController( "sw32", fsfwIp,
Jon Hall6e9897d2016-02-29 14:41:32 -0800574 port=fsfwPort )
pingping-linffca7e22015-11-13 15:43:08 -0800575 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800576 expect=main.TRUE,
577 actual=result2,
578 onpass="Connect switch to FSFW succeeded!",
579 onfail="Connect switch to FSFW failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800580
581 if result1 and result2:
582 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
583 main.Functions.checkRouteNum( main, 3 )
584 main.Functions.checkM2SintentNum( main, 3 )
585 main.Functions.checkP2PintentNum( main, 18 )
586 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800587 main.log.error( "Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800588 main.cleanup()
589 main.exit()
590
591 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800592 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
593 main.FALSE,
594 kwargs={'isPENDING':False},
595 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800596 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800597 expect=main.TRUE,
598 actual=flowCheck,
599 onpass="Flow status is correct!",
600 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800601
602 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800603 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
604 peers=["pr64514", "pr64515", "pr64516"],
605 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800606 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800607 hosts=["host64514", "host64515", "host64516"],
608 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800609
610
611 def CASE9( self, main ):
612 '''
613 Bring down a switch in best path, check:
614 route number, P2P intent number, M2S intent number, ping test
615 '''
616 main.case( "Stop sw11 located in best path, \
617 check route number, P2P intent number, M2S intent number, ping test" )
618
619 main.log.info( "Check the flow number correctness before stopping sw11" )
620 main.Functions.checkFlowNum( main, "sw11", 13 )
621 main.Functions.checkFlowNum( main, "sw1", 3 )
622 main.Functions.checkFlowNum( main, "sw7", 3 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800623 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
624 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
625 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linffca7e22015-11-13 15:43:08 -0800626
627 main.step( "Stop sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800628 result = main.Mininet.switch( SW="sw11", OPTION="stop" )
629 utilities.assertEquals( expect=main.TRUE, actual=result,
630 onpass="Stopping switch succeeded!",
631 onfail="Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800632 if result:
633 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
634 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
635 main.Functions.checkRouteNum( main, 3 )
636 main.Functions.checkM2SintentNum( main, 3 )
637 main.Functions.checkP2PintentNum( main, 18 )
638 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800639 main.log.error( "Stopping switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800640 main.cleanup()
641 main.exit()
642
643 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800644 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
645 main.FALSE,
646 kwargs={'isPENDING':False},
647 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800648 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800649 expect=main.TRUE,
650 actual=flowCheck,
651 onpass="Flow status is correct!",
652 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800653 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800654 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
655 peers=["pr64514", "pr64515", "pr64516"],
656 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800657 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800658 hosts=["host64514", "host64515", "host64516"],
659 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800660
661
662 def CASE10( self, main ):
663 '''
664 Bring up the switch which was stopped in CASE9, check:
665 route number, P2P intent number, M2S intent number, ping test
666 '''
667 main.case( "Start sw11 which was stopped in CASE9, \
668 check route number, P2P intent number, M2S intent number, ping test" )
669
670 main.log.info( "Check the flow status before starting sw11" )
671 main.Functions.checkFlowNum( main, "sw1", 11 )
672 main.Functions.checkFlowNum( main, "sw7", 5 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800673 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
674 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linffca7e22015-11-13 15:43:08 -0800675
676 main.step( "Start sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800677 result1 = main.Mininet.switch( SW="sw11", OPTION="start" )
678 utilities.assertEquals( expect=main.TRUE, actual=result1,
679 onpass="Starting switch succeeded!",
680 onfail="Starting switch failed!" )
pingping-lin6cae4422016-01-04 10:00:35 -0800681 result2 = main.Mininet.assignSwController( "sw11", fsfwIp,
Jon Hall6e9897d2016-02-29 14:41:32 -0800682 port=fsfwPort )
683 utilities.assertEquals( expect=main.TRUE, actual=result2,
684 onpass="Connect switch to FSFW succeeded!",
685 onfail="Connect switch to FSFW failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800686 if result1 and result2:
687 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
688 main.Functions.checkRouteNum( main, 3 )
689 main.Functions.checkM2SintentNum( main, 3 )
690 main.Functions.checkP2PintentNum( main, 18 )
691
692 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
693 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
694 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
695 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800696 main.log.error( "Starting switch failed!" )
pingping-linffca7e22015-11-13 15:43:08 -0800697 main.cleanup()
698 main.exit()
699
700 main.step( "Check whether all flow status are ADDED" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800701 flowCheck = utilities.retry( main.ONOScli1.checkFlowsState,
702 main.FALSE,
703 kwargs={'isPENDING':False},
704 attempts=10 )
pingping-linffca7e22015-11-13 15:43:08 -0800705 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800706 expect=main.TRUE,
707 actual=flowCheck,
708 onpass="Flow status is correct!",
709 onfail="Flow status is wrong!" )
pingping-linffca7e22015-11-13 15:43:08 -0800710 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800711 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
712 peers=["pr64514", "pr64515", "pr64516"],
713 expectAllSuccess=True )
pingping-linffca7e22015-11-13 15:43:08 -0800714 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800715 hosts=["host64514", "host64515", "host64516"],
716 expectAllSuccess=True )