blob: fac3fd6d2fef4fe8da36a5032d01bf9ec52bb2bd [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-onlabf70fd542015-05-07 18:41:40 -0700259 def CASE1001( self, main ):
kelvin-onlab7c577e82015-05-07 10:45:16 -0700260 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700261 Add host intents between 2 host:
262 - Discover hosts
263 - Add host intents
264 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700265 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700266 - Ping hosts
267 - Reroute
268 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700269 - Verify flows
270 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700271 - Ping hosts
272 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700273 - Verify flows
274 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700275 - Ping hosts
276 - Remove intents
kelvin-onlab7c577e82015-05-07 10:45:16 -0700277 """
278 import time
279 import json
kelvin-onlab65782a82015-05-07 14:12:13 -0700280 import re
kelvin-onlabe5239e52015-05-13 14:46:45 -0700281
282 # Assert variables - These variable's name|format must be followed
283 # if you want to use the wrapper function
284 assert main, "There is no main"
285 assert main.CLIs, "There is no main.CLIs"
286 assert main.Mininet1, "Mininet handle should be named Mininet1"
287 assert main.numSwitch, "Placed the total number of switch topology in \
288 main.numSwitch"
289
kelvin-onlabe5239e52015-05-13 14:46:45 -0700290 main.case( "Add host intents between 2 host" )
kelvin-onlab05cf7732015-05-08 14:25:46 -0700291
kelvin-onlabe5239e52015-05-13 14:46:45 -0700292 stepResult = main.TRUE
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700293 main.step( "IPV4: Add host intents between h1 and h9" )
294 stepResult = main.wrapper.hostIntent( main,
295 name='IPV4',
296 host1='h1',
297 host2='h9',
298 host1Id='00:00:00:00:00:01/-1',
299 host2Id='00:00:00:00:00:09/-1',
300 sw1='s5',
301 sw2='s2',
302 expectedLink=18 )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700303
kelvin-onlabe5239e52015-05-13 14:46:45 -0700304 utilities.assert_equals( expect=main.TRUE,
305 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700306 onpass="IPV4: Add host intent successful",
307 onfail="IPV4: Add host intent failed" )
308 stepResult = main.TRUE
309
kelvin-onlab381b34c2015-05-21 09:21:06 -0700310 main.step( "DUALSTACK1: Add host intents between h3 and h11" )
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700311 stepResult = main.wrapper.hostIntent( main,
312 name='DUALSTACK',
313 host1='h3',
314 host2='h11',
315 host1Id='00:00:00:00:00:03/-1',
kelvin-onlab132bd5b2015-05-18 18:15:26 -0700316 host2Id='00:00:00:00:00:0B/-1',
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700317 sw1='s5',
318 sw2='s2',
319 expectedLink=18 )
320
321 utilities.assert_equals( expect=main.TRUE,
322 actual=stepResult,
kelvin-onlab381b34c2015-05-21 09:21:06 -0700323 onpass="DUALSTACK1: Add host intent" +
324 " successful",
325 onfail="DUALSTACK1: Add host intent failed" )
326
327 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700328 main.step( "DUALSTACK2: Add host intents between h1 and h11" )
kelvin-onlab381b34c2015-05-21 09:21:06 -0700329 stepResult = main.wrapper.hostIntent( main,
330 name='DUALSTACK2',
331 host1='h1',
332 host2='h11',
333 sw1='s5',
334 sw2='s2',
335 expectedLink=18 )
336
337 utilities.assert_equals( expect=main.TRUE,
338 actual=stepResult,
339 onpass="DUALSTACK2: Add host intent" +
340 " successful",
341 onfail="DUALSTACK2: Add host intent failed" )
kelvin-onlab7c577e82015-05-07 10:45:16 -0700342
kaouthera6f37d852015-05-27 13:52:08 -0700343 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700344 main.step( "1HOP: Add host intents between h1 and h3" )
345 stepResult = main.wrapper.hostIntent( main,
346 name='1HOP',
347 host1='h1',
348 host2='h3' )
349
350 utilities.assert_equals( expect=main.TRUE,
351 actual=stepResult,
352 onpass="1HOP: Add host intent" +
353 " successful",
354 onfail="1HOP: Add host intent failed" )
355
kaouthera6f37d852015-05-27 13:52:08 -0700356 main.step( "VLAN1: Add vlan host intents between h4 and h12" )
357 stepResult = main.wrapper.hostIntent( main,
358 name='VLAN1',
359 host1='h4',
360 host2='h12',
361 host1Id='00:00:00:00:00:04/100',
362 host2Id='00:00:00:00:00:0C/100',
363 sw1='s5',
364 sw2='s2',
365 expectedLink=18 )
366
367 utilities.assert_equals( expect=main.TRUE,
368 actual=stepResult,
369 onpass="VLAN1: Add vlan host intent successful",
370 onfail="VLAN1: Add vlan host intent failed" )
371 stepResult = main.TRUE
372 main.step( "VLAN2: Add inter vlan host intents between h13 and h20" )
373 stepResult = main.wrapper.hostIntent( main,
374 name='VLAN2',
375 host1='h13',
376 host2='h20',
377 host1Id='',
378 host2Id='',
379 sw1='s5',
380 sw2='s2',
381 expectedLink=18 )
382
383 utilities.assert_equals( expect=main.FALSE,
384 actual=stepResult,
385 onpass="VLAN2: Add inter vlan host intent successful",
386 onfail="VLAN2: Add inter vlan host intent failed" )
387
kelvin-onlabf70fd542015-05-07 18:41:40 -0700388 def CASE1002( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700389 """
390 Add point intents between 2 hosts:
kelvin-onlabe5239e52015-05-13 14:46:45 -0700391 - Get device ids | ports
kelvin-onlab65782a82015-05-07 14:12:13 -0700392 - Add point intents
393 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700394 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700395 - Ping hosts
396 - Reroute
397 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700398 - Verify flows
399 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700400 - Ping hosts
401 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700402 - Verify flows
403 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700404 - Ping hosts
405 - Remove intents
406 """
kelvin-onlabe5239e52015-05-13 14:46:45 -0700407 import time
408 import json
409 import re
kelvin-onlabe5239e52015-05-13 14:46:45 -0700410
411 # Assert variables - These variable's name|format must be followed
412 # if you want to use the wrapper function
413 assert main, "There is no main"
414 assert main.CLIs, "There is no main.CLIs"
415 assert main.Mininet1, "Mininet handle should be named Mininet1"
416 assert main.numSwitch, "Placed the total number of switch topology in \
417 main.numSwitch"
418
kelvin-onlabb2235602015-05-13 17:51:06 -0700419 main.case( "Add point intents between 2 devices" )
420
421 stepResult = main.TRUE
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700422 # No option point intents
423 main.step( "NOOPTION: Add point intents between h1 and h9" )
424 stepResult = main.wrapper.pointIntent(
425 main,
426 name="NOOPTION",
427 host1="h1",
428 host2="h9",
429 deviceId1="of:0000000000000005/1",
430 deviceId2="of:0000000000000006/1",
431 sw1="s5",
432 sw2="s2",
433 expectedLink=18 )
434
435 stepResult = main.TRUE
436 main.step( "NOOPTION: Add point intents between h1 and h9" )
437 utilities.assert_equals( expect=main.TRUE,
438 actual=stepResult,
439 onpass="NOOPTION: Add point intent successful",
440 onfail="NOOPTION: Add point intent failed" )
441
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700442 stepResult = main.wrapper.pointIntent(
443 main,
444 name="IPV4",
445 host1="h1",
446 host2="h9",
447 deviceId1="of:0000000000000005/1",
448 deviceId2="of:0000000000000006/1",
449 port1="",
450 port2="",
451 ethType="IPV4",
452 mac1="00:00:00:00:00:01",
453 mac2="00:00:00:00:00:09",
454 bandwidth="",
455 lambdaAlloc=False,
456 ipProto="",
457 ip1="",
458 ip2="",
459 tcp1="",
460 tcp2="",
461 sw1="s5",
462 sw2="s2",
463 expectedLink=18 )
464
kelvin-onlabb2235602015-05-13 17:51:06 -0700465 utilities.assert_equals( expect=main.TRUE,
466 actual=stepResult,
kelvin-onlab2ccad6e2015-05-18 10:36:54 -0700467 onpass="IPV4: Add point intent successful",
468 onfail="IPV4: Add point intent failed" )
kelvin-onlab65782a82015-05-07 14:12:13 -0700469
kelvin-onlab381b34c2015-05-21 09:21:06 -0700470 stepResult = main.TRUE
471 main.step( "DUALSTACK1: Add point intents between h1 and h9" )
472 stepResult = main.wrapper.pointIntent(
473 main,
474 name="DUALSTACK1",
475 host1="h3",
476 host2="h11",
477 deviceId1="of:0000000000000005",
478 deviceId2="of:0000000000000006",
479 port1="3",
480 port2="3",
481 ethType="IPV4",
482 mac1="00:00:00:00:00:03",
483 mac2="00:00:00:00:00:0B",
484 bandwidth="",
485 lambdaAlloc=False,
486 ipProto="",
487 ip1="",
488 ip2="",
489 tcp1="",
490 tcp2="",
491 sw1="s5",
492 sw2="s2",
493 expectedLink=18 )
494
495 utilities.assert_equals( expect=main.TRUE,
496 actual=stepResult,
497 onpass="DUALSTACK1: Add point intent" +
498 " successful",
kaouthera426d0ab2015-05-28 17:41:10 -0700499 onfail="DUALSTACK1: Add point intent failed" )
500 stepResult = main.TRUE
501 main.step( "VLAN: Add point intents between h5 and h21" )
502 stepResult = main.wrapper.pointIntent(
503 main,
504 name="VLAN",
505 host1="h5",
506 host2="h21",
507 deviceId1="of:0000000000000005/5",
508 deviceId2="of:0000000000000007/5",
509 port1="",
510 port2="",
511 ethType="IPV4",
512 mac1="00:00:00:00:00:05",
513 mac2="00:00:00:00:00:15",
514 bandwidth="",
515 lambdaAlloc=False,
516 ipProto="",
517 ip1="",
518 ip2="",
519 tcp1="",
520 tcp2="",
521 sw1="s5",
522 sw2="s2",
523 expectedLink=18 )
524
525 utilities.assert_equals( expect=main.TRUE,
526 actual=stepResult,
527 onpass="VLAN: Add point intent successful",
528 onfail="VLAN: Add point intent failed" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700529
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700530 stepResult = main.TRUE
531 main.step( "1HOP: Add point intents between h1 and h3" )
532 stepResult = main.wrapper.hostIntent( main,
533 name='1HOP',
534 host1='h1',
535 host2='h3' )
536
537 utilities.assert_equals( expect=main.TRUE,
538 actual=stepResult,
539 onpass="1HOP: Add point intent" +
540 " successful",
541 onfail="1HOP: Add point intent failed" )
542
kelvin-onlabf70fd542015-05-07 18:41:40 -0700543 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700544 """
545 Add single point to multi point intents
546 - Get device ids
547 - Add single point to multi point intents
548 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700549 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700550 - Ping hosts
551 - Reroute
552 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700553 - Verify flows
554 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700555 - Ping hosts
556 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700557 - Verify flows
558 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700559 - Ping hosts
560 - Remove intents
561 """
kelvin-onlabf0594d72015-05-19 17:25:12 -0700562 assert main, "There is no main"
563 assert main.CLIs, "There is no main.CLIs"
564 assert main.Mininet1, "Mininet handle should be named Mininet1"
565 assert main.numSwitch, "Placed the total number of switch topology in \
566 main.numSwitch"
kelvin-onlab65782a82015-05-07 14:12:13 -0700567
kelvin-onlabf0594d72015-05-19 17:25:12 -0700568 main.case( "Add single point to multi point intents between devices" )
569
570 stepResult = main.TRUE
kelvin-onlabf0594d72015-05-19 17:25:12 -0700571 hostNames = [ 'h8', 'h16', 'h24' ]
572 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
573 'of:0000000000000007/8' ]
574 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 -0700575
576 main.step( "NOOPTION: Add single point to multi point intents" )
577 stepResult = main.wrapper.singleToMultiIntent(
578 main,
579 name="NOOPTION",
580 hostNames=hostNames,
581 devices=devices,
582 sw1="s5",
583 sw2="s2",
584 expectedLink=18 )
585
586 utilities.assert_equals( expect=main.TRUE,
587 actual=stepResult,
588 onpass="NOOPTION: Successfully added single "
589 + " point to multi point intents",
590 onfail="NOOPTION: Failed to add single point" +
591 " to multi point intents" )
592
593
594
595 main.step( "IPV4: Add single point to multi point intents" )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700596 stepResult = main.wrapper.singleToMultiIntent(
597 main,
kelvin-onlab08900012015-05-20 14:30:44 -0700598 name="IPV4",
kelvin-onlabf0594d72015-05-19 17:25:12 -0700599 hostNames=hostNames,
600 devices=devices,
601 ports=None,
602 ethType="IPV4",
603 macs=macs,
604 bandwidth="",
605 lambdaAlloc=False,
606 ipProto="",
607 ipAddresses="",
608 tcp="",
kelvin-onlab08900012015-05-20 14:30:44 -0700609 sw1="s5",
610 sw2="s2",
611 expectedLink=18 )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700612
613 utilities.assert_equals( expect=main.TRUE,
614 actual=stepResult,
615 onpass="IPV4: Successfully added single point"
616 + " to multi point intents",
617 onfail="IPV4: Failed to add single point" +
618 " to multi point intents" )
kelvin-onlab08900012015-05-20 14:30:44 -0700619
620 main.step( "IPV4_2: Add single point to multi point intents" )
621 hostNames = [ 'h8', 'h16', 'h24' ]
kelvin-onlab08900012015-05-20 14:30:44 -0700622 stepResult = main.wrapper.singleToMultiIntent(
623 main,
624 name="IPV4",
625 hostNames=hostNames,
626 ethType="IPV4",
627 lambdaAlloc=False )
628
629 utilities.assert_equals( expect=main.TRUE,
630 actual=stepResult,
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700631 onpass="IPV4_2: Successfully added single "
632 + " point to multi point intents",
kelvin-onlab08900012015-05-20 14:30:44 -0700633 onfail="IPV4_2: Failed to add single point" +
634 " to multi point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700635 stepResult = main.TRUE
636 main.step( "VLAN: Add single point to multi point intents" )
637 hostNames = [ 'h4', 'h12', 'h20' ]
638 devices = [ 'of:0000000000000005/4', 'of:0000000000000006/4', \
639 'of:0000000000000007/4' ]
640 macs = [ '00:00:00:00:00:04', '00:00:00:00:00:0C', '00:00:00:00:00:14' ]
641 stepResult = main.wrapper.singleToMultiIntent(
642 main,
643 name="VLAN",
644 hostNames=hostNames,
645 devices=devices,
646 ports=None,
647 ethType="IPV4",
648 macs=macs,
649 bandwidth="",
650 lambdaAlloc=False,
651 ipProto="",
652 ipAddresses="",
653 tcp="",
654 sw1="s5",
655 sw2="s2",
656 expectedLink=18 )
657
658 utilities.assert_equals( expect=main.TRUE,
659 actual=stepResult,
660 onpass="VLAN: Successfully added single point"
661 + " to multi point intents",
662 onfail="VLAN: Failed to add single point" +
663 " to multi point intents" )
664
665 def CASE1004( self, main ):
666 """
kelvin-onlab65782a82015-05-07 14:12:13 -0700667 Add multi point to single point intents
668 - Get device ids
669 - Add multi point to single point intents
670 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700671 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700672 - Ping hosts
673 - Reroute
674 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700675 - Verify flows
676 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700677 - Ping hosts
678 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700679 - Verify flows
680 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700681 - Ping hosts
kaouthera426d0ab2015-05-28 17:41:10 -0700682 - Remove intents
kelvin-onlab65782a82015-05-07 14:12:13 -0700683 """
kelvin-onlabc751ab42015-05-21 14:09:39 -0700684 assert main, "There is no main"
685 assert main.CLIs, "There is no main.CLIs"
686 assert main.Mininet1, "Mininet handle should be named Mininet1"
687 assert main.numSwitch, "Placed the total number of switch topology in \
688 main.numSwitch"
689
690 main.case( "Add multi point to single point intents between devices" )
691
692 stepResult = main.TRUE
kelvin-onlabc751ab42015-05-21 14:09:39 -0700693 hostNames = [ 'h8', 'h16', 'h24' ]
694 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
695 'of:0000000000000007/8' ]
696 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 -0700697
698 main.step( "NOOPTION: Add multi point to single point intents" )
699 stepResult = main.wrapper.multiToSingleIntent(
700 main,
701 name="NOOPTION",
702 hostNames=hostNames,
703 devices=devices,
704 sw1="s5",
705 sw2="s2",
706 expectedLink=18 )
707
708 utilities.assert_equals( expect=main.TRUE,
709 actual=stepResult,
710 onpass="NOOPTION: Successfully added multi "
711 + " point to single point intents",
712 onfail="NOOPTION: Failed to add multi point" +
713 " to single point intents" )
714
715
716 main.step( "IPV4: Add multi point to single point intents" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700717 stepResult = main.wrapper.multiToSingleIntent(
718 main,
719 name="IPV4",
720 hostNames=hostNames,
721 devices=devices,
722 ports=None,
723 ethType="IPV4",
724 macs=macs,
725 bandwidth="",
726 lambdaAlloc=False,
727 ipProto="",
728 ipAddresses="",
729 tcp="",
730 sw1="s5",
731 sw2="s2",
732 expectedLink=18 )
733
734 utilities.assert_equals( expect=main.TRUE,
735 actual=stepResult,
736 onpass="IPV4: Successfully added multi point"
737 + " to single point intents",
738 onfail="IPV4: Failed to add multi point" +
739 " to single point intents" )
740
741 main.step( "IPV4_2: Add multi point to single point intents" )
742 hostNames = [ 'h8', 'h16', 'h24' ]
743 stepResult = main.wrapper.multiToSingleIntent(
744 main,
745 name="IPV4",
746 hostNames=hostNames,
747 ethType="IPV4",
748 lambdaAlloc=False )
749
750 utilities.assert_equals( expect=main.TRUE,
751 actual=stepResult,
752 onpass="IPV4_2: Successfully added multi point"
753 + " to single point intents",
754 onfail="IPV4_2: Failed to add multi point" +
755 " to single point intents" )
kaouthera426d0ab2015-05-28 17:41:10 -0700756
757 stepResult = main.TRUE
758 main.step( "VLAN: Add multi point to single point intents" )
759 hostNames = [ 'h5', 'h13', 'h21' ]
760 devices = [ 'of:0000000000000005/5', 'of:0000000000000006/5', \
761 'of:0000000000000007/5' ]
762 macs = [ '00:00:00:00:00:05', '00:00:00:00:00:0D', '00:00:00:00:00:15' ]
763 stepResult = main.wrapper.multiToSingleIntent(
764 main,
765 name="VLAN",
766 hostNames=hostNames,
767 devices=devices,
768 ports=None,
769 ethType="IPV4",
770 macs=macs,
771 bandwidth="",
772 lambdaAlloc=False,
773 ipProto="",
774 ipAddresses="",
775 tcp="",
776 sw1="s5",
777 sw2="s2",
778 expectedLink=18 )
779
780 utilities.assert_equals( expect=main.TRUE,
781 actual=stepResult,
782 onpass="VLAN: Successfully added multi point"
783 + " to single point intents",
784 onfail="VLAN: Failed to add multi point" +
785 " to single point intents" )