blob: 0cf11275b6269aafc115231adf60d543015ccd1f [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",
517 onfail="DUALSTACK1: Add point intent failed" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700518
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700519 stepResult = main.TRUE
520 main.step( "1HOP: Add point intents between h1 and h3" )
521 stepResult = main.wrapper.hostIntent( main,
522 name='1HOP',
523 host1='h1',
524 host2='h3' )
525
526 utilities.assert_equals( expect=main.TRUE,
527 actual=stepResult,
528 onpass="1HOP: Add point intent" +
529 " successful",
530 onfail="1HOP: Add point intent failed" )
531
kelvin-onlabf70fd542015-05-07 18:41:40 -0700532 def CASE1003( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700533 """
534 Add single point to multi point intents
535 - Get device ids
536 - Add single point to multi point intents
537 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700538 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700539 - Ping hosts
540 - Reroute
541 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700542 - Verify flows
543 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700544 - Ping hosts
545 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700546 - Verify flows
547 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700548 - Ping hosts
549 - Remove intents
550 """
kelvin-onlabf0594d72015-05-19 17:25:12 -0700551 assert main, "There is no main"
552 assert main.CLIs, "There is no main.CLIs"
553 assert main.Mininet1, "Mininet handle should be named Mininet1"
554 assert main.numSwitch, "Placed the total number of switch topology in \
555 main.numSwitch"
kelvin-onlab65782a82015-05-07 14:12:13 -0700556
kelvin-onlabf0594d72015-05-19 17:25:12 -0700557 main.case( "Add single point to multi point intents between devices" )
558
559 stepResult = main.TRUE
kelvin-onlabf0594d72015-05-19 17:25:12 -0700560 hostNames = [ 'h8', 'h16', 'h24' ]
561 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
562 'of:0000000000000007/8' ]
563 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 -0700564
565 main.step( "NOOPTION: Add single point to multi point intents" )
566 stepResult = main.wrapper.singleToMultiIntent(
567 main,
568 name="NOOPTION",
569 hostNames=hostNames,
570 devices=devices,
571 sw1="s5",
572 sw2="s2",
573 expectedLink=18 )
574
575 utilities.assert_equals( expect=main.TRUE,
576 actual=stepResult,
577 onpass="NOOPTION: Successfully added single "
578 + " point to multi point intents",
579 onfail="NOOPTION: Failed to add single point" +
580 " to multi point intents" )
581
582
583
584 main.step( "IPV4: Add single point to multi point intents" )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700585 stepResult = main.wrapper.singleToMultiIntent(
586 main,
kelvin-onlab08900012015-05-20 14:30:44 -0700587 name="IPV4",
kelvin-onlabf0594d72015-05-19 17:25:12 -0700588 hostNames=hostNames,
589 devices=devices,
590 ports=None,
591 ethType="IPV4",
592 macs=macs,
593 bandwidth="",
594 lambdaAlloc=False,
595 ipProto="",
596 ipAddresses="",
597 tcp="",
kelvin-onlab08900012015-05-20 14:30:44 -0700598 sw1="s5",
599 sw2="s2",
600 expectedLink=18 )
kelvin-onlabf0594d72015-05-19 17:25:12 -0700601
602 utilities.assert_equals( expect=main.TRUE,
603 actual=stepResult,
604 onpass="IPV4: Successfully added single point"
605 + " to multi point intents",
606 onfail="IPV4: Failed to add single point" +
607 " to multi point intents" )
kelvin-onlab08900012015-05-20 14:30:44 -0700608
609 main.step( "IPV4_2: Add single point to multi point intents" )
610 hostNames = [ 'h8', 'h16', 'h24' ]
kelvin-onlab08900012015-05-20 14:30:44 -0700611 stepResult = main.wrapper.singleToMultiIntent(
612 main,
613 name="IPV4",
614 hostNames=hostNames,
615 ethType="IPV4",
616 lambdaAlloc=False )
617
618 utilities.assert_equals( expect=main.TRUE,
619 actual=stepResult,
kelvin-onlabf2ec6e02015-05-27 14:15:28 -0700620 onpass="IPV4_2: Successfully added single "
621 + " point to multi point intents",
kelvin-onlab08900012015-05-20 14:30:44 -0700622 onfail="IPV4_2: Failed to add single point" +
623 " to multi point intents" )
kelvin-onlabf70fd542015-05-07 18:41:40 -0700624 def CASE1004( self, main ):
kelvin-onlab65782a82015-05-07 14:12:13 -0700625 """
626 Add multi point to single point intents
627 - Get device ids
628 - Add multi point to single point intents
629 - Check intents
kelvin-onlabe5239e52015-05-13 14:46:45 -0700630 - Verify flows
kelvin-onlab65782a82015-05-07 14:12:13 -0700631 - Ping hosts
632 - Reroute
633 - Link down
kelvin-onlabe5239e52015-05-13 14:46:45 -0700634 - Verify flows
635 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700636 - Ping hosts
637 - Link up
kelvin-onlabe5239e52015-05-13 14:46:45 -0700638 - Verify flows
639 - Check topology
kelvin-onlab65782a82015-05-07 14:12:13 -0700640 - Ping hosts
641 - Remove intents
642 """
kelvin-onlabc751ab42015-05-21 14:09:39 -0700643 assert main, "There is no main"
644 assert main.CLIs, "There is no main.CLIs"
645 assert main.Mininet1, "Mininet handle should be named Mininet1"
646 assert main.numSwitch, "Placed the total number of switch topology in \
647 main.numSwitch"
648
649 main.case( "Add multi point to single point intents between devices" )
650
651 stepResult = main.TRUE
kelvin-onlabc751ab42015-05-21 14:09:39 -0700652 hostNames = [ 'h8', 'h16', 'h24' ]
653 devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
654 'of:0000000000000007/8' ]
655 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 -0700656
657 main.step( "NOOPTION: Add multi point to single point intents" )
658 stepResult = main.wrapper.multiToSingleIntent(
659 main,
660 name="NOOPTION",
661 hostNames=hostNames,
662 devices=devices,
663 sw1="s5",
664 sw2="s2",
665 expectedLink=18 )
666
667 utilities.assert_equals( expect=main.TRUE,
668 actual=stepResult,
669 onpass="NOOPTION: Successfully added multi "
670 + " point to single point intents",
671 onfail="NOOPTION: Failed to add multi point" +
672 " to single point intents" )
673
674
675 main.step( "IPV4: Add multi point to single point intents" )
kelvin-onlabc751ab42015-05-21 14:09:39 -0700676 stepResult = main.wrapper.multiToSingleIntent(
677 main,
678 name="IPV4",
679 hostNames=hostNames,
680 devices=devices,
681 ports=None,
682 ethType="IPV4",
683 macs=macs,
684 bandwidth="",
685 lambdaAlloc=False,
686 ipProto="",
687 ipAddresses="",
688 tcp="",
689 sw1="s5",
690 sw2="s2",
691 expectedLink=18 )
692
693 utilities.assert_equals( expect=main.TRUE,
694 actual=stepResult,
695 onpass="IPV4: Successfully added multi point"
696 + " to single point intents",
697 onfail="IPV4: Failed to add multi point" +
698 " to single point intents" )
699
700 main.step( "IPV4_2: Add multi point to single point intents" )
701 hostNames = [ 'h8', 'h16', 'h24' ]
702 stepResult = main.wrapper.multiToSingleIntent(
703 main,
704 name="IPV4",
705 hostNames=hostNames,
706 ethType="IPV4",
707 lambdaAlloc=False )
708
709 utilities.assert_equals( expect=main.TRUE,
710 actual=stepResult,
711 onpass="IPV4_2: Successfully added multi point"
712 + " to single point intents",
713 onfail="IPV4_2: Failed to add multi point" +
714 " to single point intents" )