blob: 7ae9df939f79ef21d20f6f5cf40116f305b3ed29 [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,
314 name='IPV4',
315 host1='h1',
316 host2='h9',
317 host1Id='00:00:00:00:00:01/-1',
318 host2Id='00:00:00:00:00:09/-1',
319 sw1='s5',
320 sw2='s2',
321 expectedLink=18 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700322
kelvin-onlabe5239e52015-05-13 14:46:45 -0700323 utilities.assert_equals( expect=main.TRUE,
324 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700325 onpass="IPV4: Add host intent successful",
326 onfail="IPV4: Add host intent failed" )
327 stepResult = main.TRUE
328
kelvin-onlab381b34c2015-05-21 09:21:06 -0700329 main.step( "DUALSTACK1: Add host intents between h3 and h11" )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700330 stepResult = main.wrapper.hostIntent( main,
331 name='DUALSTACK',
332 host1='h3',
333 host2='h11',
334 host1Id='00:00:00:00:00:03/-1',
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700335 host2Id='00:00:00:00:00:0B/-1',
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700336 sw1='s5',
337 sw2='s2',
338 expectedLink=18 )
339
340 utilities.assert_equals( expect=main.TRUE,
341 actual=stepResult,
kelvin-onlab381b34c2015-05-21 09:21:06 -0700342 onpass="DUALSTACK1: Add host intent" +
343 " successful",
344 onfail="DUALSTACK1: Add host intent failed" )
345
346 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700347 main.step( "DUALSTACK2: Add host intents between h1 and h11" )
kelvin-onlab381b34c2015-05-21 09:21:06 -0700348 stepResult = main.wrapper.hostIntent( main,
349 name='DUALSTACK2',
350 host1='h1',
351 host2='h11',
352 sw1='s5',
353 sw2='s2',
354 expectedLink=18 )
355
356 utilities.assert_equals( expect=main.TRUE,
357 actual=stepResult,
358 onpass="DUALSTACK2: Add host intent" +
359 " successful",
360 onfail="DUALSTACK2: Add host intent failed" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700361
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700362 stepResult = main.TRUE
363 main.step( "1HOP: Add host intents between h1 and h3" )
364 stepResult = main.wrapper.hostIntent( main,
365 name='1HOP',
366 host1='h1',
367 host2='h3' )
368
369 utilities.assert_equals( expect=main.TRUE,
370 actual=stepResult,
371 onpass="1HOP: Add host intent" +
372 " successful",
373 onfail="1HOP: Add host intent failed" )
374
kaouthera6f37d852015-05-27 13:52:08 -0700375 main.step( "VLAN1: Add vlan host intents between h4 and h12" )
376 stepResult = main.wrapper.hostIntent( main,
377 name='VLAN1',
378 host1='h4',
379 host2='h12',
380 host1Id='00:00:00:00:00:04/100',
381 host2Id='00:00:00:00:00:0C/100',
382 sw1='s5',
383 sw2='s2',
384 expectedLink=18 )
385
386 utilities.assert_equals( expect=main.TRUE,
387 actual=stepResult,
kelvin-onlab2ff57022015-05-29 10:48:51 -0700388 onpass="VLAN1: Add vlan host" +
389 " intent successful",
kaouthera6f37d852015-05-27 13:52:08 -0700390 onfail="VLAN1: Add vlan host intent failed" )
kelvin-onlab2ff57022015-05-29 10:48:51 -0700391
kaouthera6f37d852015-05-27 13:52:08 -0700392 stepResult = main.TRUE
393 main.step( "VLAN2: Add inter vlan host intents between h13 and h20" )
394 stepResult = main.wrapper.hostIntent( main,
395 name='VLAN2',
396 host1='h13',
kelvin-onlab2ff57022015-05-29 10:48:51 -0700397 host2='h20' )
kaouthera6f37d852015-05-27 13:52:08 -0700398
399 utilities.assert_equals( expect=main.FALSE,
400 actual=stepResult,
kelvin-onlab2ff57022015-05-29 10:48:51 -0700401 onpass="VLAN2: Add inter vlan host" +
402 " intent successful",
403 onfail="VLAN2: Add inter vlan host" +
404 " intent failed" )
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700405
kelvin-onlabf70fd542015-05-07 18:41:40 -0700406 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700407 """
408 Add point intents between 2 hosts:
kelvin-onlabe5239e52015-05-13 14:46:45 -0700409 - Get device ids | ports
kelvin-onlab65782a82015-05-07 14:12:13 -0700410 - Add point intents
411 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700412 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700413 - Ping hosts
414 - Reroute
415 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700416 - Verify flows
417 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700418 - Ping hosts
419 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700420 - Verify flows
421 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700422 - Ping hosts
423 - Remove intents
424 """
kelvin-onlabe5239e52015-05-13 14:46:45 -0700425 import time
426 import json
427 import re
kelvin-onlabe5239e52015-05-13 14:46:45 -0700428
429 # Assert variables - These variable's name|format must be followed
430 # if you want to use the wrapper function
431 assert main, "There is no main"
432 assert main.CLIs, "There is no main.CLIs"
433 assert main.Mininet1, "Mininet handle should be named Mininet1"
434 assert main.numSwitch, "Placed the total number of switch topology in \
435 main.numSwitch"
436
kelvin-onlabb2235602015-05-13 17:51:06 -0700437 main.case( "Add point intents between 2 devices" )
438
439 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700440 # No option point intents
441 main.step( "NOOPTION: Add point intents between h1 and h9" )
442 stepResult = main.wrapper.pointIntent(
443 main,
444 name="NOOPTION",
445 host1="h1",
446 host2="h9",
447 deviceId1="of:0000000000000005/1",
448 deviceId2="of:0000000000000006/1",
449 sw1="s5",
450 sw2="s2",
451 expectedLink=18 )
452
453 stepResult = main.TRUE
454 main.step( "NOOPTION: Add point intents between h1 and h9" )
455 utilities.assert_equals( expect=main.TRUE,
456 actual=stepResult,
457 onpass="NOOPTION: Add point intent successful",
458 onfail="NOOPTION: Add point intent failed" )
459
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700460 stepResult = main.wrapper.pointIntent(
461 main,
462 name="IPV4",
463 host1="h1",
464 host2="h9",
465 deviceId1="of:0000000000000005/1",
466 deviceId2="of:0000000000000006/1",
467 port1="",
468 port2="",
469 ethType="IPV4",
470 mac1="00:00:00:00:00:01",
471 mac2="00:00:00:00:00:09",
472 bandwidth="",
473 lambdaAlloc=False,
474 ipProto="",
475 ip1="",
476 ip2="",
477 tcp1="",
478 tcp2="",
479 sw1="s5",
480 sw2="s2",
481 expectedLink=18 )
482
kelvin-onlabb2235602015-05-13 17:51:06 -0700483 utilities.assert_equals( expect=main.TRUE,
484 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700485 onpass="IPV4: Add point intent successful",
486 onfail="IPV4: Add point intent failed" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700487
kelvin-onlab381b34c2015-05-21 09:21:06 -0700488 stepResult = main.TRUE
489 main.step( "DUALSTACK1: Add point intents between h1 and h9" )
490 stepResult = main.wrapper.pointIntent(
491 main,
492 name="DUALSTACK1",
493 host1="h3",
494 host2="h11",
495 deviceId1="of:0000000000000005",
496 deviceId2="of:0000000000000006",
497 port1="3",
498 port2="3",
499 ethType="IPV4",
500 mac1="00:00:00:00:00:03",
501 mac2="00:00:00:00:00:0B",
502 bandwidth="",
503 lambdaAlloc=False,
504 ipProto="",
505 ip1="",
506 ip2="",
507 tcp1="",
508 tcp2="",
509 sw1="s5",
510 sw2="s2",
511 expectedLink=18 )
512
513 utilities.assert_equals( expect=main.TRUE,
514 actual=stepResult,
515 onpass="DUALSTACK1: Add point intent" +
516 " successful",
kaouthera426d0ab2015-05-28 17:41:10 -0700517 onfail="DUALSTACK1: Add point intent failed" )
518 stepResult = main.TRUE
519 main.step( "VLAN: Add point intents between h5 and h21" )
520 stepResult = main.wrapper.pointIntent(
521 main,
522 name="VLAN",
523 host1="h5",
524 host2="h21",
525 deviceId1="of:0000000000000005/5",
526 deviceId2="of:0000000000000007/5",
527 port1="",
528 port2="",
529 ethType="IPV4",
530 mac1="00:00:00:00:00:05",
531 mac2="00:00:00:00:00:15",
532 bandwidth="",
533 lambdaAlloc=False,
534 ipProto="",
535 ip1="",
536 ip2="",
537 tcp1="",
538 tcp2="",
539 sw1="s5",
540 sw2="s2",
541 expectedLink=18 )
542
543 utilities.assert_equals( expect=main.TRUE,
544 actual=stepResult,
545 onpass="VLAN: Add point intent successful",
546 onfail="VLAN: Add point intent failed" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700547
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700548 stepResult = main.TRUE
549 main.step( "1HOP: Add point intents between h1 and h3" )
550 stepResult = main.wrapper.hostIntent( main,
551 name='1HOP',
552 host1='h1',
553 host2='h3' )
554
555 utilities.assert_equals( expect=main.TRUE,
556 actual=stepResult,
557 onpass="1HOP: Add point intent" +
558 " successful",
559 onfail="1HOP: Add point intent failed" )
560
kelvin-onlabf70fd542015-05-07 18:41:40 -0700561 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700562 """
563 Add single point to multi point intents
564 - Get device ids
565 - Add single point to multi point intents
566 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700567 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700568 - Ping hosts
569 - Reroute
570 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700571 - Verify flows
572 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700573 - Ping hosts
574 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700575 - Verify flows
576 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700577 - Ping hosts
578 - Remove intents
579 """
kelvin-onlabf0594d72015-05-19 17:25:12 -0700580 assert main, "There is no main"
581 assert main.CLIs, "There is no main.CLIs"
582 assert main.Mininet1, "Mininet handle should be named Mininet1"
583 assert main.numSwitch, "Placed the total number of switch topology in \
584 main.numSwitch"
kelvin-onlab65782a82015-05-07 14:12:13 -0700585
kelvin-onlabf0594d72015-05-19 17:25:12 -0700586 main.case( "Add single point to multi point intents between devices" )
587
588 stepResult = main.TRUE
kelvin-onlabf0594d72015-05-19 17:25:12 -0700589 hostNames = [ 'h8', 'h16', 'h24' ]
590 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
591 'of:0000000000000007/8' ]
592 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 -0700593
594 main.step( "NOOPTION: Add single point to multi point intents" )
595 stepResult = main.wrapper.singleToMultiIntent(
596 main,
597 name="NOOPTION",
598 hostNames=hostNames,
599 devices=devices,
600 sw1="s5",
601 sw2="s2",
602 expectedLink=18 )
603
604 utilities.assert_equals( expect=main.TRUE,
605 actual=stepResult,
606 onpass="NOOPTION: Successfully added single "
607 + " point to multi point intents",
608 onfail="NOOPTION: Failed to add single point" +
609 " to multi point intents" )
610
611
612
613 main.step( "IPV4: Add single point to multi point intents" )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700614 stepResult = main.wrapper.singleToMultiIntent(
615 main,
kelvin-onlab08900012015-05-20 14:30:44 -0700616 name="IPV4",
kelvin-onlabf0594d72015-05-19 17:25:12 -0700617 hostNames=hostNames,
618 devices=devices,
619 ports=None,
620 ethType="IPV4",
621 macs=macs,
622 bandwidth="",
623 lambdaAlloc=False,
624 ipProto="",
625 ipAddresses="",
626 tcp="",
kelvin-onlab08900012015-05-20 14:30:44 -0700627 sw1="s5",
628 sw2="s2",
629 expectedLink=18 )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700630
631 utilities.assert_equals( expect=main.TRUE,
632 actual=stepResult,
633 onpass="IPV4: Successfully added single point"
634 + " to multi point intents",
635 onfail="IPV4: Failed to add single point" +
636 " to multi point intents" )
kelvin-onlab08900012015-05-20 14:30:44 -0700637
638 main.step( "IPV4_2: Add single point to multi point intents" )
639 hostNames = [ 'h8', 'h16', 'h24' ]
kelvin-onlab08900012015-05-20 14:30:44 -0700640 stepResult = main.wrapper.singleToMultiIntent(
641 main,
642 name="IPV4",
643 hostNames=hostNames,
644 ethType="IPV4",
645 lambdaAlloc=False )
646
647 utilities.assert_equals( expect=main.TRUE,
648 actual=stepResult,
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700649 onpass="IPV4_2: Successfully added single "
650 + " point to multi point intents",
kelvin-onlab08900012015-05-20 14:30:44 -0700651 onfail="IPV4_2: Failed to add single point" +
652 " to multi point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700653 stepResult = main.TRUE
654 main.step( "VLAN: Add single point to multi point intents" )
655 hostNames = [ 'h4', 'h12', 'h20' ]
656 devices = [ 'of:0000000000000005/4', 'of:0000000000000006/4', \
657 'of:0000000000000007/4' ]
658 macs = [ '00:00:00:00:00:04', '00:00:00:00:00:0C', '00:00:00:00:00:14' ]
659 stepResult = main.wrapper.singleToMultiIntent(
660 main,
661 name="VLAN",
662 hostNames=hostNames,
663 devices=devices,
664 ports=None,
665 ethType="IPV4",
666 macs=macs,
667 bandwidth="",
668 lambdaAlloc=False,
669 ipProto="",
670 ipAddresses="",
671 tcp="",
672 sw1="s5",
673 sw2="s2",
674 expectedLink=18 )
675
676 utilities.assert_equals( expect=main.TRUE,
677 actual=stepResult,
678 onpass="VLAN: Successfully added single point"
679 + " to multi point intents",
680 onfail="VLAN: Failed to add single point" +
681 " to multi point intents" )
682
kelvin-onlabf70fd542015-05-07 18:41:40 -0700683 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700684 """
685 Add multi point to single point intents
686 - Get device ids
687 - Add multi point to single point intents
688 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700689 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700690 - Ping hosts
691 - Reroute
692 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700693 - Verify flows
694 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700695 - Ping hosts
696 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700697 - Verify flows
698 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700699 - Ping hosts
kaouthera426d0ab2015-05-28 17:41:10 -0700700 - Remove intents
kelvin-onlab65782a82015-05-07 14:12:13 -0700701 """
kelvin-onlabc751ab42015-05-21 14:09:39 -0700702 assert main, "There is no main"
703 assert main.CLIs, "There is no main.CLIs"
704 assert main.Mininet1, "Mininet handle should be named Mininet1"
705 assert main.numSwitch, "Placed the total number of switch topology in \
706 main.numSwitch"
707
708 main.case( "Add multi point to single point intents between devices" )
709
710 stepResult = main.TRUE
kelvin-onlabc751ab42015-05-21 14:09:39 -0700711 hostNames = [ 'h8', 'h16', 'h24' ]
712 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
713 'of:0000000000000007/8' ]
714 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 -0700715
716 main.step( "NOOPTION: Add multi point to single point intents" )
717 stepResult = main.wrapper.multiToSingleIntent(
718 main,
719 name="NOOPTION",
720 hostNames=hostNames,
721 devices=devices,
722 sw1="s5",
723 sw2="s2",
724 expectedLink=18 )
725
726 utilities.assert_equals( expect=main.TRUE,
727 actual=stepResult,
728 onpass="NOOPTION: Successfully added multi "
729 + " point to single point intents",
730 onfail="NOOPTION: Failed to add multi point" +
731 " to single point intents" )
732
733
734 main.step( "IPV4: Add multi point to single point intents" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700735 stepResult = main.wrapper.multiToSingleIntent(
736 main,
737 name="IPV4",
738 hostNames=hostNames,
739 devices=devices,
740 ports=None,
741 ethType="IPV4",
742 macs=macs,
743 bandwidth="",
744 lambdaAlloc=False,
745 ipProto="",
746 ipAddresses="",
747 tcp="",
748 sw1="s5",
749 sw2="s2",
750 expectedLink=18 )
751
752 utilities.assert_equals( expect=main.TRUE,
753 actual=stepResult,
754 onpass="IPV4: Successfully added multi point"
755 + " to single point intents",
756 onfail="IPV4: Failed to add multi point" +
757 " to single point intents" )
758
759 main.step( "IPV4_2: Add multi point to single point intents" )
760 hostNames = [ 'h8', 'h16', 'h24' ]
761 stepResult = main.wrapper.multiToSingleIntent(
762 main,
763 name="IPV4",
764 hostNames=hostNames,
765 ethType="IPV4",
766 lambdaAlloc=False )
767
768 utilities.assert_equals( expect=main.TRUE,
769 actual=stepResult,
770 onpass="IPV4_2: Successfully added multi point"
771 + " to single point intents",
772 onfail="IPV4_2: Failed to add multi point" +
773 " to single point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700774
775 stepResult = main.TRUE
776 main.step( "VLAN: Add multi point to single point intents" )
777 hostNames = [ 'h5', 'h13', 'h21' ]
778 devices = [ 'of:0000000000000005/5', 'of:0000000000000006/5', \
779 'of:0000000000000007/5' ]
780 macs = [ '00:00:00:00:00:05', '00:00:00:00:00:0D', '00:00:00:00:00:15' ]
781 stepResult = main.wrapper.multiToSingleIntent(
782 main,
783 name="VLAN",
784 hostNames=hostNames,
785 devices=devices,
786 ports=None,
787 ethType="IPV4",
788 macs=macs,
789 bandwidth="",
790 lambdaAlloc=False,
791 ipProto="",
792 ipAddresses="",
793 tcp="",
794 sw1="s5",
795 sw2="s2",
796 expectedLink=18 )
797
798 utilities.assert_equals( expect=main.TRUE,
799 actual=stepResult,
800 onpass="VLAN: Successfully added multi point"
801 + " to single point intents",
802 onfail="VLAN: Failed to add multi point" +
803 " to single point intents" )