blob: 27cf66e0a14802eb2b00b815c6c32fad69990a45 [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
cameron@onlab.us59d29d92015-05-11 14:31:54 -070036
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070037 #Local variables
38 cellName = main.params[ 'ENV' ][ 'cellName' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070039 apps = main.params[ 'ENV' ][ 'cellApps' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070040 gitBranch = main.params[ 'GIT' ][ 'branch' ]
cameron@onlab.us59d29d92015-05-11 14:31:54 -070041 benchIp = os.environ[ 'OCN' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070042 benchUser = main.params[ 'BENCH' ][ 'user' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -070043 topology = main.params[ 'MININET' ][ 'topo' ]
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070044 main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
kelvin-onlab65782a82015-05-07 14:12:13 -070045 main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070046 main.numCtrls = main.params[ 'CTRL' ][ 'num' ]
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070047 PULLCODE = False
48 if main.params[ 'GIT' ][ 'pull' ] == 'True':
49 PULLCODE = True
50 main.case( "Setting up test environment" )
kelvin-onlabf70fd542015-05-07 18:41:40 -070051 main.CLIs = []
52 for i in range( 1, int( main.numCtrls ) + 1 ):
53 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
54
cameron@onlab.us7fd2a522015-05-14 11:20:33 -070055 main.errors = [0]*11
56 main.warnings = [0]*11
57 main.exceptions = [0]*11
58
kelvin-onlabf70fd542015-05-07 18:41:40 -070059 # -- INIT SECTION, ONLY RUNS ONCE -- #
60 if init == False:
61 init = True
kelvin-onlabf70fd542015-05-07 18:41:40 -070062
kelvin-onlab05cf7732015-05-08 14:25:46 -070063 main.ONOSport = []
64 main.scale = ( main.params[ 'SCALE' ] ).split( "," )
65 main.numCtrls = int( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070066
67 if PULLCODE:
68 main.step( "Git checkout and pull " + gitBranch )
69 main.ONOSbench.gitCheckout( gitBranch )
70 gitPullResult = main.ONOSbench.gitPull()
71 if gitPullResult == main.ERROR:
72 main.log.error( "Error pulling git branch" )
73 main.step( "Using mvn clean & install" )
74 cleanInstallResult = main.ONOSbench.cleanInstall()
75 stepResult = cleanInstallResult
76 utilities.assert_equals( expect=main.TRUE,
77 actual=stepResult,
78 onpass="Successfully compiled " +
79 "latest ONOS",
80 onfail="Failed to compile " +
81 "latest ONOS" )
82 else:
83 main.log.warn( "Did not pull new code so skipping mvn " +
84 "clean install" )
cameron@onlab.us59d29d92015-05-11 14:31:54 -070085
86 globalONOSip = main.ONOSbench.getOnosIpFromEnv()
87
88 maxNodes = ( len(globalONOSip) - 3 )
kelvin-onlabf70fd542015-05-07 18:41:40 -070089
kelvin-onlab05cf7732015-05-08 14:25:46 -070090 main.numCtrls = int( main.scale[ 0 ] )
91 main.scale.remove( main.scale[ 0 ] )
cameron@onlab.us59d29d92015-05-11 14:31:54 -070092
93 main.ONOSip = [0]
94 for i in range( 1, maxNodes + 1 ):
95 main.ONOSip.append( globalONOSip[i] )
96
97
98
kelvin-onlabf70fd542015-05-07 18:41:40 -070099 #kill off all onos processes
100 main.log.info( "Safety check, killing all ONOS processes" +
101 " before initiating enviornment setup" )
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700102 for i in range(1, maxNodes+1):
103 main.ONOSbench.onosDie( globalONOSip[ i ] )
104
kelvin-onlabf70fd542015-05-07 18:41:40 -0700105 """
106 main.step( "Apply cell to environment" )
107 cellResult = main.ONOSbench.setCell( cellName )
108 verifyResult = main.ONOSbench.verifyCell()
109 stepResult = cellResult and verifyResult
110 utilities.assert_equals( expect=main.TRUE,
111 actual=stepResult,
112 onpass="Successfully applied cell to " + \
113 "environment",
114 onfail="Failed to apply cell to environment " )
115 """
116 """main.step( "Removing raft logs" )
117 removeRaftResult = main.ONOSbench.onosRemoveRaftLogs()
118 stepResult = removeRaftResult
119 utilities.assert_equals( expect=main.TRUE,
120 actual=stepResult,
121 onpass="Successfully removed raft logs",
122 onfail="Failed to remove raft logs" )
123 """
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700124
kelvin-onlab05cf7732015-05-08 14:25:46 -0700125 print "NODE COUNT = ", main.numCtrls
kelvin-onlabf70fd542015-05-07 18:41:40 -0700126 main.log.info( "Creating cell file" )
127 cellIp = []
cameron@onlab.us684cee32015-05-11 17:14:04 -0700128 for i in range( 1, main.numCtrls + 1 ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700129 cellIp.append( str( main.ONOSip[ i ] ) )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700130 print cellIp
131 main.ONOSbench.createCellFile( benchIp, cellName, "",
132 str( apps ), *cellIp )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700133
134 main.step( "Apply cell to environment" )
135 cellResult = main.ONOSbench.setCell( cellName )
136 verifyResult = main.ONOSbench.verifyCell()
137 stepResult = cellResult and verifyResult
138 utilities.assert_equals( expect=main.TRUE,
139 actual=stepResult,
140 onpass="Successfully applied cell to " + \
141 "environment",
142 onfail="Failed to apply cell to environment " )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700143
144 main.step( "Creating ONOS package" )
145 packageResult = main.ONOSbench.onosPackage()
146 stepResult = packageResult
147 utilities.assert_equals( expect=main.TRUE,
148 actual=stepResult,
149 onpass="Successfully created ONOS package",
150 onfail="Failed to create ONOS package" )
151
152 main.step( "Uninstalling ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700153 onosUninstallResult = main.TRUE
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700154 for i in range( 1, main.numCtrls + 1):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700155 onosUninstallResult = onosUninstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700156 main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700157 stepResult = onosUninstallResult
158 utilities.assert_equals( expect=main.TRUE,
159 actual=stepResult,
160 onpass="Successfully uninstalled ONOS package",
161 onfail="Failed to uninstall ONOS package" )
162 time.sleep( 5 )
163 main.step( "Installing ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700164 onosInstallResult = main.TRUE
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700165 for i in range( 1, main.numCtrls+1):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700166 onosInstallResult = onosInstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700167 main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700168 stepResult = onosInstallResult
169 utilities.assert_equals( expect=main.TRUE,
170 actual=stepResult,
171 onpass="Successfully installed ONOS package",
172 onfail="Failed to install ONOS package" )
173
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700174 time.sleep( 20 )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700175 main.step( "Starting ONOS service" )
176 stopResult = main.TRUE
177 startResult = main.TRUE
kelvin-onlabf70fd542015-05-07 18:41:40 -0700178 onosIsUp = main.TRUE
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700179 for i in range( 1, main.numCtrls+1 ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700180 onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700181 if onosIsUp == main.TRUE:
182 main.log.report( "ONOS instance is up and ready" )
183 else:
184 main.log.report( "ONOS instance may not be up, stop and " +
185 "start ONOS again " )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700186 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700187 stopResult = stopResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700188 main.ONOSbench.onosStop( main.ONOSip[ i ] )
189 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700190 startResult = startResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700191 main.ONOSbench.onosStart( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700192 stepResult = onosIsUp and stopResult and startResult
193 utilities.assert_equals( expect=main.TRUE,
194 actual=stepResult,
195 onpass="ONOS service is ready",
196 onfail="ONOS service did not start properly" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700197
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700198 main.step( "Start ONOS cli" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700199 cliResult = main.TRUE
cameron@onlab.usd68865d2015-05-13 15:45:39 -0700200 for i in range( 1, main.numCtrls + 1 ):
kelvin-onlab05cf7732015-05-08 14:25:46 -0700201 cliResult = cliResult and \
202 main.CLIs[i].startOnosCli( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700203 stepResult = cliResult
204 utilities.assert_equals( expect=main.TRUE,
205 actual=stepResult,
206 onpass="Successfully start ONOS cli",
207 onfail="Failed to start ONOS cli" )
cameron@onlab.us7fd2a522015-05-14 11:20:33 -0700208
209 def CASE9( self, main ):
210 main.log.info("Error report: \n")
211 main.ONOSbench.onosErrorLog(globalONOSip[1])
212
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700213
214 def CASE11( self, main ):
215 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700216 Start mininet
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700217 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700218 main.log.report( "Start Mininet topology" )
219 main.log.case( "Start Mininet topology" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700220
kelvin-onlabf70fd542015-05-07 18:41:40 -0700221 main.step( "Starting Mininet Topology" )
222 topoResult = main.Mininet1.startNet( topoFile=topology )
223 stepResult = topoResult
224 utilities.assert_equals( expect=main.TRUE,
225 actual=stepResult,
226 onpass="Successfully loaded topology",
227 onfail="Failed to load topology" )
228 # Exit if topology did not load properly
229 if not topoResult:
230 main.cleanup()
231 main.exit()
232
kelvin-onlab05cf7732015-05-08 14:25:46 -0700233 def CASE12( self, main ):
234 """
235 Assign mastership to controllers
236 """
237 import re
238
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700239 main.step( "Assigning switches to controllers" )
240 assignResult = main.TRUE
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700241 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700242 main.Mininet1.assignSwController( sw=str( i ),
243 count=1,
cameron@onlab.usd68865d2015-05-13 15:45:39 -0700244 ip1=main.ONOSip[ 1 ],
kelvin-onlab05cf7732015-05-08 14:25:46 -0700245 port1=main.ONOSport[ 0 ] )
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700246 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700247 response = main.Mininet1.getSwController( "s" + str( i ) )
248 print( "Response is " + str( response ) )
cameron@onlab.usd68865d2015-05-13 15:45:39 -0700249 if re.search( "tcp:" + main.ONOSip[ 1 ], response ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700250 assignResult = assignResult and main.TRUE
251 else:
252 assignResult = main.FALSE
253 stepResult = assignResult
254 utilities.assert_equals( expect=main.TRUE,
255 actual=stepResult,
256 onpass="Successfully assigned switches" +
257 "to controller",
258 onfail="Failed to assign switches to " +
259 "controller" )
260
kelvin-onlabf70fd542015-05-07 18:41:40 -0700261 def CASE1001( self, main ):
kelvin-onlab7c577e82015-05-07 10:45:16 -0700262 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700263 Add host intents between 2 host:
264 - Discover hosts
265 - Add host intents
266 - Check intents
267 - Check flows
268 - Ping hosts
269 - Reroute
270 - Link down
271 - Ping hosts
272 - Link up
273 - Ping hosts
274 - Remove intents
kelvin-onlab7c577e82015-05-07 10:45:16 -0700275 """
276 import time
277 import json
kelvin-onlab65782a82015-05-07 14:12:13 -0700278 import re
279 """
280 Create your item(s) here
281 item = { 'name': '', 'host1':
282 { 'name': '', 'MAC': '00:00:00:00:00:0X',
283 'id':'00:00:00:00:00:0X/-X' } , 'host2':
284 { 'name': '', 'MAC': '00:00:00:00:00:0X',
285 'id':'00:00:00:00:00:0X/-X'}, 'link': { 'switch1': '',
286 'switch2': '', 'num':'' } }
287 """
288 # Local variables
289 items = []
290 ipv4 = { 'name': 'IPV4', 'host1':
291 { 'name': 'h1', 'MAC': '00:00:00:00:00:01',
292 'id':'00:00:00:00:00:01/-1' } , 'host2':
293 { 'name': 'h9', 'MAC': '00:00:00:00:00:09',
kelvin-onlab05cf7732015-05-08 14:25:46 -0700294 'id':'00:00:00:00:00:09/-1'}, 'link': { 'switch1': 's5',
kelvin-onlab65782a82015-05-07 14:12:13 -0700295 'switch2': 's2', 'num':'18' } }
296 dualStack1 = { 'name': 'DUALSTACK1', 'host1':
297 { 'name': 'h3', 'MAC': '00:00:00:00:00:03',
298 'id':'00:00:00:00:00:03/-1' } , 'host2':
kelvin-onlabf70fd542015-05-07 18:41:40 -0700299 { 'name': 'h11', 'MAC': '00:00:00:00:00:0B',
kelvin-onlab65782a82015-05-07 14:12:13 -0700300 'id':'00:00:00:00:00:0B/-1'}, 'link': { 'switch1': 's5',
301 'switch2': 's2', 'num':'18' } }
302 items.append( ipv4 )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700303 items.append( dualStack1 )
kelvin-onlab65782a82015-05-07 14:12:13 -0700304 # Global variables
kelvin-onlab7c577e82015-05-07 10:45:16 -0700305
kelvin-onlabf70fd542015-05-07 18:41:40 -0700306 main.log.case( "Add host intents between 2 host" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700307
kelvin-onlab65782a82015-05-07 14:12:13 -0700308 for item in items:
309 stepResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700310 itemName = item[ 'name' ]
kelvin-onlab65782a82015-05-07 14:12:13 -0700311 h1Name = item[ 'host1' ][ 'name' ]
312 h2Name = item[ 'host2' ][ 'name' ]
313 h1Mac = item[ 'host1' ][ 'MAC' ]
314 h2Mac = item[ 'host2' ][ 'MAC' ]
315 h1Id = item[ 'host1' ][ 'id']
316 h2Id = item[ 'host2' ][ 'id']
317 # Link down/up for rerouting
318 sw1 = item[ 'link' ][ 'switch1' ]
319 sw2 = item[ 'link' ][ 'switch2' ]
320 remLink = item[ 'link' ][ 'num' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -0700321 pingResult = main.TRUE
322 statusResult = main.TRUE
323 linkDownResult = main.TRUE
324 linkUpResult = main.TRUE
kelvin-onlab65782a82015-05-07 14:12:13 -0700325 intentsId = []
kelvin-onlab05cf7732015-05-08 14:25:46 -0700326 main.step( itemName + ": Add host intents between " + h1Name
kelvin-onlab65782a82015-05-07 14:12:13 -0700327 + " and " + h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700328 main.log.info( itemName + ": Discover host using arping" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700329 main.Mininet1.arping( host=h1Name )
330 main.Mininet1.arping( host=h2Name )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700331 host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
332 host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
kelvin-onlab65782a82015-05-07 14:12:13 -0700333 print host1
334 print host2
335 # Adding intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700336 main.log.info( itemName + ": Adding host intents" )
337 intent1 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h1Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700338 hostIdTwo=h2Id )
339 intentsId.append( intent1 )
340 time.sleep( 5 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700341 intent2 = main.CLIs[ 0 ].addHostIntent( hostIdOne=h2Id,
kelvin-onlab65782a82015-05-07 14:12:13 -0700342 hostIdTwo=h1Id )
343 intentsId.append( intent2 )
344 # Checking intents
kelvin-onlab05cf7732015-05-08 14:25:46 -0700345 main.log.info( itemName + ": Check host intents state" )
346 time.sleep( 30 )
347 for i in range( main.numCtrls ):
348 intentResult = main.CLIs[ i ].checkIntentState(
349 intentsId=intentsId )
kelvin-onlab65782a82015-05-07 14:12:13 -0700350 if not intentResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700351 main.log.info( itemName + ": Check host intents state" +
kelvin-onlab65782a82015-05-07 14:12:13 -0700352 " again")
kelvin-onlab05cf7732015-05-08 14:25:46 -0700353 for i in range( main.numCtrls ):
354 intentResult = main.CLIs[ i ].checkIntentState(
kelvin-onlab65782a82015-05-07 14:12:13 -0700355 intentsId=intentsId )
356 # Ping hosts
357 time.sleep( 10 )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700358 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700359 h2Name )
360 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
361 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700362 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700363 + h2Name )
364 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
365 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700366 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700367 + h1Name )
368 pingResult = pingResult1 and pingResult2
369 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700370 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700371 "both hosts" )
372 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700373 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700374 "both hosts" )
375 # Rerouting ( link down )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700376 main.log.info( itemName + ": Bring link down between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700377 sw1 + " and " + sw2 )
378 main.Mininet1.link( end1=sw1,
379 end2=sw2,
380 option="down" )
381 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700382
kelvin-onlab65782a82015-05-07 14:12:13 -0700383 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700384 main.log.info( itemName + ": Checking ONOS topology " )
385
386 for i in range( main.numCtrls ):
387 topologyResult = main.CLIs[ i ].topology()
388 linkDownResult = main.ONOSbench.checkStatus( topologyResult,
389 main.numSwitch,
390 remLink )\
391 and linkDownResult
392 if not linkDownResult:
393 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700394 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700395 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700396
kelvin-onlab65782a82015-05-07 14:12:13 -0700397 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700398 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700399 h2Name )
400 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
401 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700402 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700403 + h2Name )
404 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
405 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700406 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700407 + h1Name )
408 pingResult = pingResult1 and pingResult2
409 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700410 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700411 "both hosts" )
412 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700413 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700414 "both hosts" )
415 # link up
kelvin-onlab05cf7732015-05-08 14:25:46 -0700416 main.log.info( itemName + ": Bring link up between " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700417 sw1 + " and " + sw2 )
418 main.Mininet1.link( end1=sw1,
419 end2=sw2,
420 option="up" )
421 time.sleep( 5 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700422
kelvin-onlab65782a82015-05-07 14:12:13 -0700423 # Check onos topology
kelvin-onlab05cf7732015-05-08 14:25:46 -0700424 main.log.info( itemName + ": Checking ONOS topology " )
425 for i in range( main.numCtrls ):
426 topologyResult = main.CLIs[ i ].topology()
427 linkUpResult = main.ONOSbench.checkStatus( topologyResult,
428 main.numSwitch,
429 main.numLinks )\
430 and linkUpResult
431 if not linkUpResult:
432 main.log.info( itemName + ": Topology mismatch" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700433 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700434 main.log.info( itemName + ": Topology match" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700435
kelvin-onlab65782a82015-05-07 14:12:13 -0700436 # Ping hosts
kelvin-onlab05cf7732015-05-08 14:25:46 -0700437 main.log.info( itemName + ": Ping " + h1Name + " and " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700438 h2Name )
439 pingResult1 = main.Mininet1.pingHost( src=h1Name , target=h2Name )
440 if not pingResult1:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700441 main.log.info( itemName + ": " + h1Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700442 + h2Name )
443 pingResult2 = main.Mininet1.pingHost( src=h2Name , target=h1Name )
444 if not pingResult2:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700445 main.log.info( itemName + ": " + h2Name + " cannot ping "
kelvin-onlab65782a82015-05-07 14:12:13 -0700446 + h1Name )
447 pingResult = pingResult1 and pingResult2
448 if pingResult:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700449 main.log.info( itemName + ": Successfully pinged " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700450 "both hosts" )
451 else:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700452 main.log.info( itemName + ": Failed to ping " +
kelvin-onlab65782a82015-05-07 14:12:13 -0700453 "both hosts" )
454
455 # Remove intents
456 for intent in intentsId:
kelvin-onlab05cf7732015-05-08 14:25:46 -0700457 main.CLIs[ 0 ].removeIntent( intentId=intent, purge=True )
kelvin-onlab65782a82015-05-07 14:12:13 -0700458
kelvin-onlab05cf7732015-05-08 14:25:46 -0700459 print main.CLIs[ 0 ].intents()
460 stepResult = pingResult and linkDownResult and linkUpResult \
461 and intentResult
kelvin-onlab65782a82015-05-07 14:12:13 -0700462 utilities.assert_equals( expect=main.TRUE,
463 actual=stepResult,
kelvin-onlab05cf7732015-05-08 14:25:46 -0700464 onpass=itemName +
465 ": host intent successful",
466 onfail=itemName +
467 ": Add host intent failed" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700468 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700469 """
470 Add point intents between 2 hosts:
471 - Get device ids
472 - Add point intents
473 - Check intents
474 - Check flows
475 - Ping hosts
476 - Reroute
477 - Link down
478 - Ping hosts
479 - Link up
480 - Ping hosts
481 - Remove intents
482 """
483
kelvin-onlabf70fd542015-05-07 18:41:40 -0700484 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700485 """
486 Add single point to multi point intents
487 - Get device ids
488 - Add single point to multi point intents
489 - Check intents
490 - Check flows
491 - Ping hosts
492 - Reroute
493 - Link down
494 - Ping hosts
495 - Link up
496 - Ping hosts
497 - Remove intents
498 """
499
kelvin-onlabf70fd542015-05-07 18:41:40 -0700500 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700501 """
502 Add multi point to single point intents
503 - Get device ids
504 - Add multi point to single point intents
505 - Check intents
506 - Check flows
507 - Ping hosts
508 - Reroute
509 - Link down
510 - Ping hosts
511 - Link up
512 - Ping hosts
513 - Remove intents
514 """