blob: 3adb025abf1ae33ec1711c45fdb611f819fc0dce [file] [log] [blame]
kelvin-onlab4ff9cc12015-05-05 11:14:42 -07001
2# Testing the basic functionality of ONOS Next
3# For sanity and driver functionality excercises only.
4
5import time
6import json
7
8time.sleep( 1 )
9
kelvin-onlab05cf7732015-05-08 14:25:46 -070010class FuncIntent:
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070011
12 def __init__( self ):
13 self.default = ''
14
15 def CASE10( self, main ):
16 import time
17 import os
18 """
19 Startup sequence:
20 cell <name>
21 onos-verify-cell
22 onos-remove-raft-log
23 git pull
24 mvn clean install
25 onos-package
26 onos-install -f
27 onos-wait-for-start
28 """
kelvin-onlabf70fd542015-05-07 18:41:40 -070029 global init
30 try:
31 if type(init) is not bool:
32 init = False
33 except NameError:
34 init = False
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070035 #Local variables
36 cellName = main.params[ 'ENV' ][ 'cellName' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070037 apps = main.params[ 'ENV' ][ 'cellApps' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070038 gitBranch = main.params[ 'GIT' ][ 'branch' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070039 benchIp = main.params[ 'BENCH' ][ 'ip1' ]
40 benchUser = main.params[ 'BENCH' ][ 'user' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -070041 topology = main.params[ 'MININET' ][ 'topo' ]
42 maxNodes = int( main.params[ 'availableNodes' ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070043 main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
kelvin-onlab65782a82015-05-07 14:12:13 -070044 main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070045 main.numCtrls = main.params[ 'CTRL' ][ 'num' ]
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070046 PULLCODE = False
47 if main.params[ 'GIT' ][ 'pull' ] == 'True':
48 PULLCODE = True
49 main.case( "Setting up test environment" )
kelvin-onlabf70fd542015-05-07 18:41:40 -070050 main.CLIs = []
51 for i in range( 1, int( main.numCtrls ) + 1 ):
52 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
53
54 # -- INIT SECTION, ONLY RUNS ONCE -- #
55 if init == False:
56 init = True
kelvin-onlabf70fd542015-05-07 18:41:40 -070057
kelvin-onlab05cf7732015-05-08 14:25:46 -070058 main.ONOSip = []
59 main.ONOSport = []
60 main.scale = ( main.params[ 'SCALE' ] ).split( "," )
61 main.numCtrls = int( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070062
63 if PULLCODE:
64 main.step( "Git checkout and pull " + gitBranch )
65 main.ONOSbench.gitCheckout( gitBranch )
66 gitPullResult = main.ONOSbench.gitPull()
67 if gitPullResult == main.ERROR:
68 main.log.error( "Error pulling git branch" )
69 main.step( "Using mvn clean & install" )
70 cleanInstallResult = main.ONOSbench.cleanInstall()
71 stepResult = cleanInstallResult
72 utilities.assert_equals( expect=main.TRUE,
73 actual=stepResult,
74 onpass="Successfully compiled " +
75 "latest ONOS",
76 onfail="Failed to compile " +
77 "latest ONOS" )
78 else:
79 main.log.warn( "Did not pull new code so skipping mvn " +
80 "clean install" )
kelvin-onlab05cf7732015-05-08 14:25:46 -070081 # Populate main.ONOSip with ips from params
kelvin-onlabf70fd542015-05-07 18:41:40 -070082 for i in range( 1, maxNodes + 1):
kelvin-onlab05cf7732015-05-08 14:25:46 -070083 main.ONOSip.append( main.params[ 'CTRL' ][ 'ip' + str( i ) ] )
84 main.ONOSport.append( main.params[ 'CTRL' ][ 'port' +
85 str( i ) ])
kelvin-onlabf70fd542015-05-07 18:41:40 -070086
kelvin-onlab05cf7732015-05-08 14:25:46 -070087 main.numCtrls = int( main.scale[ 0 ] )
88 main.scale.remove( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070089 #kill off all onos processes
90 main.log.info( "Safety check, killing all ONOS processes" +
91 " before initiating enviornment setup" )
92 for i in range( maxNodes ):
kelvin-onlab05cf7732015-05-08 14:25:46 -070093 main.ONOSbench.onosDie( main.ONOSip[ i ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070094 """
95 main.step( "Apply cell to environment" )
96 cellResult = main.ONOSbench.setCell( cellName )
97 verifyResult = main.ONOSbench.verifyCell()
98 stepResult = cellResult and verifyResult
99 utilities.assert_equals( expect=main.TRUE,
100 actual=stepResult,
101 onpass="Successfully applied cell to " + \
102 "environment",
103 onfail="Failed to apply cell to environment " )
104 """
105 """main.step( "Removing raft logs" )
106 removeRaftResult = main.ONOSbench.onosRemoveRaftLogs()
107 stepResult = removeRaftResult
108 utilities.assert_equals( expect=main.TRUE,
109 actual=stepResult,
110 onpass="Successfully removed raft logs",
111 onfail="Failed to remove raft logs" )
112 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700113 print "NODE COUNT = ", main.numCtrls
kelvin-onlabf70fd542015-05-07 18:41:40 -0700114 main.log.info( "Creating cell file" )
115 cellIp = []
kelvin-onlab05cf7732015-05-08 14:25:46 -0700116 for i in range( main.numCtrls ):
117 cellIp.append( str( main.ONOSip[ i ] ) )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700118 print cellIp
119 main.ONOSbench.createCellFile( benchIp, cellName, "",
120 str( apps ), *cellIp )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700121
122 main.step( "Apply cell to environment" )
123 cellResult = main.ONOSbench.setCell( cellName )
124 verifyResult = main.ONOSbench.verifyCell()
125 stepResult = cellResult and verifyResult
126 utilities.assert_equals( expect=main.TRUE,
127 actual=stepResult,
128 onpass="Successfully applied cell to " + \
129 "environment",
130 onfail="Failed to apply cell to environment " )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700131
132 main.step( "Creating ONOS package" )
133 packageResult = main.ONOSbench.onosPackage()
134 stepResult = packageResult
135 utilities.assert_equals( expect=main.TRUE,
136 actual=stepResult,
137 onpass="Successfully created ONOS package",
138 onfail="Failed to create ONOS package" )
139
140 main.step( "Uninstalling ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700141 onosUninstallResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700142 for i in range( main.numCtrls):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700143 onosUninstallResult = onosUninstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700144 main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700145 stepResult = onosUninstallResult
146 utilities.assert_equals( expect=main.TRUE,
147 actual=stepResult,
148 onpass="Successfully uninstalled ONOS package",
149 onfail="Failed to uninstall ONOS package" )
150 time.sleep( 5 )
151 main.step( "Installing ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700152 onosInstallResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700153 for i in range( main.numCtrls):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700154 onosInstallResult = onosInstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700155 main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700156 stepResult = onosInstallResult
157 utilities.assert_equals( expect=main.TRUE,
158 actual=stepResult,
159 onpass="Successfully installed ONOS package",
160 onfail="Failed to install ONOS package" )
161
kelvin-onlabf70fd542015-05-07 18:41:40 -0700162 time.sleep( 5 )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700163 main.step( "Starting ONOS service" )
164 stopResult = main.TRUE
165 startResult = main.TRUE
kelvin-onlabf70fd542015-05-07 18:41:40 -0700166 onosIsUp = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700167 for i in range( main.numCtrls ):
168 onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700169 if onosIsUp == main.TRUE:
170 main.log.report( "ONOS instance is up and ready" )
171 else:
172 main.log.report( "ONOS instance may not be up, stop and " +
173 "start ONOS again " )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700174 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700175 stopResult = stopResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700176 main.ONOSbench.onosStop( main.ONOSip[ i ] )
177 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700178 startResult = startResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700179 main.ONOSbench.onosStart( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700180 stepResult = onosIsUp and stopResult and startResult
181 utilities.assert_equals( expect=main.TRUE,
182 actual=stepResult,
183 onpass="ONOS service is ready",
184 onfail="ONOS service did not start properly" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700185
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700186 main.step( "Start ONOS cli" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700187 cliResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700188 for i in range( main.numCtrls ):
189 cliResult = cliResult and \
190 main.CLIs[i].startOnosCli( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700191 stepResult = cliResult
192 utilities.assert_equals( expect=main.TRUE,
193 actual=stepResult,
194 onpass="Successfully start ONOS cli",
195 onfail="Failed to start ONOS cli" )
196
197 def CASE11( self, main ):
198 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700199 Start mininet
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700200 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700201 main.log.report( "Start Mininet topology" )
202 main.log.case( "Start Mininet topology" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700203
kelvin-onlabf70fd542015-05-07 18:41:40 -0700204 main.step( "Starting Mininet Topology" )
205 topoResult = main.Mininet1.startNet( topoFile=topology )
206 stepResult = topoResult
207 utilities.assert_equals( expect=main.TRUE,
208 actual=stepResult,
209 onpass="Successfully loaded topology",
210 onfail="Failed to load topology" )
211 # Exit if topology did not load properly
212 if not topoResult:
213 main.cleanup()
214 main.exit()
215
kelvin-onlab05cf7732015-05-08 14:25:46 -0700216 def CASE12( self, main ):
217 """
218 Assign mastership to controllers
219 """
220 import re
221
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700222 main.step( "Assigning switches to controllers" )
223 assignResult = main.TRUE
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700224 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700225 main.Mininet1.assignSwController( sw=str( i ),
226 count=1,
kelvin-onlab05cf7732015-05-08 14:25:46 -0700227 ip1=main.ONOSip[ 0 ],
228 port1=main.ONOSport[ 0 ] )
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700229 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700230 response = main.Mininet1.getSwController( "s" + str( i ) )
231 print( "Response is " + str( response ) )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700232 if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700233 assignResult = assignResult and main.TRUE
234 else:
235 assignResult = main.FALSE
236 stepResult = assignResult
237 utilities.assert_equals( expect=main.TRUE,
238 actual=stepResult,
239 onpass="Successfully assigned switches" +
240 "to controller",
241 onfail="Failed to assign switches to " +
242 "controller" )
243
kelvin-onlabf70fd542015-05-07 18:41:40 -0700244 def CASE1001( self, main ):
kelvin-onlab7c577e82015-05-07 10:45:16 -0700245 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700246 Add host intents between 2 host:
247 - Discover hosts
248 - Add host intents
249 - Check intents
250 - Check flows
251 - Ping hosts
252 - Reroute
253 - Link down
254 - Ping hosts
255 - Link up
256 - Ping hosts
257 - Remove intents
kelvin-onlab7c577e82015-05-07 10:45:16 -0700258 """
259 import time
260 import json
kelvin-onlab65782a82015-05-07 14:12:13 -0700261 import re
262 """
263 Create your item(s) here
264 item = { 'name': '', 'host1':
265 { 'name': '', 'MAC': '00:00:00:00:00:0X',
266 'id':'00:00:00:00:00:0X/-X' } , 'host2':
267 { 'name': '', 'MAC': '00:00:00:00:00:0X',
268 'id':'00:00:00:00:00:0X/-X'}, 'link': { 'switch1': '',
269 'switch2': '', 'num':'' } }
270 """
271 # Local variables
272 items = []
273 ipv4 = { 'name': 'IPV4', 'host1':
274 { 'name': 'h1', 'MAC': '00:00:00:00:00:01',
275 'id':'00:00:00:00:00:01/-1' } , 'host2':
276 { 'name': 'h9', 'MAC': '00:00:00:00:00:09',
kelvin-onlab05cf7732015-05-08 14:25:46 -0700277 'id':'00:00:00:00:00:09/-1'}, 'link': { 'switch1': 's5',
kelvin-onlab65782a82015-05-07 14:12:13 -0700278 'switch2': 's2', 'num':'18' } }
279 dualStack1 = { 'name': 'DUALSTACK1', 'host1':
280 { 'name': 'h3', 'MAC': '00:00:00:00:00:03',
281 'id':'00:00:00:00:00:03/-1' } , 'host2':
kelvin-onlabf70fd542015-05-07 18:41:40 -0700282 { 'name': 'h11', 'MAC': '00:00:00:00:00:0B',
kelvin-onlab65782a82015-05-07 14:12:13 -0700283 'id':'00:00:00:00:00:0B/-1'}, 'link': { 'switch1': 's5',
284 'switch2': 's2', 'num':'18' } }
285 items.append( ipv4 )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700286 items.append( dualStack1 )
kelvin-onlab65782a82015-05-07 14:12:13 -0700287 # Global variables
kelvin-onlab7c577e82015-05-07 10:45:16 -0700288
kelvin-onlabf70fd542015-05-07 18:41:40 -0700289 main.log.case( "Add host intents between 2 host" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700290
kelvin-onlab65782a82015-05-07 14:12:13 -0700291 for item in items:
292 stepResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700293 itemName = item[ 'name' ]
kelvin-onlab65782a82015-05-07 14:12:13 -0700294 h1Name = item[ 'host1' ][ 'name' ]
295 h2Name = item[ 'host2' ][ 'name' ]
296 h1Mac = item[ 'host1' ][ 'MAC' ]
297 h2Mac = item[ 'host2' ][ 'MAC' ]
298 h1Id = item[ 'host1' ][ 'id']
299 h2Id = item[ 'host2' ][ 'id']
300 # Link down/up for rerouting
301 sw1 = item[ 'link' ][ 'switch1' ]
302 sw2 = item[ 'link' ][ 'switch2' ]
303 remLink = item[ 'link' ][ 'num' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -0700304 pingResult = main.TRUE
305 statusResult = main.TRUE
306 linkDownResult = main.TRUE
307 linkUpResult = main.TRUE
kelvin-onlab65782a82015-05-07 14:12:13 -0700308 intentsId = []
kelvin-onlab05cf7732015-05-08 14:25:46 -0700309 main.step( itemName + ": Add host intents between " + h1Name
kelvin-onlab65782a82015-05-07 14:12:13 -0700310 + " and " + h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700311 main.log.info( itemName + ": Discover host using arping" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700312 main.Mininet1.arping( host=h1Name )
313 main.Mininet1.arping( host=h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700314 host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
315 host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
kelvin-onlab65782a82015-05-07 14:12:13 -0700316 print host1
317 print host2
318 # Adding intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700319 main.log.info( itemName + ": Adding host intents" )
320 intent1 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h1Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700321 hostIdTwo=h2Id )
322 intentsId.append( intent1 )
323 time.sleep( 5 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700324 intent2 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h2Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700325 hostIdTwo=h1Id )
326 intentsId.append( intent2 )
327 # Checking intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700328 main.log.info( itemName + ": Check host intents state" )
329 time.sleep( 30 )
330 for i in range( main.numCtrls ):
331 intentResult = main.CLIs[ i ].checkIntentState(
332 intentsId=intentsId )
kelvin-onlab65782a82015-05-07 14:12:13 -0700333 if not intentResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700334 main.log.info( itemName + ": Check host intents state" +
kelvin-onlab65782a82015-05-07 14:12:13 -0700335 " again")
kelvin-onlab05cf7732015-05-08 14:25:46 -0700336 for i in range( main.numCtrls ):
337 intentResult = main.CLIs[ i ].checkIntentState(
kelvin-onlab65782a82015-05-07 14:12:13 -0700338 intentsId=intentsId )
339 # Ping hosts
340 time.sleep( 10 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700341 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700342 h2Name )
343 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
344 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700345 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700346 + h2Name )
347 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
348 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700349 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700350 + h1Name )
351 pingResult = pingResult1 and pingResult2
352 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700353 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700354 "both hosts" )
355 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700356 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700357 "both hosts" )
358 # Rerouting ( link down )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700359 main.log.info( itemName + ": Bring link down between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700360 sw1 + " and " + sw2 )
361 main.Mininet1.link( end1=sw1,
362 end2=sw2,
363 option="down" )
364 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700365
kelvin-onlab65782a82015-05-07 14:12:13 -0700366 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700367 main.log.info( itemName + ": Checking ONOS topology " )
368
369 for i in range( main.numCtrls ):
370 topologyResult = main.CLIs[ i ].topology()
371 linkDownResult = main.ONOSbench.checkStatus( topologyResult,
372 main.numSwitch,
373 remLink )\
374 and linkDownResult
375 if not linkDownResult:
376 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700377 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700378 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700379
kelvin-onlab65782a82015-05-07 14:12:13 -0700380 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700381 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700382 h2Name )
383 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
384 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700385 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700386 + h2Name )
387 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
388 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700389 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700390 + h1Name )
391 pingResult = pingResult1 and pingResult2
392 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700393 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700394 "both hosts" )
395 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700396 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700397 "both hosts" )
398 # link up
kelvin-onlab05cf7732015-05-08 14:25:46 -0700399 main.log.info( itemName + ": Bring link up between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700400 sw1 + " and " + sw2 )
401 main.Mininet1.link( end1=sw1,
402 end2=sw2,
403 option="up" )
404 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700405
kelvin-onlab65782a82015-05-07 14:12:13 -0700406 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700407 main.log.info( itemName + ": Checking ONOS topology " )
408 for i in range( main.numCtrls ):
409 topologyResult = main.CLIs[ i ].topology()
410 linkUpResult = main.ONOSbench.checkStatus( topologyResult,
411 main.numSwitch,
412 main.numLinks )\
413 and linkUpResult
414 if not linkUpResult:
415 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700416 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700417 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700418
kelvin-onlab65782a82015-05-07 14:12:13 -0700419 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700420 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700421 h2Name )
422 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
423 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700424 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700425 + h2Name )
426 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
427 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700428 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700429 + h1Name )
430 pingResult = pingResult1 and pingResult2
431 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700432 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700433 "both hosts" )
434 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700435 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700436 "both hosts" )
437
438 # Remove intents
439 for intent in intentsId:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700440 main.CLIs[ 0 ].removeIntent( intentId=intent, purge=True )
kelvin-onlab65782a82015-05-07 14:12:13 -0700441
kelvin-onlab05cf7732015-05-08 14:25:46 -0700442 print main.CLIs[ 0 ].intents()
443 stepResult = pingResult and linkDownResult and linkUpResult \
444 and intentResult
kelvin-onlab65782a82015-05-07 14:12:13 -0700445 utilities.assert_equals( expect=main.TRUE,
446 actual=stepResult,
kelvin-onlab05cf7732015-05-08 14:25:46 -0700447 onpass=itemName +
448 ": host intent successful",
449 onfail=itemName +
450 ": Add host intent failed" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700451 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700452 """
453 Add point intents between 2 hosts:
454 - Get device ids
455 - Add point intents
456 - Check intents
457 - Check flows
458 - Ping hosts
459 - Reroute
460 - Link down
461 - Ping hosts
462 - Link up
463 - Ping hosts
464 - Remove intents
465 """
466
kelvin-onlabf70fd542015-05-07 18:41:40 -0700467 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700468 """
469 Add single point to multi point intents
470 - Get device ids
471 - Add single point to multi point intents
472 - Check intents
473 - Check flows
474 - Ping hosts
475 - Reroute
476 - Link down
477 - Ping hosts
478 - Link up
479 - Ping hosts
480 - Remove intents
481 """
482
kelvin-onlabf70fd542015-05-07 18:41:40 -0700483 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700484 """
485 Add multi point to single point intents
486 - Get device ids
487 - Add multi point to single point intents
488 - Check intents
489 - Check flows
490 - Ping hosts
491 - Reroute
492 - Link down
493 - Ping hosts
494 - Link up
495 - Ping hosts
496 - Remove intents
497 """