blob: b0ff4c2a42ba36346f4fe4d46efe6bf585f3d6cf [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
cameron@onlab.us59d29d92015-05-11 14:31:54 -070030 global globalONOSip
kelvin-onlabf70fd542015-05-07 18:41:40 -070031 try:
32 if type(init) is not bool:
33 init = False
34 except NameError:
35 init = False
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070036 #Local variables
37 cellName = main.params[ 'ENV' ][ 'cellName' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070038 apps = main.params[ 'ENV' ][ 'cellApps' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070039 gitBranch = main.params[ 'GIT' ][ 'branch' ]
cameron@onlab.us59d29d92015-05-11 14:31:54 -070040 benchIp = os.environ[ 'OCN' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070041 benchUser = main.params[ 'BENCH' ][ 'user' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -070042 topology = main.params[ 'MININET' ][ 'topo' ]
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -070043 #benchIp = main.params[ 'BENCH' ][ 'ip1' ]
44 benchUser = main.params[ 'BENCH' ][ 'user' ]
45 topology = main.params[ 'MININET' ][ 'topo' ]
46 #maxNodes = int( main.params[ 'availableNodes' ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070047 main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
kelvin-onlab65782a82015-05-07 14:12:13 -070048 main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070049 main.numCtrls = main.params[ 'CTRL' ][ 'num' ]
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070050 PULLCODE = False
51 if main.params[ 'GIT' ][ 'pull' ] == 'True':
52 PULLCODE = True
53 main.case( "Setting up test environment" )
kelvin-onlabf70fd542015-05-07 18:41:40 -070054 main.CLIs = []
55 for i in range( 1, int( main.numCtrls ) + 1 ):
56 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
57
cameron@onlab.us7fd2a522015-05-14 11:20:33 -070058 main.errors = [0]*11
59 main.warnings = [0]*11
60 main.exceptions = [0]*11
61
kelvin-onlabf70fd542015-05-07 18:41:40 -070062 # -- INIT SECTION, ONLY RUNS ONCE -- #
63 if init == False:
64 init = True
kelvin-onlabf70fd542015-05-07 18:41:40 -070065
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -070066 #main.ONOSip = []
kelvin-onlab05cf7732015-05-08 14:25:46 -070067 main.ONOSport = []
68 main.scale = ( main.params[ 'SCALE' ] ).split( "," )
69 main.numCtrls = int( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070070
71 if PULLCODE:
72 main.step( "Git checkout and pull " + gitBranch )
73 main.ONOSbench.gitCheckout( gitBranch )
74 gitPullResult = main.ONOSbench.gitPull()
75 if gitPullResult == main.ERROR:
76 main.log.error( "Error pulling git branch" )
77 main.step( "Using mvn clean & install" )
78 cleanInstallResult = main.ONOSbench.cleanInstall()
79 stepResult = cleanInstallResult
80 utilities.assert_equals( expect=main.TRUE,
81 actual=stepResult,
82 onpass="Successfully compiled " +
83 "latest ONOS",
84 onfail="Failed to compile " +
85 "latest ONOS" )
86 else:
87 main.log.warn( "Did not pull new code so skipping mvn " +
88 "clean install" )
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070089 globalONOSip = main.ONOSbench.getOnosIps()
kelvin-onlab0a28a742015-05-18 16:03:13 -070090
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070091 maxNodes = ( len(globalONOSip) - 2 )
kelvin-onlabf70fd542015-05-07 18:41:40 -070092
kelvin-onlab05cf7732015-05-08 14:25:46 -070093 main.numCtrls = int( main.scale[ 0 ] )
94 main.scale.remove( main.scale[ 0 ] )
cameron@onlab.us59d29d92015-05-11 14:31:54 -070095
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070096 main.ONOSip = []
kelvin-onlab0a28a742015-05-18 16:03:13 -070097 for i in range( maxNodes ):
cameron@onlab.us59d29d92015-05-11 14:31:54 -070098 main.ONOSip.append( globalONOSip[i] )
99
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700100 # Populate main.ONOSip with ips from params
101 #for i in range( 1, maxNodes + 1):
102 # main.ONOSip.append( main.params[ 'CTRL' ][ 'ip' + str( i ) ] )
103 # main.ONOSport.append( main.params[ 'CTRL' ][ 'port' +
104 # str( i ) ])
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700105 ONOSip = main.ONOSbench.getOnosIpFromEnv()
kelvin-onlab0a28a742015-05-18 16:03:13 -0700106 main.log.info("\t\t CLUSTER IPs: \n\n" + str(ONOSip) + "\n\n")
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700107
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700108 main.numCtrls = int( main.scale[ 0 ] )
109 main.scale.remove( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700110 #kill off all onos processes
111 main.log.info( "Safety check, killing all ONOS processes" +
112 " before initiating enviornment setup" )
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700113 for i in range( maxNodes ):
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700114 main.ONOSbench.onosDie( main.ONOSip[ i ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700115 """
116 main.step( "Apply cell to environment" )
117 cellResult = main.ONOSbench.setCell( cellName )
118 verifyResult = main.ONOSbench.verifyCell()
119 stepResult = cellResult and verifyResult
120 utilities.assert_equals( expect=main.TRUE,
121 actual=stepResult,
122 onpass="Successfully applied cell to " + \
123 "environment",
124 onfail="Failed to apply cell to environment " )
125 """
126 """main.step( "Removing raft logs" )
127 removeRaftResult = main.ONOSbench.onosRemoveRaftLogs()
128 stepResult = removeRaftResult
129 utilities.assert_equals( expect=main.TRUE,
130 actual=stepResult,
131 onpass="Successfully removed raft logs",
132 onfail="Failed to remove raft logs" )
133 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700134 print "NODE COUNT = ", main.numCtrls
kelvin-onlabf70fd542015-05-07 18:41:40 -0700135 main.log.info( "Creating cell file" )
136 cellIp = []
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700137 for i in range( main.numCtrls ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700138 cellIp.append( str( main.ONOSip[ i ] ) )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700139 print cellIp
140 main.ONOSbench.createCellFile( benchIp, cellName, "",
141 str( apps ), *cellIp )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700142
143 main.step( "Apply cell to environment" )
144 cellResult = main.ONOSbench.setCell( cellName )
145 verifyResult = main.ONOSbench.verifyCell()
146 stepResult = cellResult and verifyResult
147 utilities.assert_equals( expect=main.TRUE,
148 actual=stepResult,
149 onpass="Successfully applied cell to " + \
150 "environment",
151 onfail="Failed to apply cell to environment " )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700152
153 main.step( "Creating ONOS package" )
154 packageResult = main.ONOSbench.onosPackage()
155 stepResult = packageResult
156 utilities.assert_equals( expect=main.TRUE,
157 actual=stepResult,
158 onpass="Successfully created ONOS package",
159 onfail="Failed to create ONOS package" )
160
161 main.step( "Uninstalling ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700162 onosUninstallResult = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700163 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700164 onosUninstallResult = onosUninstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700165 main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700166 stepResult = onosUninstallResult
167 utilities.assert_equals( expect=main.TRUE,
168 actual=stepResult,
169 onpass="Successfully uninstalled ONOS package",
170 onfail="Failed to uninstall ONOS package" )
171 time.sleep( 5 )
172 main.step( "Installing ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700173 onosInstallResult = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700174 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700175 onosInstallResult = onosInstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700176 main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700177 stepResult = onosInstallResult
178 utilities.assert_equals( expect=main.TRUE,
179 actual=stepResult,
180 onpass="Successfully installed ONOS package",
181 onfail="Failed to install ONOS package" )
182
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700183 time.sleep( 20 )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700184 main.step( "Starting ONOS service" )
185 stopResult = main.TRUE
186 startResult = main.TRUE
kelvin-onlabf70fd542015-05-07 18:41:40 -0700187 onosIsUp = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700188 for i in range( main.numCtrls ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700189 onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700190 if onosIsUp == main.TRUE:
191 main.log.report( "ONOS instance is up and ready" )
192 else:
193 main.log.report( "ONOS instance may not be up, stop and " +
194 "start ONOS again " )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700195 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700196 stopResult = stopResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700197 main.ONOSbench.onosStop( main.ONOSip[ i ] )
198 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700199 startResult = startResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700200 main.ONOSbench.onosStart( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700201 stepResult = onosIsUp and stopResult and startResult
202 utilities.assert_equals( expect=main.TRUE,
203 actual=stepResult,
204 onpass="ONOS service is ready",
205 onfail="ONOS service did not start properly" )
kelvin-onlab0a28a742015-05-18 16:03:13 -0700206
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700207 main.step( "Start ONOS cli" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700208 cliResult = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700209 for i in range( main.numCtrls ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700210 cliResult = cliResult and \
211 main.CLIs[i].startOnosCli( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700212 stepResult = cliResult
213 utilities.assert_equals( expect=main.TRUE,
214 actual=stepResult,
215 onpass="Successfully start ONOS cli",
216 onfail="Failed to start ONOS cli" )
cameron@onlab.us7fd2a522015-05-14 11:20:33 -0700217
kelvin-onlab0a28a742015-05-18 16:03:13 -0700218 def CASE9( self, main ):
219 main.log.info("Error report: \n")
220 main.ONOSbench.logReport(globalONOSip[0],["WARN","ERROR","stuff"],"d")
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700221
222 def CASE11( self, main ):
223 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700224 Start mininet
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700225 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700226 main.log.report( "Start Mininet topology" )
227 main.log.case( "Start Mininet topology" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700228
kelvin-onlabf70fd542015-05-07 18:41:40 -0700229 main.step( "Starting Mininet Topology" )
230 topoResult = main.Mininet1.startNet( topoFile=topology )
231 stepResult = topoResult
232 utilities.assert_equals( expect=main.TRUE,
233 actual=stepResult,
234 onpass="Successfully loaded topology",
235 onfail="Failed to load topology" )
236 # Exit if topology did not load properly
237 if not topoResult:
238 main.cleanup()
239 main.exit()
240
kelvin-onlab05cf7732015-05-08 14:25:46 -0700241 def CASE12( self, main ):
242 """
243 Assign mastership to controllers
244 """
245 import re
246
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700247 main.step( "Assigning switches to controllers" )
248 assignResult = main.TRUE
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700249 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700250 main.Mininet1.assignSwController( sw=str( i ),
251 count=1,
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700252 ip1=main.ONOSip[ 0 ],
kelvin-onlab05cf7732015-05-08 14:25:46 -0700253 port1=main.ONOSport[ 0 ] )
cameron@onlab.uscd4e8a22015-05-11 10:58:43 -0700254 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700255 response = main.Mininet1.getSwController( "s" + str( i ) )
256 print( "Response is " + str( response ) )
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700257 if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700258 assignResult = assignResult and main.TRUE
259 else:
260 assignResult = main.FALSE
261 stepResult = assignResult
262 utilities.assert_equals( expect=main.TRUE,
263 actual=stepResult,
264 onpass="Successfully assigned switches" +
265 "to controller",
266 onfail="Failed to assign switches to " +
267 "controller" )
268
kelvin-onlabf70fd542015-05-07 18:41:40 -0700269 def CASE1001( self, main ):
kelvin-onlab7c577e82015-05-07 10:45:16 -0700270 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700271 Add host intents between 2 host:
272 - Discover hosts
273 - Add host intents
274 - Check intents
275 - Check flows
276 - Ping hosts
277 - Reroute
278 - Link down
279 - Ping hosts
280 - Link up
281 - Ping hosts
282 - Remove intents
kelvin-onlab7c577e82015-05-07 10:45:16 -0700283 """
284 import time
285 import json
kelvin-onlab65782a82015-05-07 14:12:13 -0700286 import re
287 """
288 Create your item(s) here
289 item = { 'name': '', 'host1':
290 { 'name': '', 'MAC': '00:00:00:00:00:0X',
291 'id':'00:00:00:00:00:0X/-X' } , 'host2':
292 { 'name': '', 'MAC': '00:00:00:00:00:0X',
293 'id':'00:00:00:00:00:0X/-X'}, 'link': { 'switch1': '',
294 'switch2': '', 'num':'' } }
295 """
296 # Local variables
297 items = []
298 ipv4 = { 'name': 'IPV4', 'host1':
299 { 'name': 'h1', 'MAC': '00:00:00:00:00:01',
300 'id':'00:00:00:00:00:01/-1' } , 'host2':
301 { 'name': 'h9', 'MAC': '00:00:00:00:00:09',
kelvin-onlab05cf7732015-05-08 14:25:46 -0700302 'id':'00:00:00:00:00:09/-1'}, 'link': { 'switch1': 's5',
kelvin-onlab65782a82015-05-07 14:12:13 -0700303 'switch2': 's2', 'num':'18' } }
304 dualStack1 = { 'name': 'DUALSTACK1', 'host1':
305 { 'name': 'h3', 'MAC': '00:00:00:00:00:03',
306 'id':'00:00:00:00:00:03/-1' } , 'host2':
kelvin-onlabf70fd542015-05-07 18:41:40 -0700307 { 'name': 'h11', 'MAC': '00:00:00:00:00:0B',
kelvin-onlab65782a82015-05-07 14:12:13 -0700308 'id':'00:00:00:00:00:0B/-1'}, 'link': { 'switch1': 's5',
309 'switch2': 's2', 'num':'18' } }
310 items.append( ipv4 )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700311 items.append( dualStack1 )
kelvin-onlab65782a82015-05-07 14:12:13 -0700312 # Global variables
kelvin-onlab7c577e82015-05-07 10:45:16 -0700313
kelvin-onlabf70fd542015-05-07 18:41:40 -0700314 main.log.case( "Add host intents between 2 host" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700315
kelvin-onlab65782a82015-05-07 14:12:13 -0700316 for item in items:
317 stepResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700318 itemName = item[ 'name' ]
kelvin-onlab65782a82015-05-07 14:12:13 -0700319 h1Name = item[ 'host1' ][ 'name' ]
320 h2Name = item[ 'host2' ][ 'name' ]
321 h1Mac = item[ 'host1' ][ 'MAC' ]
322 h2Mac = item[ 'host2' ][ 'MAC' ]
323 h1Id = item[ 'host1' ][ 'id']
324 h2Id = item[ 'host2' ][ 'id']
325 # Link down/up for rerouting
326 sw1 = item[ 'link' ][ 'switch1' ]
327 sw2 = item[ 'link' ][ 'switch2' ]
328 remLink = item[ 'link' ][ 'num' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -0700329 pingResult = main.TRUE
330 statusResult = main.TRUE
331 linkDownResult = main.TRUE
332 linkUpResult = main.TRUE
kelvin-onlab65782a82015-05-07 14:12:13 -0700333 intentsId = []
kelvin-onlab05cf7732015-05-08 14:25:46 -0700334 main.step( itemName + ": Add host intents between " + h1Name
kelvin-onlab65782a82015-05-07 14:12:13 -0700335 + " and " + h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700336 main.log.info( itemName + ": Discover host using arping" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700337 main.Mininet1.arping( host=h1Name )
338 main.Mininet1.arping( host=h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700339 host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
340 host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
kelvin-onlab65782a82015-05-07 14:12:13 -0700341 print host1
342 print host2
343 # Adding intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700344 main.log.info( itemName + ": Adding host intents" )
345 intent1 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h1Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700346 hostIdTwo=h2Id )
347 intentsId.append( intent1 )
348 time.sleep( 5 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700349 intent2 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h2Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700350 hostIdTwo=h1Id )
351 intentsId.append( intent2 )
352 # Checking intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700353 main.log.info( itemName + ": Check host intents state" )
354 time.sleep( 30 )
355 for i in range( main.numCtrls ):
356 intentResult = main.CLIs[ i ].checkIntentState(
357 intentsId=intentsId )
kelvin-onlab65782a82015-05-07 14:12:13 -0700358 if not intentResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700359 main.log.info( itemName + ": Check host intents state" +
kelvin-onlab65782a82015-05-07 14:12:13 -0700360 " again")
kelvin-onlab05cf7732015-05-08 14:25:46 -0700361 for i in range( main.numCtrls ):
362 intentResult = main.CLIs[ i ].checkIntentState(
kelvin-onlab65782a82015-05-07 14:12:13 -0700363 intentsId=intentsId )
364 # Ping hosts
365 time.sleep( 10 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700366 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700367 h2Name )
368 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
369 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700370 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700371 + h2Name )
372 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
373 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700374 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700375 + h1Name )
376 pingResult = pingResult1 and pingResult2
377 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700378 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700379 "both hosts" )
380 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700381 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700382 "both hosts" )
383 # Rerouting ( link down )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700384 main.log.info( itemName + ": Bring link down between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700385 sw1 + " and " + sw2 )
386 main.Mininet1.link( end1=sw1,
387 end2=sw2,
388 option="down" )
389 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700390
kelvin-onlab65782a82015-05-07 14:12:13 -0700391 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700392 main.log.info( itemName + ": Checking ONOS topology " )
393
394 for i in range( main.numCtrls ):
395 topologyResult = main.CLIs[ i ].topology()
396 linkDownResult = main.ONOSbench.checkStatus( topologyResult,
397 main.numSwitch,
398 remLink )\
399 and linkDownResult
400 if not linkDownResult:
401 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700402 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700403 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700404
kelvin-onlab65782a82015-05-07 14:12:13 -0700405 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700406 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700407 h2Name )
408 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
409 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700410 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700411 + h2Name )
412 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
413 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700414 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700415 + h1Name )
416 pingResult = pingResult1 and pingResult2
417 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700418 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700419 "both hosts" )
420 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700421 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700422 "both hosts" )
423 # link up
kelvin-onlab05cf7732015-05-08 14:25:46 -0700424 main.log.info( itemName + ": Bring link up between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700425 sw1 + " and " + sw2 )
426 main.Mininet1.link( end1=sw1,
427 end2=sw2,
428 option="up" )
429 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700430
kelvin-onlab65782a82015-05-07 14:12:13 -0700431 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700432 main.log.info( itemName + ": Checking ONOS topology " )
433 for i in range( main.numCtrls ):
434 topologyResult = main.CLIs[ i ].topology()
435 linkUpResult = main.ONOSbench.checkStatus( topologyResult,
436 main.numSwitch,
437 main.numLinks )\
438 and linkUpResult
439 if not linkUpResult:
440 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700441 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700442 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700443
kelvin-onlab65782a82015-05-07 14:12:13 -0700444 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700445 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700446 h2Name )
447 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
448 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700449 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700450 + h2Name )
451 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
452 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700453 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700454 + h1Name )
455 pingResult = pingResult1 and pingResult2
456 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700457 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700458 "both hosts" )
459 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700460 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700461 "both hosts" )
462
463 # Remove intents
464 for intent in intentsId:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700465 main.CLIs[ 0 ].removeIntent( intentId=intent, purge=True )
kelvin-onlab65782a82015-05-07 14:12:13 -0700466
kelvin-onlab05cf7732015-05-08 14:25:46 -0700467 print main.CLIs[ 0 ].intents()
468 stepResult = pingResult and linkDownResult and linkUpResult \
469 and intentResult
kelvin-onlab65782a82015-05-07 14:12:13 -0700470 utilities.assert_equals( expect=main.TRUE,
471 actual=stepResult,
kelvin-onlab05cf7732015-05-08 14:25:46 -0700472 onpass=itemName +
473 ": host intent successful",
474 onfail=itemName +
475 ": Add host intent failed" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700476 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700477 """
478 Add point intents between 2 hosts:
479 - Get device ids
480 - Add point intents
481 - Check intents
482 - Check flows
483 - Ping hosts
484 - Reroute
485 - Link down
486 - Ping hosts
487 - Link up
488 - Ping hosts
489 - Remove intents
490 """
491
kelvin-onlabf70fd542015-05-07 18:41:40 -0700492 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700493 """
494 Add single point to multi point intents
495 - Get device ids
496 - Add single point to multi point intents
497 - Check intents
498 - Check flows
499 - Ping hosts
500 - Reroute
501 - Link down
502 - Ping hosts
503 - Link up
504 - Ping hosts
505 - Remove intents
506 """
507
kelvin-onlabf70fd542015-05-07 18:41:40 -0700508 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700509 """
510 Add multi point to single point intents
511 - Get device ids
512 - Add multi point to single point intents
513 - Check intents
514 - Check flows
515 - Ping hosts
516 - Reroute
517 - Link down
518 - Ping hosts
519 - Link up
520 - Ping hosts
521 - Remove intents
522 """