blob: d74f9a95aa29a74f1acd51a687ae84bdfc8e3b58 [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
kelvin-onlab05cf7732015-05-08 14:25:46 -07008class FuncIntent:
kelvin-onlab4ff9cc12015-05-05 11:14:42 -07009
10 def __init__( self ):
11 self.default = ''
12
13 def CASE10( self, main ):
14 import time
15 import os
kelvin-onlabe5239e52015-05-13 14:46:45 -070016 import imp
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070017 """
18 Startup sequence:
19 cell <name>
20 onos-verify-cell
21 onos-remove-raft-log
22 git pull
23 mvn clean install
24 onos-package
25 onos-install -f
26 onos-wait-for-start
27 """
kelvin-onlabf70fd542015-05-07 18:41:40 -070028 global init
cameron@onlab.us59d29d92015-05-11 14:31:54 -070029 global globalONOSip
kelvin-onlabf70fd542015-05-07 18:41:40 -070030 try:
31 if type(init) is not bool:
32 init = False
33 except NameError:
34 init = False
kelvin-onlab132bd5b2015-05-18 18:15:26 -070035
36 main.wrapper = imp.load_source( 'FuncIntentFunction',
37 '/home/admin/ONLabTest/TestON/tests/' +
38 'FuncIntent/Dependency/' +
39 'FuncIntentFunction.py' )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070040 #Local variables
41 cellName = main.params[ 'ENV' ][ 'cellName' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070042 apps = main.params[ 'ENV' ][ 'cellApps' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070043 gitBranch = main.params[ 'GIT' ][ 'branch' ]
cameron@onlab.us59d29d92015-05-11 14:31:54 -070044 benchIp = os.environ[ 'OCN' ]
kelvin-onlabf70fd542015-05-07 18:41:40 -070045 benchUser = main.params[ 'BENCH' ][ 'user' ]
kelvin-onlab05cf7732015-05-08 14:25:46 -070046 topology = main.params[ 'MININET' ][ 'topo' ]
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-onlab132bd5b2015-05-18 18:15:26 -070050 main.ONOSport = []
51 main.hostsData = {}
kelvin-onlab4ff9cc12015-05-05 11:14:42 -070052 PULLCODE = False
53 if main.params[ 'GIT' ][ 'pull' ] == 'True':
54 PULLCODE = True
55 main.case( "Setting up test environment" )
kelvin-onlabf70fd542015-05-07 18:41:40 -070056 main.CLIs = []
57 for i in range( 1, int( main.numCtrls ) + 1 ):
58 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
kelvin-onlab132bd5b2015-05-18 18:15:26 -070059 main.ONOSport.append( main.params[ 'CTRL' ][ 'port' + str( i ) ] )
cameron@onlab.us7fd2a522015-05-14 11:20:33 -070060
kelvin-onlabf70fd542015-05-07 18:41:40 -070061 # -- INIT SECTION, ONLY RUNS ONCE -- #
62 if init == False:
63 init = True
kelvin-onlabf70fd542015-05-07 18:41:40 -070064
kelvin-onlab05cf7732015-05-08 14:25:46 -070065 main.scale = ( main.params[ 'SCALE' ] ).split( "," )
66 main.numCtrls = int( main.scale[ 0 ] )
kelvin-onlabf70fd542015-05-07 18:41:40 -070067
68 if PULLCODE:
69 main.step( "Git checkout and pull " + gitBranch )
70 main.ONOSbench.gitCheckout( gitBranch )
71 gitPullResult = main.ONOSbench.gitPull()
72 if gitPullResult == main.ERROR:
73 main.log.error( "Error pulling git branch" )
74 main.step( "Using mvn clean & install" )
75 cleanInstallResult = main.ONOSbench.cleanInstall()
76 stepResult = cleanInstallResult
77 utilities.assert_equals( expect=main.TRUE,
78 actual=stepResult,
79 onpass="Successfully compiled " +
80 "latest ONOS",
81 onfail="Failed to compile " +
82 "latest ONOS" )
83 else:
84 main.log.warn( "Did not pull new code so skipping mvn " +
85 "clean install" )
kelvin-onlab132bd5b2015-05-18 18:15:26 -070086
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070087 globalONOSip = main.ONOSbench.getOnosIps()
kelvin-onlab0a28a742015-05-18 16:03:13 -070088
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070089 maxNodes = ( len(globalONOSip) - 2 )
kelvin-onlabf70fd542015-05-07 18:41:40 -070090
kelvin-onlab05cf7732015-05-08 14:25:46 -070091 main.numCtrls = int( main.scale[ 0 ] )
92 main.scale.remove( main.scale[ 0 ] )
cameron@onlab.us59d29d92015-05-11 14:31:54 -070093
cameron@onlab.us033cc0f2015-05-15 15:27:43 -070094 main.ONOSip = []
kelvin-onlab0a28a742015-05-18 16:03:13 -070095 for i in range( maxNodes ):
cameron@onlab.us59d29d92015-05-11 14:31:54 -070096 main.ONOSip.append( globalONOSip[i] )
97
kelvin-onlabf70fd542015-05-07 18:41:40 -070098 #kill off all onos processes
99 main.log.info( "Safety check, killing all ONOS processes" +
100 " before initiating enviornment setup" )
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700101 for i in range(maxNodes):
102 main.ONOSbench.onosDie( globalONOSip[ i ] )
103
kelvin-onlab05cf7732015-05-08 14:25:46 -0700104 print "NODE COUNT = ", main.numCtrls
kelvin-onlabf70fd542015-05-07 18:41:40 -0700105 main.log.info( "Creating cell file" )
106 cellIp = []
kelvin-onlab05cf7732015-05-08 14:25:46 -0700107 for i in range( main.numCtrls ):
108 cellIp.append( str( main.ONOSip[ i ] ) )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700109 print cellIp
110 main.ONOSbench.createCellFile( benchIp, cellName, "",
111 str( apps ), *cellIp )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700112
113 main.step( "Apply cell to environment" )
114 cellResult = main.ONOSbench.setCell( cellName )
115 verifyResult = main.ONOSbench.verifyCell()
116 stepResult = cellResult and verifyResult
117 utilities.assert_equals( expect=main.TRUE,
118 actual=stepResult,
119 onpass="Successfully applied cell to " + \
120 "environment",
121 onfail="Failed to apply cell to environment " )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700122
123 main.step( "Creating ONOS package" )
124 packageResult = main.ONOSbench.onosPackage()
125 stepResult = packageResult
126 utilities.assert_equals( expect=main.TRUE,
127 actual=stepResult,
128 onpass="Successfully created ONOS package",
129 onfail="Failed to create ONOS package" )
130
131 main.step( "Uninstalling ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700132 onosUninstallResult = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700133 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700134 onosUninstallResult = onosUninstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700135 main.ONOSbench.onosUninstall( nodeIp=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700136 stepResult = onosUninstallResult
137 utilities.assert_equals( expect=main.TRUE,
138 actual=stepResult,
139 onpass="Successfully uninstalled ONOS package",
140 onfail="Failed to uninstall ONOS package" )
141 time.sleep( 5 )
142 main.step( "Installing ONOS package" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700143 onosInstallResult = main.TRUE
cameron@onlab.us033cc0f2015-05-15 15:27:43 -0700144 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700145 onosInstallResult = onosInstallResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700146 main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700147 stepResult = onosInstallResult
148 utilities.assert_equals( expect=main.TRUE,
149 actual=stepResult,
150 onpass="Successfully installed ONOS package",
151 onfail="Failed to install ONOS package" )
152
cameron@onlab.us59d29d92015-05-11 14:31:54 -0700153 time.sleep( 20 )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700154 main.step( "Starting ONOS service" )
155 stopResult = main.TRUE
156 startResult = main.TRUE
kelvin-onlabf70fd542015-05-07 18:41:40 -0700157 onosIsUp = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700158 for i in range( main.numCtrls ):
159 onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700160 if onosIsUp == main.TRUE:
161 main.log.report( "ONOS instance is up and ready" )
162 else:
163 main.log.report( "ONOS instance may not be up, stop and " +
164 "start ONOS again " )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700165 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700166 stopResult = stopResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700167 main.ONOSbench.onosStop( main.ONOSip[ i ] )
168 for i in range( main.numCtrls ):
kelvin-onlabf70fd542015-05-07 18:41:40 -0700169 startResult = startResult and \
kelvin-onlab05cf7732015-05-08 14:25:46 -0700170 main.ONOSbench.onosStart( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700171 stepResult = onosIsUp and stopResult and startResult
172 utilities.assert_equals( expect=main.TRUE,
173 actual=stepResult,
174 onpass="ONOS service is ready",
175 onfail="ONOS service did not start properly" )
kelvin-onlabe5239e52015-05-13 14:46:45 -0700176
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700177 main.step( "Start ONOS cli" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700178 cliResult = main.TRUE
kelvin-onlab05cf7732015-05-08 14:25:46 -0700179 for i in range( main.numCtrls ):
180 cliResult = cliResult and \
181 main.CLIs[i].startOnosCli( main.ONOSip[ i ] )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700182 stepResult = cliResult
183 utilities.assert_equals( expect=main.TRUE,
184 actual=stepResult,
185 onpass="Successfully start ONOS cli",
186 onfail="Failed to start ONOS cli" )
187
kelvin-onlab0a28a742015-05-18 16:03:13 -0700188 def CASE9( self, main ):
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700189 '''
190 Report errors/warnings/exceptions
191 '''
192 main.log.info( "Error report: \n" )
193 main.ONOSbench.logReport( globalONOSip[0],
194 [ "INFO", "FOLLOWER", "WARN", "flow", "ERROR" , "Except" ],
195 "s" )
196 #main.ONOSbench.logReport( globalONOSip[1], [ "INFO" ], "d" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700197
198 def CASE11( self, main ):
199 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700200 Start mininet
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700201 """
kelvin-onlab05cf7732015-05-08 14:25:46 -0700202 main.log.report( "Start Mininet topology" )
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700203 main.log.case( "Start Mininet topology" )
204
kelvin-onlabf70fd542015-05-07 18:41:40 -0700205 main.step( "Starting Mininet Topology" )
206 topoResult = main.Mininet1.startNet( topoFile=topology )
207 stepResult = topoResult
208 utilities.assert_equals( expect=main.TRUE,
209 actual=stepResult,
210 onpass="Successfully loaded topology",
211 onfail="Failed to load topology" )
212 # Exit if topology did not load properly
213 if not topoResult:
214 main.cleanup()
215 main.exit()
216
kelvin-onlab05cf7732015-05-08 14:25:46 -0700217 def CASE12( self, main ):
218 """
219 Assign mastership to controllers
220 """
221 import re
222
kelvin-onlabe5239e52015-05-13 14:46:45 -0700223 main.case( "Assign switches to controllers" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700224 main.step( "Assigning switches to controllers" )
225 assignResult = main.TRUE
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700226 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700227 main.Mininet1.assignSwController( sw=str( i ),
228 count=1,
kelvin-onlab05cf7732015-05-08 14:25:46 -0700229 ip1=main.ONOSip[ 0 ],
230 port1=main.ONOSport[ 0 ] )
kelvin-onlab5cbf9992015-05-05 14:34:07 -0700231 for i in range( 1, ( main.numSwitch + 1 ) ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700232 response = main.Mininet1.getSwController( "s" + str( i ) )
233 print( "Response is " + str( response ) )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700234 if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700235 assignResult = assignResult and main.TRUE
236 else:
237 assignResult = main.FALSE
238 stepResult = assignResult
239 utilities.assert_equals( expect=main.TRUE,
240 actual=stepResult,
241 onpass="Successfully assigned switches" +
242 "to controller",
243 onfail="Failed to assign switches to " +
244 "controller" )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700245 def CASE13( self, main ):
246 """
247 Discover all hosts and store its data to a dictionary
248 """
249 main.case( "Discover all hosts" )
250
251 stepResult = main.TRUE
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700252 main.step( "Discover all hosts using pingall " )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700253 stepResult = main.wrapper.getHostsData( main )
kelvin-onlab08900012015-05-20 14:30:44 -0700254 utilities.assert_equals( expect=main.TRUE,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700255 actual=stepResult,
256 onpass="Successfully discovered hosts",
257 onfail="Failed to discover hosts" )
kelvin-onlab4ff9cc12015-05-05 11:14:42 -0700258
kelvin-onlab2ff57022015-05-29 10:48:51 -0700259 def CASE14( self, main ):
260 """
261 Stop mininet
262 """
263 main.log.report( "Stop Mininet topology" )
264 main.log.case( "Stop Mininet topology" )
265
266 main.step( "Stopping Mininet Topology" )
267 topoResult = main.Mininet1.stopNet( )
268 stepResult = topoResult
269 utilities.assert_equals( expect=main.TRUE,
270 actual=stepResult,
271 onpass="Successfully stop mininet",
272 onfail="Failed to stop mininet" )
273 # Exit if topology did not load properly
274 if not topoResult:
275 main.cleanup()
276 main.exit()
277
kelvin-onlabf70fd542015-05-07 18:41:40 -0700278 def CASE1001( self, main ):
kelvin-onlab7c577e82015-05-07 10:45:16 -0700279 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700280 Add host intents between 2 host:
281 - Discover hosts
282 - Add host intents
283 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700284 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700285 - Ping hosts
286 - Reroute
287 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700288 - Verify flows
289 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700290 - Ping hosts
291 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700292 - Verify flows
293 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700294 - Ping hosts
295 - Remove intents
kelvin-onlab7c577e82015-05-07 10:45:16 -0700296 """
297 import time
298 import json
kelvin-onlab65782a82015-05-07 14:12:13 -0700299 import re
kelvin-onlabe5239e52015-05-13 14:46:45 -0700300
301 # Assert variables - These variable's name|format must be followed
302 # if you want to use the wrapper function
303 assert main, "There is no main"
304 assert main.CLIs, "There is no main.CLIs"
305 assert main.Mininet1, "Mininet handle should be named Mininet1"
306 assert main.numSwitch, "Placed the total number of switch topology in \
307 main.numSwitch"
308
kelvin-onlabe5239e52015-05-13 14:46:45 -0700309 main.case( "Add host intents between 2 host" )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700310
kelvin-onlabe5239e52015-05-13 14:46:45 -0700311 stepResult = main.TRUE
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700312 main.step( "IPV4: Add host intents between h1 and h9" )
313 stepResult = main.wrapper.hostIntent( main,
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700314 onosNode='0',
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700315 name='IPV4',
316 host1='h1',
317 host2='h9',
318 host1Id='00:00:00:00:00:01/-1',
319 host2Id='00:00:00:00:00:09/-1',
320 sw1='s5',
321 sw2='s2',
322 expectedLink=18 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700323
kelvin-onlabe5239e52015-05-13 14:46:45 -0700324 utilities.assert_equals( expect=main.TRUE,
325 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700326 onpass="IPV4: Add host intent successful",
327 onfail="IPV4: Add host intent failed" )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700328
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700329 stepResult = main.TRUE
kelvin-onlab381b34c2015-05-21 09:21:06 -0700330 main.step( "DUALSTACK1: Add host intents between h3 and h11" )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700331 stepResult = main.wrapper.hostIntent( main,
332 name='DUALSTACK',
333 host1='h3',
334 host2='h11',
335 host1Id='00:00:00:00:00:03/-1',
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700336 host2Id='00:00:00:00:00:0B/-1',
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700337 sw1='s5',
338 sw2='s2',
339 expectedLink=18 )
340
341 utilities.assert_equals( expect=main.TRUE,
342 actual=stepResult,
kelvin-onlab381b34c2015-05-21 09:21:06 -0700343 onpass="DUALSTACK1: Add host intent" +
344 " successful",
345 onfail="DUALSTACK1: Add host intent failed" )
346
347 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700348 main.step( "DUALSTACK2: Add host intents between h1 and h11" )
kelvin-onlab381b34c2015-05-21 09:21:06 -0700349 stepResult = main.wrapper.hostIntent( main,
350 name='DUALSTACK2',
351 host1='h1',
352 host2='h11',
353 sw1='s5',
354 sw2='s2',
355 expectedLink=18 )
356
357 utilities.assert_equals( expect=main.TRUE,
358 actual=stepResult,
359 onpass="DUALSTACK2: Add host intent" +
360 " successful",
361 onfail="DUALSTACK2: Add host intent failed" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700362
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700363 stepResult = main.TRUE
364 main.step( "1HOP: Add host intents between h1 and h3" )
365 stepResult = main.wrapper.hostIntent( main,
366 name='1HOP',
367 host1='h1',
368 host2='h3' )
369
370 utilities.assert_equals( expect=main.TRUE,
371 actual=stepResult,
372 onpass="1HOP: Add host intent" +
373 " successful",
374 onfail="1HOP: Add host intent failed" )
375
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700376 stepResult = main.TRUE
kaouthera6f37d852015-05-27 13:52:08 -0700377 main.step( "VLAN1: Add vlan host intents between h4 and h12" )
378 stepResult = main.wrapper.hostIntent( main,
379 name='VLAN1',
380 host1='h4',
381 host2='h12',
382 host1Id='00:00:00:00:00:04/100',
383 host2Id='00:00:00:00:00:0C/100',
384 sw1='s5',
385 sw2='s2',
386 expectedLink=18 )
387
388 utilities.assert_equals( expect=main.TRUE,
389 actual=stepResult,
kelvin-onlab2ff57022015-05-29 10:48:51 -0700390 onpass="VLAN1: Add vlan host" +
391 " intent successful",
kaouthera6f37d852015-05-27 13:52:08 -0700392 onfail="VLAN1: Add vlan host intent failed" )
kelvin-onlab2ff57022015-05-29 10:48:51 -0700393
kaouthera6f37d852015-05-27 13:52:08 -0700394 stepResult = main.TRUE
395 main.step( "VLAN2: Add inter vlan host intents between h13 and h20" )
396 stepResult = main.wrapper.hostIntent( main,
397 name='VLAN2',
398 host1='h13',
kelvin-onlab2ff57022015-05-29 10:48:51 -0700399 host2='h20' )
kaouthera6f37d852015-05-27 13:52:08 -0700400
401 utilities.assert_equals( expect=main.FALSE,
402 actual=stepResult,
kelvin-onlab2ff57022015-05-29 10:48:51 -0700403 onpass="VLAN2: Add inter vlan host" +
404 " intent successful",
405 onfail="VLAN2: Add inter vlan host" +
406 " intent failed" )
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700407
kelvin-onlabf70fd542015-05-07 18:41:40 -0700408 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700409 """
410 Add point intents between 2 hosts:
kelvin-onlabe5239e52015-05-13 14:46:45 -0700411 - Get device ids | ports
kelvin-onlab65782a82015-05-07 14:12:13 -0700412 - Add point intents
413 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700414 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700415 - Ping hosts
416 - Reroute
417 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700418 - Verify flows
419 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700420 - Ping hosts
421 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700422 - Verify flows
423 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700424 - Ping hosts
425 - Remove intents
426 """
kelvin-onlabe5239e52015-05-13 14:46:45 -0700427 import time
428 import json
429 import re
kelvin-onlabe5239e52015-05-13 14:46:45 -0700430
431 # Assert variables - These variable's name|format must be followed
432 # if you want to use the wrapper function
433 assert main, "There is no main"
434 assert main.CLIs, "There is no main.CLIs"
435 assert main.Mininet1, "Mininet handle should be named Mininet1"
436 assert main.numSwitch, "Placed the total number of switch topology in \
437 main.numSwitch"
438
kelvin-onlabb2235602015-05-13 17:51:06 -0700439 main.case( "Add point intents between 2 devices" )
440
441 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700442 # No option point intents
443 main.step( "NOOPTION: Add point intents between h1 and h9" )
444 stepResult = main.wrapper.pointIntent(
445 main,
446 name="NOOPTION",
447 host1="h1",
448 host2="h9",
449 deviceId1="of:0000000000000005/1",
450 deviceId2="of:0000000000000006/1",
451 sw1="s5",
452 sw2="s2",
453 expectedLink=18 )
454
455 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700456 utilities.assert_equals( expect=main.TRUE,
457 actual=stepResult,
458 onpass="NOOPTION: Add point intent successful",
459 onfail="NOOPTION: Add point intent failed" )
460
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700461 stepResult = main.TRUE
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700462 stepResult = main.wrapper.pointIntent(
463 main,
464 name="IPV4",
465 host1="h1",
466 host2="h9",
467 deviceId1="of:0000000000000005/1",
468 deviceId2="of:0000000000000006/1",
469 port1="",
470 port2="",
471 ethType="IPV4",
472 mac1="00:00:00:00:00:01",
473 mac2="00:00:00:00:00:09",
474 bandwidth="",
475 lambdaAlloc=False,
476 ipProto="",
477 ip1="",
478 ip2="",
479 tcp1="",
480 tcp2="",
481 sw1="s5",
482 sw2="s2",
483 expectedLink=18 )
484
kelvin-onlabb2235602015-05-13 17:51:06 -0700485 utilities.assert_equals( expect=main.TRUE,
486 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700487 onpass="IPV4: Add point intent successful",
488 onfail="IPV4: Add point intent failed" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700489
kelvin-onlab381b34c2015-05-21 09:21:06 -0700490 stepResult = main.TRUE
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700491 stepResult = main.wrapper.pointIntent(
492 main,
493 name="IPV4_2",
494 host1="h1",
495 host2="h9",
496 deviceId1="of:0000000000000005/1",
497 deviceId2="of:0000000000000006/1",
498 ipProto=1,
499 ip1="",
500 ip2="",
501 tcp1="",
502 tcp2="",
503 sw1="s5",
504 sw2="s2",
505 expectedLink=18 )
506
507 utilities.assert_equals( expect=main.TRUE,
508 actual=stepResult,
509 onpass="IPV4_2: Add point intent successful",
510 onfail="IPV4_2: Add point intent failed" )
511
512 stepResult = main.TRUE
kelvin-onlab381b34c2015-05-21 09:21:06 -0700513 main.step( "DUALSTACK1: Add point intents between h1 and h9" )
514 stepResult = main.wrapper.pointIntent(
515 main,
516 name="DUALSTACK1",
517 host1="h3",
518 host2="h11",
519 deviceId1="of:0000000000000005",
520 deviceId2="of:0000000000000006",
521 port1="3",
522 port2="3",
523 ethType="IPV4",
524 mac1="00:00:00:00:00:03",
525 mac2="00:00:00:00:00:0B",
526 bandwidth="",
527 lambdaAlloc=False,
528 ipProto="",
529 ip1="",
530 ip2="",
531 tcp1="",
532 tcp2="",
533 sw1="s5",
534 sw2="s2",
535 expectedLink=18 )
536
537 utilities.assert_equals( expect=main.TRUE,
538 actual=stepResult,
539 onpass="DUALSTACK1: Add point intent" +
540 " successful",
kaouthera426d0ab2015-05-28 17:41:10 -0700541 onfail="DUALSTACK1: Add point intent failed" )
542 stepResult = main.TRUE
543 main.step( "VLAN: Add point intents between h5 and h21" )
544 stepResult = main.wrapper.pointIntent(
545 main,
546 name="VLAN",
547 host1="h5",
548 host2="h21",
549 deviceId1="of:0000000000000005/5",
550 deviceId2="of:0000000000000007/5",
551 port1="",
552 port2="",
553 ethType="IPV4",
554 mac1="00:00:00:00:00:05",
555 mac2="00:00:00:00:00:15",
556 bandwidth="",
557 lambdaAlloc=False,
558 ipProto="",
559 ip1="",
560 ip2="",
561 tcp1="",
562 tcp2="",
563 sw1="s5",
564 sw2="s2",
565 expectedLink=18 )
566
567 utilities.assert_equals( expect=main.TRUE,
568 actual=stepResult,
569 onpass="VLAN: Add point intent successful",
570 onfail="VLAN: Add point intent failed" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700571
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700572 stepResult = main.TRUE
573 main.step( "1HOP: Add point intents between h1 and h3" )
574 stepResult = main.wrapper.hostIntent( main,
575 name='1HOP',
576 host1='h1',
577 host2='h3' )
578
579 utilities.assert_equals( expect=main.TRUE,
580 actual=stepResult,
581 onpass="1HOP: Add point intent" +
582 " successful",
583 onfail="1HOP: Add point intent failed" )
584
kelvin-onlabf70fd542015-05-07 18:41:40 -0700585 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700586 """
587 Add single point to multi point intents
588 - Get device ids
589 - Add single point to multi point intents
590 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700591 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700592 - Ping hosts
593 - Reroute
594 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700595 - Verify flows
596 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700597 - Ping hosts
598 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700599 - Verify flows
600 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700601 - Ping hosts
602 - Remove intents
603 """
kelvin-onlabf0594d72015-05-19 17:25:12 -0700604 assert main, "There is no main"
605 assert main.CLIs, "There is no main.CLIs"
606 assert main.Mininet1, "Mininet handle should be named Mininet1"
607 assert main.numSwitch, "Placed the total number of switch topology in \
608 main.numSwitch"
kelvin-onlab65782a82015-05-07 14:12:13 -0700609
kelvin-onlabf0594d72015-05-19 17:25:12 -0700610 main.case( "Add single point to multi point intents between devices" )
611
612 stepResult = main.TRUE
kelvin-onlabf0594d72015-05-19 17:25:12 -0700613 hostNames = [ 'h8', 'h16', 'h24' ]
614 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
615 'of:0000000000000007/8' ]
616 macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700617
618 main.step( "NOOPTION: Add single point to multi point intents" )
619 stepResult = main.wrapper.singleToMultiIntent(
620 main,
621 name="NOOPTION",
622 hostNames=hostNames,
623 devices=devices,
624 sw1="s5",
625 sw2="s2",
626 expectedLink=18 )
627
628 utilities.assert_equals( expect=main.TRUE,
629 actual=stepResult,
630 onpass="NOOPTION: Successfully added single "
631 + " point to multi point intents",
632 onfail="NOOPTION: Failed to add single point" +
633 " to multi point intents" )
634
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700635 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700636 main.step( "IPV4: Add single point to multi point intents" )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700637 stepResult = main.wrapper.singleToMultiIntent(
638 main,
kelvin-onlab08900012015-05-20 14:30:44 -0700639 name="IPV4",
kelvin-onlabf0594d72015-05-19 17:25:12 -0700640 hostNames=hostNames,
641 devices=devices,
642 ports=None,
643 ethType="IPV4",
644 macs=macs,
645 bandwidth="",
646 lambdaAlloc=False,
647 ipProto="",
648 ipAddresses="",
649 tcp="",
kelvin-onlab08900012015-05-20 14:30:44 -0700650 sw1="s5",
651 sw2="s2",
652 expectedLink=18 )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700653
654 utilities.assert_equals( expect=main.TRUE,
655 actual=stepResult,
656 onpass="IPV4: Successfully added single point"
657 + " to multi point intents",
658 onfail="IPV4: Failed to add single point" +
659 " to multi point intents" )
kelvin-onlab08900012015-05-20 14:30:44 -0700660
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700661 stepResult = main.TRUE
kelvin-onlab08900012015-05-20 14:30:44 -0700662 main.step( "IPV4_2: Add single point to multi point intents" )
663 hostNames = [ 'h8', 'h16', 'h24' ]
kelvin-onlab08900012015-05-20 14:30:44 -0700664 stepResult = main.wrapper.singleToMultiIntent(
665 main,
666 name="IPV4",
667 hostNames=hostNames,
668 ethType="IPV4",
669 lambdaAlloc=False )
670
671 utilities.assert_equals( expect=main.TRUE,
672 actual=stepResult,
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700673 onpass="IPV4_2: Successfully added single "
674 + " point to multi point intents",
kelvin-onlab08900012015-05-20 14:30:44 -0700675 onfail="IPV4_2: Failed to add single point" +
676 " to multi point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700677 stepResult = main.TRUE
678 main.step( "VLAN: Add single point to multi point intents" )
679 hostNames = [ 'h4', 'h12', 'h20' ]
680 devices = [ 'of:0000000000000005/4', 'of:0000000000000006/4', \
681 'of:0000000000000007/4' ]
682 macs = [ '00:00:00:00:00:04', '00:00:00:00:00:0C', '00:00:00:00:00:14' ]
683 stepResult = main.wrapper.singleToMultiIntent(
684 main,
685 name="VLAN",
686 hostNames=hostNames,
687 devices=devices,
688 ports=None,
689 ethType="IPV4",
690 macs=macs,
691 bandwidth="",
692 lambdaAlloc=False,
693 ipProto="",
694 ipAddresses="",
695 tcp="",
696 sw1="s5",
697 sw2="s2",
698 expectedLink=18 )
699
700 utilities.assert_equals( expect=main.TRUE,
701 actual=stepResult,
702 onpass="VLAN: Successfully added single point"
703 + " to multi point intents",
704 onfail="VLAN: Failed to add single point" +
705 " to multi point intents" )
706
kelvin-onlabf70fd542015-05-07 18:41:40 -0700707 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700708 """
709 Add multi point to single point intents
710 - Get device ids
711 - Add multi point to single point intents
712 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700713 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700714 - Ping hosts
715 - Reroute
716 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700717 - Verify flows
718 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700719 - Ping hosts
720 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700721 - Verify flows
722 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700723 - Ping hosts
kaouthera426d0ab2015-05-28 17:41:10 -0700724 - Remove intents
kelvin-onlab65782a82015-05-07 14:12:13 -0700725 """
kelvin-onlabc751ab42015-05-21 14:09:39 -0700726 assert main, "There is no main"
727 assert main.CLIs, "There is no main.CLIs"
728 assert main.Mininet1, "Mininet handle should be named Mininet1"
729 assert main.numSwitch, "Placed the total number of switch topology in \
730 main.numSwitch"
731
732 main.case( "Add multi point to single point intents between devices" )
733
734 stepResult = main.TRUE
kelvin-onlabc751ab42015-05-21 14:09:39 -0700735 hostNames = [ 'h8', 'h16', 'h24' ]
736 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
737 'of:0000000000000007/8' ]
738 macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700739
740 main.step( "NOOPTION: Add multi point to single point intents" )
741 stepResult = main.wrapper.multiToSingleIntent(
742 main,
743 name="NOOPTION",
744 hostNames=hostNames,
745 devices=devices,
746 sw1="s5",
747 sw2="s2",
748 expectedLink=18 )
749
750 utilities.assert_equals( expect=main.TRUE,
751 actual=stepResult,
752 onpass="NOOPTION: Successfully added multi "
753 + " point to single point intents",
754 onfail="NOOPTION: Failed to add multi point" +
755 " to single point intents" )
756
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700757 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700758 main.step( "IPV4: Add multi point to single point intents" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700759 stepResult = main.wrapper.multiToSingleIntent(
760 main,
761 name="IPV4",
762 hostNames=hostNames,
763 devices=devices,
764 ports=None,
765 ethType="IPV4",
766 macs=macs,
767 bandwidth="",
768 lambdaAlloc=False,
769 ipProto="",
770 ipAddresses="",
771 tcp="",
772 sw1="s5",
773 sw2="s2",
774 expectedLink=18 )
775
776 utilities.assert_equals( expect=main.TRUE,
777 actual=stepResult,
778 onpass="IPV4: Successfully added multi point"
779 + " to single point intents",
780 onfail="IPV4: Failed to add multi point" +
781 " to single point intents" )
782
kelvin-onlaba297c4d2015-06-01 13:53:55 -0700783 stepResult = main.TRUE
kelvin-onlabc751ab42015-05-21 14:09:39 -0700784 main.step( "IPV4_2: Add multi point to single point intents" )
785 hostNames = [ 'h8', 'h16', 'h24' ]
786 stepResult = main.wrapper.multiToSingleIntent(
787 main,
788 name="IPV4",
789 hostNames=hostNames,
790 ethType="IPV4",
791 lambdaAlloc=False )
792
793 utilities.assert_equals( expect=main.TRUE,
794 actual=stepResult,
795 onpass="IPV4_2: Successfully added multi point"
796 + " to single point intents",
797 onfail="IPV4_2: Failed to add multi point" +
798 " to single point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700799
800 stepResult = main.TRUE
801 main.step( "VLAN: Add multi point to single point intents" )
802 hostNames = [ 'h5', 'h13', 'h21' ]
803 devices = [ 'of:0000000000000005/5', 'of:0000000000000006/5', \
804 'of:0000000000000007/5' ]
805 macs = [ '00:00:00:00:00:05', '00:00:00:00:00:0D', '00:00:00:00:00:15' ]
806 stepResult = main.wrapper.multiToSingleIntent(
807 main,
808 name="VLAN",
809 hostNames=hostNames,
810 devices=devices,
811 ports=None,
812 ethType="IPV4",
813 macs=macs,
814 bandwidth="",
815 lambdaAlloc=False,
816 ipProto="",
817 ipAddresses="",
818 tcp="",
819 sw1="s5",
820 sw2="s2",
821 expectedLink=18 )
822
823 utilities.assert_equals( expect=main.TRUE,
824 actual=stepResult,
825 onpass="VLAN: Successfully added multi point"
826 + " to single point intents",
827 onfail="VLAN: Failed to add multi point" +
828 " to single point intents" )