blob: ac41fda64bd05f75dde102b4dfd15800fe4d9ff6 [file] [log] [blame]
pingping-lin28e7b212015-09-10 10:14:58 -07001# Testing the functionality of SDN-IP with single ONOS instance
pingping-lin5bb663b2015-09-24 11:47:50 -07002class USECASE_SdnipFunction:
pingping-lin28e7b212015-09-10 10:14:58 -07003
4 def __init__( self ):
5 self.default = ''
6 global branchName
7
pingping-linb702c602015-09-10 17:00:29 -07008 def CASE100( self, main ):
9 """
10 Start mininet
11 """
12 import os
pingping-lin4f80c492015-09-15 14:34:42 -070013 import imp
Jon Hall70b768c2016-04-19 08:38:29 -070014 main.case( "Setup the Mininet testbed" )
pingping-linb702c602015-09-10 17:00:29 -070015 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-linb702c602015-09-10 17:00:29 -070026 # Exit if topology did not load properly
27 if not topoResult:
28 main.cleanup()
29 main.exit()
pingping-lin5bb663b2015-09-24 11:47:50 -070030 main.step( "Connect switches to controller" )
31
32 global ONOS1Ip
33 ONOS1Ip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
34 # connect all switches to controller
35 swResult = main.TRUE
36 for i in range ( 1, int( main.params['config']['switchNum'] ) + 1 ):
37 sw = "sw%s" % ( i )
38 swResult = swResult and main.Mininet.assignSwController( sw, ONOS1Ip )
Jon Hall6e9897d2016-02-29 14:41:32 -080039 utilities.assert_equals( expect=main.TRUE,
40 actual=swResult,
41 onpass="Successfully connect all switches to ONOS",
42 onfail="Failed to connect all switches to ONOS" )
pingping-lin5bb663b2015-09-24 11:47:50 -070043 if not swResult:
44 main.cleanup()
45 main.exit()
46
47 main.step( "Set up tunnel from Mininet node to onos node" )
48 forwarding1 = '%s:2000:%s:2000' % ( '1.1.1.2', ONOS1Ip )
49 command = 'ssh -nNT -o "PasswordAuthentication no" \
50 -o "StrictHostKeyChecking no" -l sdn -L %s %s & ' % ( forwarding1, ONOS1Ip )
51
52 tunnelResult = main.TRUE
53 tunnelResult = main.Mininet.node( "root", command )
Jon Hall6e9897d2016-02-29 14:41:32 -080054 utilities.assert_equals( expect=True,
55 actual=( "PasswordAuthentication" in tunnelResult ),
56 onpass="Created tunnel succeeded",
57 onfail="Create tunnel failed" )
pingping-linb3ebd3f2015-09-28 22:17:05 -070058 if ("PasswordAuthentication" not in tunnelResult) :
pingping-lin5bb663b2015-09-24 11:47:50 -070059 main.cleanup()
60 main.exit()
pingping-lin5bb663b2015-09-24 11:47:50 -070061
pingping-linb702c602015-09-10 17:00:29 -070062 def CASE101( self, main ):
pingping-lin28e7b212015-09-10 10:14:58 -070063 """
pingping-linea32cf82015-10-08 22:37:37 -070064 Package ONOS and install it
pingping-lin28e7b212015-09-10 10:14:58 -070065 Startup sequence:
66 cell <name>
67 onos-verify-cell
pingping-lin28e7b212015-09-10 10:14:58 -070068 onos-package
69 onos-install -f
70 onos-wait-for-start
71 """
72 import json
73 import time
Jon Hall6e9897d2016-02-29 14:41:32 -080074 import os
pingping-lin28e7b212015-09-10 10:14:58 -070075 from operator import eq
76
Jon Hall6e9897d2016-02-29 14:41:32 -080077 main.case( "Setting up ONOS environment" )
pingping-lin28e7b212015-09-10 10:14:58 -070078
79 cellName = main.params[ 'ENV' ][ 'cellName' ]
Jon Hall6e9897d2016-02-29 14:41:32 -080080 global ONOS1Ip
81 ONOS1Ip = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
82 ipList = [ ONOS1Ip ]
83
Jon Hall70b768c2016-04-19 08:38:29 -070084 main.step( "Copying config files" )
85 src = os.path.dirname( main.testFile ) + "/network-cfg.json"
86 dst = main.ONOSbench.home + "/tools/package/config/network-cfg.json"
87 status = main.ONOSbench.scp( main.ONOSbench, src, dst, direction="to" )
88 utilities.assert_equals( expect=main.TRUE,
89 actual=status,
90 onpass="Copy config file succeeded",
91 onfail="Copy config file failed" )
92
Jon Hall6e9897d2016-02-29 14:41:32 -080093 main.step( "Create cell file" )
94 cellAppString = main.params[ 'ENV' ][ 'appString' ]
95 main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName,
96 main.Mininet.ip_address,
97 cellAppString, ipList )
pingping-lin28e7b212015-09-10 10:14:58 -070098
99 main.step( "Applying cell variable to environment" )
100 cellResult = main.ONOSbench.setCell( cellName )
Jon Hall6e9897d2016-02-29 14:41:32 -0800101 utilities.assert_equals( expect=main.TRUE,
102 actual=cellResult,
103 onpass="Set cell succeeded",
104 onfail="Set cell failed" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700105
Jon Hall70b768c2016-04-19 08:38:29 -0700106 main.step( "Verify cell connectivity" )
pingping-lin28e7b212015-09-10 10:14:58 -0700107 verifyResult = main.ONOSbench.verifyCell()
Jon Hall6e9897d2016-02-29 14:41:32 -0800108 utilities.assert_equals( expect=main.TRUE,
109 actual=verifyResult,
110 onpass="Verify cell succeeded",
111 onfail="Verify cell failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700112
113 branchName = main.ONOSbench.getBranchName()
pingping-linb3ebd3f2015-09-28 22:17:05 -0700114 main.log.report( "ONOS is on branch: " + branchName )
pingping-lin28e7b212015-09-10 10:14:58 -0700115
pingping-linb3ebd3f2015-09-28 22:17:05 -0700116 main.log.step( "Uninstalling ONOS" )
117 uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
Jon Hall6e9897d2016-02-29 14:41:32 -0800118 utilities.assert_equals( expect=main.TRUE,
119 actual=uninstallResult,
120 onpass="Uninstall ONOS succeeded",
121 onfail="Uninstall ONOS failed" )
pingping-linaede0312015-09-30 17:53:19 -0700122 '''
pingping-lin28e7b212015-09-10 10:14:58 -0700123 main.step( "Git pull" )
124 gitPullResult = main.ONOSbench.gitPull()
pingping-linb3ebd3f2015-09-28 22:17:05 -0700125 main.log.info( "gitPullResult" )
126 main.log.info( gitPullResult )
127 gitPullResult2 = ( gitPullResult == main.TRUE ) or ( gitPullResult == 3 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800128 utilities.assert_equals( expect=True,
129 actual=gitPullResult2,
130 onpass="Git pull ONOS succeeded",
131 onfail="Git pull ONOS failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700132
133 main.step( "Using mvn clean install" )
134 if gitPullResult == main.TRUE:
Jon Hall6e9897d2016-02-29 14:41:32 -0800135 mciResult = main.ONOSbench.cleanInstall( mciTimeout=1000 )
136 utilities.assert_equals( expect=main.TRUE,
137 actual=mciResult,
138 onpass="Maven clean install ONOS succeeded",
139 onfail="Maven clean install ONOS failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700140 else:
141 main.log.warn( "Did not pull new code so skipping mvn " +
142 "clean install" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700143 mciResult = main.TRUE
pingping-linaede0312015-09-30 17:53:19 -0700144 '''
pingping-lin28e7b212015-09-10 10:14:58 -0700145
Jon Hall6e9897d2016-02-29 14:41:32 -0800146 main.ONOSbench.getVersion( report=True )
pingping-lin28e7b212015-09-10 10:14:58 -0700147
148 main.step( "Creating ONOS package" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800149 packageResult = main.ONOSbench.onosPackage( opTimeout=500 )
150 utilities.assert_equals( expect=main.TRUE,
151 actual=packageResult,
152 onpass="Package ONOS succeeded",
153 onfail="Package ONOS failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700154
155 main.step( "Installing ONOS package" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800156 onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
157 node=ONOS1Ip )
158 utilities.assert_equals( expect=main.TRUE,
159 actual=onos1InstallResult,
160 onpass="Install ONOS succeeded",
161 onfail="Install ONOS failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700162
163 main.step( "Checking if ONOS is up yet" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800164 onos1UpResult = main.ONOSbench.isup( ONOS1Ip, timeout=420 )
165 utilities.assert_equals( expect=main.TRUE,
166 actual=onos1UpResult,
167 onpass="ONOS is up",
168 onfail="ONOS is NOT up" )
pingping-lin28e7b212015-09-10 10:14:58 -0700169
pingping-linb3ebd3f2015-09-28 22:17:05 -0700170 main.step( "Checking if ONOS CLI is ready" )
pingping-lin28e7b212015-09-10 10:14:58 -0700171 cliResult = main.ONOScli.startOnosCli( ONOS1Ip,
Jon Hall6e9897d2016-02-29 14:41:32 -0800172 commandlineTimeout=100, onosStartTimeout=600 )
173 utilities.assert_equals( expect=main.TRUE,
174 actual=cliResult,
175 onpass="ONOS CLI is ready",
176 onfail="ONOS CLI is not ready" )
pingping-lin28e7b212015-09-10 10:14:58 -0700177
Jon Hall6e9897d2016-02-29 14:41:32 -0800178 for i in range( 10 ):
179 ready = True
180 output = main.ONOScli.summary()
181 if not output:
182 ready = False
183 if ready:
184 break
185 time.sleep( 30 )
186 utilities.assert_equals( expect=True, actual=ready,
187 onpass="ONOS summary command succeded",
188 onfail="ONOS summary command failed" )
pingping-lin28e7b212015-09-10 10:14:58 -0700189
Jon Hall6e9897d2016-02-29 14:41:32 -0800190 if not ready:
191 main.log.error( "ONOS startup failed!" )
pingping-lin28e7b212015-09-10 10:14:58 -0700192 main.cleanup()
193 main.exit()
194
Jon Hall6e9897d2016-02-29 14:41:32 -0800195 def CASE200( self, main ):
196 main.case( "Activate sdn-ip application" )
197 main.log.info( "waiting link discovery......" )
198 time.sleep( int( main.params['timers']['TopoDiscovery'] ) )
199
pingping-linb3ebd3f2015-09-28 22:17:05 -0700200 main.log.info( "Get links in the network" )
pingping-lin3f091d62015-09-29 12:00:05 -0700201 summaryResult = main.ONOScli.summary()
202 linkNum = json.loads( summaryResult )[ "links" ]
Jon Hall6e9897d2016-02-29 14:41:32 -0800203 listResult = main.ONOScli.links( jsonFormat=False )
204 main.log.info( listResult )
pingping-lin3f091d62015-09-29 12:00:05 -0700205 if linkNum < 100:
Jon Hall6e9897d2016-02-29 14:41:32 -0800206 main.log.error( "Link number is wrong!" )
207 time.sleep( int( main.params['timers']['TopoDiscovery'] ) )
208 listResult = main.ONOScli.links( jsonFormat=False )
pingping-lin3f091d62015-09-29 12:00:05 -0700209 main.log.info( listResult )
210 main.cleanup()
211 main.exit()
212
pingping-linb3ebd3f2015-09-28 22:17:05 -0700213 main.step( "Activate sdn-ip application" )
214 activeSDNIPresult = main.ONOScli.activateApp( "org.onosproject.sdnip" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800215 utilities.assert_equals( expect=main.TRUE,
216 actual=activeSDNIPresult,
217 onpass="Activate SDN-IP succeeded",
218 onfail="Activate SDN-IP failed" )
pingping-lin3f091d62015-09-29 12:00:05 -0700219 if not activeSDNIPresult:
220 main.log.info( "Activate SDN-IP failed!" )
221 main.cleanup()
222 main.exit()
223
pingping-linb3ebd3f2015-09-28 22:17:05 -0700224
225 main.log.info( "Wait SDN-IP to finish installing connectivity intents \
pingping-linb702c602015-09-10 17:00:29 -0700226 and the BGP paths in data plane are ready..." )
pingping-lin28e7b212015-09-10 10:14:58 -0700227 time.sleep( int( main.params[ 'timers' ][ 'SdnIpSetup' ] ) )
pingping-linb702c602015-09-10 17:00:29 -0700228 main.log.info( "Wait Quagga to finish delivery all routes to each \
229 other and to sdn-ip, plus finish installing all intents..." )
pingping-lin28e7b212015-09-10 10:14:58 -0700230 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
231 time.sleep( int( main.params[ 'timers' ][ 'PathAvailable' ] ) )
232
233
pingping-lin4f80c492015-09-15 14:34:42 -0700234 def CASE102( self, main ):
235 '''
236 This test case is to load the methods from other Python files.
237 '''
pingping-linb3ebd3f2015-09-28 22:17:05 -0700238 main.case( "Loading methods from other Python file" )
pingping-lin4f80c492015-09-15 14:34:42 -0700239 # load the methods from other file
240 wrapperFile = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
241 main.Functions = imp.load_source( wrapperFile,
242 main.dependencyPath +
243 wrapperFile +
244 ".py" )
245
246
pingping-lin0ce60622015-09-10 14:37:33 -0700247 def CASE1( self, main ):
248 '''
249 ping test from 3 bgp peers to BGP speaker
250 '''
pingping-lin950b50d2015-09-14 12:00:08 -0700251
pingping-linb3ebd3f2015-09-28 22:17:05 -0700252 main.case( "Ping tests between BGP peers and speakers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800253 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
254 peers=["peer64514", "peer64515", "peer64516"],
255 expectAllSuccess=True )
pingping-lin0ce60622015-09-10 14:37:33 -0700256
pingping-lin950b50d2015-09-14 12:00:08 -0700257
pingping-lin0ce60622015-09-10 14:37:33 -0700258 def CASE2( self, main ):
259 '''
260 point-to-point intents test for each BGP peer and BGP speaker pair
261 '''
Jon Hall6e9897d2016-02-29 14:41:32 -0800262 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700263 main.case( "Check point-to-point intents" )
pingping-lin0ce60622015-09-10 14:37:33 -0700264 main.log.info( "There are %s BGP peers in total "
265 % main.params[ 'config' ][ 'peerNum' ] )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700266 main.step( "Check P2P intents number from ONOS CLI" )
pingping-lin0ce60622015-09-10 14:37:33 -0700267
Jon Hall6e9897d2016-02-29 14:41:32 -0800268 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin0ce60622015-09-10 14:37:33 -0700269 bgpIntentsActualNum = \
270 main.QuaggaCliSpeaker1.extractActualBgpIntentNum( getIntentsResult )
271 bgpIntentsExpectedNum = int( main.params[ 'config' ][ 'peerNum' ] ) * 6
Jon Hall6e9897d2016-02-29 14:41:32 -0800272 if bgpIntentsActualNum != bgpIntentsExpectedNum:
273 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
274 bgpIntentsActualNum = \
275 main.QuaggaCliSpeaker1.extractActualBgpIntentNum( getIntentsResult )
pingping-lin0ce60622015-09-10 14:37:33 -0700276 main.log.info( "bgpIntentsExpected num is:" )
277 main.log.info( bgpIntentsExpectedNum )
278 main.log.info( "bgpIntentsActual num is:" )
279 main.log.info( bgpIntentsActualNum )
280 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800281 expect=True,
282 actual=eq( bgpIntentsExpectedNum, bgpIntentsActualNum ),
283 onpass="PointToPointIntent Intent Num is correct!",
284 onfail="PointToPointIntent Intent Num is wrong!" )
pingping-lin0ce60622015-09-10 14:37:33 -0700285
286
287 def CASE3( self, main ):
288 '''
289 routes and intents check to all BGP peers
290 '''
Jon Hall6e9897d2016-02-29 14:41:32 -0800291 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700292 main.case( "Check routes and M2S intents to all BGP peers" )
pingping-lin0ce60622015-09-10 14:37:33 -0700293
pingping-lin28e7b212015-09-10 10:14:58 -0700294 allRoutesExpected = []
295 allRoutesExpected.append( "4.0.0.0/24" + "/" + "10.0.4.1" )
296 allRoutesExpected.append( "5.0.0.0/24" + "/" + "10.0.5.1" )
297 allRoutesExpected.append( "6.0.0.0/24" + "/" + "10.0.6.1" )
298
Jon Hall6e9897d2016-02-29 14:41:32 -0800299 getRoutesResult = main.ONOScli.routes( jsonFormat=True )
pingping-lin28e7b212015-09-10 10:14:58 -0700300 allRoutesActual = \
301 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
302 allRoutesStrExpected = str( sorted( allRoutesExpected ) )
303 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800304 if allRoutesStrActual != allRoutesStrExpected:
305 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
306 allRoutesActual = \
307 main.QuaggaCliSpeaker1.extractActualRoutesMaster( getRoutesResult )
308 allRoutesStrActual = str( allRoutesActual ).replace( 'u', "" )
pingping-lin28e7b212015-09-10 10:14:58 -0700309
310 main.step( "Check routes installed" )
311 main.log.info( "Routes expected:" )
312 main.log.info( allRoutesStrExpected )
313 main.log.info( "Routes get from ONOS CLI:" )
314 main.log.info( allRoutesStrActual )
315 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800316 expect=allRoutesStrExpected, actual=allRoutesStrActual,
317 onpass="Routes are correct!",
318 onfail="Routes are wrong!" )
pingping-lin28e7b212015-09-10 10:14:58 -0700319
pingping-linb3ebd3f2015-09-28 22:17:05 -0700320 main.step( "Check M2S intents installed" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800321 getIntentsResult = main.ONOScli.intents( jsonFormat=True )
pingping-lin28e7b212015-09-10 10:14:58 -0700322 routeIntentsActualNum = \
323 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
324 routeIntentsExpectedNum = 3
Jon Hall6e9897d2016-02-29 14:41:32 -0800325 if routeIntentsActualNum != routeIntentsExpectedNum:
326 time.sleep( int( main.params['timers']['RouteDelivery'] ) )
327 routeIntentsActualNum = \
328 main.QuaggaCliSpeaker1.extractActualRouteIntentNum( getIntentsResult )
pingping-lin28e7b212015-09-10 10:14:58 -0700329
330 main.log.info( "MultiPointToSinglePoint Intent Num expected is:" )
331 main.log.info( routeIntentsExpectedNum )
332 main.log.info( "MultiPointToSinglePoint Intent NUM Actual is:" )
333 main.log.info( routeIntentsActualNum )
334 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800335 expect=routeIntentsExpectedNum,
336 actual=routeIntentsActualNum,
337 onpass="MultiPointToSinglePoint Intent Num is correct!",
338 onfail="MultiPointToSinglePoint Intent Num is wrong!" )
pingping-lin28e7b212015-09-10 10:14:58 -0700339
pingping-linbab7f8a2015-09-21 17:33:36 -0700340 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700341 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800342 main.FALSE,
343 kwargs={'isPENDING':False},
344 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700345 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800346 expect=main.TRUE,
347 actual=flowCheck,
348 onpass="Flow status is correct!",
349 onfail="Flow status is wrong!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700350
pingping-lin950b50d2015-09-14 12:00:08 -0700351
352 def CASE4( self, main ):
353 '''
354 Ping test in data plane for each route
355 '''
pingping-linb3ebd3f2015-09-28 22:17:05 -0700356 main.case( "Ping test for each route, all hosts behind BGP peers" )
pingping-lin829428d2015-09-22 20:50:00 -0700357 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800358 hosts=["host64514", "host64515", "host64516"],
359 expectAllSuccess=True )
pingping-lin4f80c492015-09-15 14:34:42 -0700360
361
362 def CASE5( self, main ):
363 '''
364 Cut links to peers one by one, check routes/intents
365 '''
366 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700367 main.case( "Bring down links and check routes/intents" )
pingping-lin4f80c492015-09-15 14:34:42 -0700368 main.step( "Bring down the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800369 linkResult1 = main.Mininet.link( END1="sw32", END2="peer64514",
370 OPTION="down" )
371 utilities.assertEquals( expect=main.TRUE,
372 actual=linkResult1,
373 onpass="Bring down link succeeded!",
374 onfail="Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700375
376 if linkResult1 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700377 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
378 main.Functions.checkRouteNum( main, 2 )
379 main.Functions.checkM2SintentNum( main, 2 )
380 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800381 main.log.error( "Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700382 main.cleanup()
383 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700384
385 main.step( "Bring down the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800386 linkResult2 = main.Mininet.link( END1="sw8", END2="peer64515",
387 OPTION="down" )
388 utilities.assertEquals( expect=main.TRUE,
389 actual=linkResult2,
390 onpass="Bring down link succeeded!",
391 onfail="Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700392 if linkResult2 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700393 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
394 main.Functions.checkRouteNum( main, 1 )
395 main.Functions.checkM2SintentNum( main, 1 )
396 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800397 main.log.error( "Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700398 main.cleanup()
399 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700400
401 main.step( "Bring down the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800402 linkResult3 = main.Mininet.link( END1="sw28", END2="peer64516",
403 OPTION="down" )
404 utilities.assertEquals( expect=main.TRUE,
405 actual=linkResult3,
406 onpass="Bring down link succeeded!",
407 onfail="Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700408 if linkResult3 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700409 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
410 main.Functions.checkRouteNum( main, 0 )
411 main.Functions.checkM2SintentNum( main, 0 )
412 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800413 main.log.error( "Bring down link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700414 main.cleanup()
415 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700416
pingping-linbab7f8a2015-09-21 17:33:36 -0700417 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700418 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800419 main.FALSE,
420 kwargs={'isPENDING':False},
421 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700422 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800423 expect=main.TRUE,
424 actual=flowCheck,
425 onpass="Flow status is correct!",
426 onfail="Flow status is wrong!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700427
pingping-lin829428d2015-09-22 20:50:00 -0700428 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800429 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
430 peers=["peer64514", "peer64515", "peer64516"],
431 expectAllSuccess=False )
pingping-lin829428d2015-09-22 20:50:00 -0700432 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800433 hosts=["host64514", "host64515", "host64516"],
434 expectAllSuccess=False )
pingping-lin4f80c492015-09-15 14:34:42 -0700435
pingping-lin829428d2015-09-22 20:50:00 -0700436
437 def CASE6( self, main ):
pingping-lin4f80c492015-09-15 14:34:42 -0700438 '''
439 Recover links to peers one by one, check routes/intents
440 '''
441 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700442 main.case( "Bring up links and check routes/intents" )
pingping-lin4f80c492015-09-15 14:34:42 -0700443 main.step( "Bring up the link between sw32 and peer64514" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800444 linkResult1 = main.Mininet.link( END1="sw32", END2="peer64514",
445 OPTION="up" )
446 utilities.assertEquals( expect=main.TRUE,
447 actual=linkResult1,
448 onpass="Bring up link succeeded!",
449 onfail="Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700450 if linkResult1 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700451 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
452 main.Functions.checkRouteNum( main, 1 )
453 main.Functions.checkM2SintentNum( main, 1 )
454 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800455 main.log.error( "Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700456 main.cleanup()
457 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700458
459 main.step( "Bring up the link between sw8 and peer64515" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800460 linkResult2 = main.Mininet.link( END1="sw8", END2="peer64515",
461 OPTION="up" )
462 utilities.assertEquals( expect=main.TRUE,
463 actual=linkResult2,
464 onpass="Bring up link succeeded!",
465 onfail="Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700466 if linkResult2 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700467 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
468 main.Functions.checkRouteNum( main, 2 )
469 main.Functions.checkM2SintentNum( main, 2 )
470 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800471 main.log.error( "Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700472 main.cleanup()
473 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700474
475 main.step( "Bring up the link between sw28 and peer64516" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800476 linkResult3 = main.Mininet.link( END1="sw28", END2="peer64516",
477 OPTION="up" )
478 utilities.assertEquals( expect=main.TRUE,
479 actual=linkResult3,
480 onpass="Bring up link succeeded!",
481 onfail="Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700482 if linkResult3 == main.TRUE:
pingping-lin4f80c492015-09-15 14:34:42 -0700483 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
484 main.Functions.checkRouteNum( main, 3 )
485 main.Functions.checkM2SintentNum( main, 3 )
486 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800487 main.log.error( "Bring up link failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700488 main.cleanup()
489 main.exit()
pingping-linbab7f8a2015-09-21 17:33:36 -0700490
491 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700492 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800493 main.FALSE,
494 kwargs={'isPENDING':False},
495 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700496 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800497 expect=main.TRUE,
498 actual=flowCheck,
499 onpass="Flow status is correct!",
500 onfail="Flow status is wrong!" )
pingping-lin829428d2015-09-22 20:50:00 -0700501
502 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800503 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
504 peers=["peer64514", "peer64515", "peer64516"],
505 expectAllSuccess=True )
pingping-lin829428d2015-09-22 20:50:00 -0700506 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800507 hosts=["host64514", "host64515", "host64516"],
508 expectAllSuccess=True )
pingping-lin8244a3b2015-09-16 13:36:56 -0700509
510
pingping-lin829428d2015-09-22 20:50:00 -0700511 def CASE7( self, main ):
pingping-lin8244a3b2015-09-16 13:36:56 -0700512 '''
pingping-lin829428d2015-09-22 20:50:00 -0700513 Shut down a edge switch, check P-2-P and M-2-S intents, ping test
pingping-lin8244a3b2015-09-16 13:36:56 -0700514 '''
515 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700516 main.case( "Stop edge sw32,check P-2-P and M-2-S intents, ping test" )
pingping-lin8244a3b2015-09-16 13:36:56 -0700517 main.step( "Stop sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800518 result = main.Mininet.switch( SW="sw32", OPTION="stop" )
519 utilities.assertEquals( expect=main.TRUE, actual=result,
520 onpass="Stopping switch succeeded!",
521 onfail="Stopping switch failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700522
pingping-lin8244a3b2015-09-16 13:36:56 -0700523 if result == main.TRUE:
524 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
525 main.Functions.checkRouteNum( main, 2 )
526 main.Functions.checkM2SintentNum( main, 2 )
527 main.Functions.checkP2PintentNum( main, 12 )
528 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800529 main.log.error( "Stopping switch failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700530 main.cleanup()
531 main.exit()
pingping-lin8244a3b2015-09-16 13:36:56 -0700532
pingping-lin829428d2015-09-22 20:50:00 -0700533 main.step( "Check ping between hosts behind BGP peers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800534 result1 = main.Mininet.pingHost( src="host64514", target="host64515" )
535 result2 = main.Mininet.pingHost( src="host64515", target="host64516" )
536 result3 = main.Mininet.pingHost( src="host64514", target="host64516" )
pingping-lin829428d2015-09-22 20:50:00 -0700537
538 pingResult1 = ( result1 == main.FALSE ) and ( result2 == main.TRUE ) \
539 and ( result3 == main.FALSE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800540 utilities.assert_equals( expect=True, actual=pingResult1,
541 onpass="Ping test result is correct",
542 onfail="Ping test result is wrong" )
pingping-lin829428d2015-09-22 20:50:00 -0700543
544 if pingResult1 == False:
545 main.cleanup()
546 main.exit()
547
548 main.step( "Check ping between BGP peers and speakers" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800549 result4 = main.Mininet.pingHost( src="speaker1", target="peer64514" )
550 result5 = main.Mininet.pingHost( src="speaker1", target="peer64515" )
551 result6 = main.Mininet.pingHost( src="speaker1", target="peer64516" )
pingping-lin829428d2015-09-22 20:50:00 -0700552
553 pingResult2 = ( result4 == main.FALSE ) and ( result5 == main.TRUE ) \
554 and ( result6 == main.TRUE )
Jon Hall6e9897d2016-02-29 14:41:32 -0800555 utilities.assert_equals( expect=True, actual=pingResult2,
556 onpass="Speaker1 ping peers successful",
557 onfail="Speaker1 ping peers NOT successful" )
pingping-lin829428d2015-09-22 20:50:00 -0700558
559 if pingResult2 == False:
560 main.cleanup()
561 main.exit()
562
pingping-linbab7f8a2015-09-21 17:33:36 -0700563 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700564 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800565 main.FALSE,
566 kwargs={'isPENDING':False},
567 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700568 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800569 expect=main.TRUE,
570 actual=flowCheck,
571 onpass="Flow status is correct!",
572 onfail="Flow status is wrong!" )
pingping-lin8244a3b2015-09-16 13:36:56 -0700573
pingping-lind791d342015-09-17 18:34:31 -0700574
pingping-lin8244a3b2015-09-16 13:36:56 -0700575 def CASE8( self, main ):
pingping-lind791d342015-09-17 18:34:31 -0700576 '''
pingping-linb3ebd3f2015-09-28 22:17:05 -0700577 Bring up the edge switch (sw32) which was shut down in CASE7,
pingping-lind791d342015-09-17 18:34:31 -0700578 check P-2-P and M-2-S intents, ping test
579 '''
580 import time
pingping-linb3ebd3f2015-09-28 22:17:05 -0700581 main.case( "Start the edge sw32, check P-2-P and M-2-S intents, ping test" )
pingping-lind791d342015-09-17 18:34:31 -0700582 main.step( "Start sw32" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800583 result1 = main.Mininet.switch( SW="sw32", OPTION="start" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700584 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800585 expect=main.TRUE,
586 actual=result1,
587 onpass="Starting switch succeeded!",
588 onfail="Starting switch failed!" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700589
pingping-lind791d342015-09-17 18:34:31 -0700590 result2 = main.Mininet.assignSwController( "sw32", ONOS1Ip )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700591 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800592 expect=main.TRUE,
593 actual=result2,
594 onpass="Connect switch to ONOS succeeded!",
595 onfail="Connect switch to ONOS failed!" )
pingping-lind791d342015-09-17 18:34:31 -0700596
597 if result1 and result2:
598 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
599 main.Functions.checkRouteNum( main, 3 )
600 main.Functions.checkM2SintentNum( main, 3 )
601 main.Functions.checkP2PintentNum( main, 18 )
602 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800603 main.log.error( "Starting switch failed!" )
pingping-lind791d342015-09-17 18:34:31 -0700604 main.cleanup()
pingping-linb3ebd3f2015-09-28 22:17:05 -0700605 main.exit()
pingping-lin4f80c492015-09-15 14:34:42 -0700606
pingping-linbab7f8a2015-09-21 17:33:36 -0700607 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700608 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800609 main.FALSE,
610 kwargs={'isPENDING':False},
611 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700612 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800613 expect=main.TRUE,
614 actual=flowCheck,
615 onpass="Flow status is correct!",
616 onfail="Flow status is wrong!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700617
pingping-lin829428d2015-09-22 20:50:00 -0700618 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800619 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
620 peers=["peer64514", "peer64515", "peer64516"],
621 expectAllSuccess=True )
pingping-lin829428d2015-09-22 20:50:00 -0700622 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800623 hosts=["host64514", "host64515", "host64516"],
624 expectAllSuccess=True )
pingping-linbab7f8a2015-09-21 17:33:36 -0700625
pingping-lin829428d2015-09-22 20:50:00 -0700626
627 def CASE9( self, main ):
pingping-linbab7f8a2015-09-21 17:33:36 -0700628 '''
629 Bring down a switch in best path, check:
630 route number, P2P intent number, M2S intent number, ping test
631 '''
pingping-linb3ebd3f2015-09-28 22:17:05 -0700632 main.case( "Stop sw11 located in best path, \
pingping-linbab7f8a2015-09-21 17:33:36 -0700633 check route number, P2P intent number, M2S intent number, ping test" )
634
pingping-lin581a3662015-09-29 17:43:39 -0700635 main.log.info( "Check the flow number correctness before stopping sw11" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700636 main.Functions.checkFlowNum( main, "sw11", 13 )
637 main.Functions.checkFlowNum( main, "sw1", 3 )
638 main.Functions.checkFlowNum( main, "sw7", 3 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800639 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
640 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
641 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linbab7f8a2015-09-21 17:33:36 -0700642
643 main.step( "Stop sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800644 result = main.Mininet.switch( SW="sw11", OPTION="stop" )
645 utilities.assertEquals( expect=main.TRUE, actual=result,
646 onpass="Stopping switch succeeded!",
647 onfail="Stopping switch failed!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700648 if result:
649 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700650 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
pingping-linbab7f8a2015-09-21 17:33:36 -0700651 main.Functions.checkRouteNum( main, 3 )
652 main.Functions.checkM2SintentNum( main, 3 )
653 main.Functions.checkP2PintentNum( main, 18 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700654 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800655 main.log.error( "Stopping switch failed!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700656 main.cleanup()
pingping-linb3ebd3f2015-09-28 22:17:05 -0700657 main.exit()
pingping-linbab7f8a2015-09-21 17:33:36 -0700658
659 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700660 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800661 main.FALSE,
662 kwargs={'isPENDING':False},
663 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700664 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800665 expect=main.TRUE,
666 actual=flowCheck,
667 onpass="Flow status is correct!",
668 onfail="Flow status is wrong!" )
pingping-lin829428d2015-09-22 20:50:00 -0700669 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800670 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
671 peers=["peer64514", "peer64515", "peer64516"],
672 expectAllSuccess=True )
pingping-lin829428d2015-09-22 20:50:00 -0700673 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800674 hosts=["host64514", "host64515", "host64516"],
675 expectAllSuccess=True )
pingping-linbab7f8a2015-09-21 17:33:36 -0700676
677
678 def CASE10( self, main ):
679 '''
680 Bring up the switch which was stopped in CASE9, check:
681 route number, P2P intent number, M2S intent number, ping test
682 '''
pingping-linb3ebd3f2015-09-28 22:17:05 -0700683 main.case( "Start sw11 which was stopped in CASE9, \
pingping-linbab7f8a2015-09-21 17:33:36 -0700684 check route number, P2P intent number, M2S intent number, ping test" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700685
pingping-lin581a3662015-09-29 17:43:39 -0700686 main.log.info( "Check the flow status before starting sw11" )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700687 main.Functions.checkFlowNum( main, "sw1", 11 )
688 main.Functions.checkFlowNum( main, "sw7", 5 )
Jon Hall6e9897d2016-02-29 14:41:32 -0800689 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
690 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linb3ebd3f2015-09-28 22:17:05 -0700691
pingping-linbab7f8a2015-09-21 17:33:36 -0700692 main.step( "Start sw11" )
Jon Hall6e9897d2016-02-29 14:41:32 -0800693 result1 = main.Mininet.switch( SW="sw11", OPTION="start" )
694 utilities.assertEquals( expect=main.TRUE, actual=result1,
695 onpass="Starting switch succeeded!",
696 onfail="Starting switch failed!" )
pingping-lin0351dee2015-09-28 13:26:35 -0700697 result2 = main.Mininet.assignSwController( "sw11", ONOS1Ip )
Jon Hall6e9897d2016-02-29 14:41:32 -0800698 utilities.assertEquals( expect=main.TRUE, actual=result2,
699 onpass="Connect switch to ONOS succeeded!",
700 onfail="Connect switch to ONOS failed!" )
pingping-lin0351dee2015-09-28 13:26:35 -0700701 if result1 and result2:
pingping-linbab7f8a2015-09-21 17:33:36 -0700702 time.sleep( int( main.params[ 'timers' ][ 'RouteDelivery' ] ) )
703 main.Functions.checkRouteNum( main, 3 )
704 main.Functions.checkM2SintentNum( main, 3 )
705 main.Functions.checkP2PintentNum( main, 18 )
706
pingping-lin3f091d62015-09-29 12:00:05 -0700707 main.log.debug( main.Mininet.checkFlows( "sw11" ) )
708 main.log.debug( main.Mininet.checkFlows( "sw1" ) )
709 main.log.debug( main.Mininet.checkFlows( "sw7" ) )
pingping-linbab7f8a2015-09-21 17:33:36 -0700710 else:
Jon Hall6e9897d2016-02-29 14:41:32 -0800711 main.log.error( "Starting switch failed!" )
pingping-linbab7f8a2015-09-21 17:33:36 -0700712 main.cleanup()
pingping-linb3ebd3f2015-09-28 22:17:05 -0700713 main.exit()
pingping-linbab7f8a2015-09-21 17:33:36 -0700714
715 main.step( "Check whether all flow status are ADDED" )
Jon Hall1aa05602016-04-05 10:25:39 -0700716 flowCheck = utilities.retry( main.ONOScli.checkFlowsState,
Jon Hall6e9897d2016-02-29 14:41:32 -0800717 main.FALSE,
718 kwargs={'isPENDING':False},
719 attempts=10 )
pingping-linbab7f8a2015-09-21 17:33:36 -0700720 utilities.assertEquals( \
Jon Hall6e9897d2016-02-29 14:41:32 -0800721 expect=main.TRUE,
722 actual=flowCheck,
723 onpass="Flow status is correct!",
724 onfail="Flow status is wrong!" )
pingping-lin829428d2015-09-22 20:50:00 -0700725 # Ping test
Jon Hall6e9897d2016-02-29 14:41:32 -0800726 main.Functions.pingSpeakerToPeer( main, speakers=["speaker1"],
727 peers=["peer64514", "peer64515", "peer64516"],
728 expectAllSuccess=True )
pingping-lin829428d2015-09-22 20:50:00 -0700729 main.Functions.pingHostToHost( main,
Jon Hall6e9897d2016-02-29 14:41:32 -0800730 hosts=["host64514", "host64515", "host64516"],
731 expectAllSuccess=True )