blob: 1bff0f15040a7da90ae92b22303387494f1ef502 [file] [log] [blame]
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001# Testing the basic intent functionality of ONOS
2
kelvin-onlabd48a68c2015-07-13 16:01:36 -07003class FUNCintent:
4
5 def __init__( self ):
6 self.default = ''
7
8 def CASE1( self, main ):
9 import time
kelvin-onlabd48a68c2015-07-13 16:01:36 -070010 import imp
Jon Hallf632d202015-07-30 15:45:11 -070011 import re
kelvin-onlabd48a68c2015-07-13 16:01:36 -070012
13 """
14 - Construct tests variables
15 - GIT ( optional )
16 - Checkout ONOS master branch
17 - Pull latest ONOS code
18 - Building ONOS ( optional )
19 - Install ONOS package
20 - Build ONOS package
21 """
22
23 main.case( "Constructing test variables and building ONOS package" )
24 main.step( "Constructing test variables" )
Jon Hall783bbf92015-07-23 14:33:19 -070025 main.caseExplanation = "This test case is mainly for loading " +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -070026 "from params file, and pull and build the " +\
27 " latest ONOS package"
kelvin-onlabd48a68c2015-07-13 16:01:36 -070028 stepResult = main.FALSE
29
30 # Test variables
Jon Halla3e02432015-07-24 15:55:42 -070031 try:
Jon Hallf632d202015-07-30 15:45:11 -070032 main.testOnDirectory = re.sub( "(/tests)$", "", main.testDir )
Jon Halla3e02432015-07-24 15:55:42 -070033 main.apps = main.params[ 'ENV' ][ 'cellApps' ]
34 gitBranch = main.params[ 'GIT' ][ 'branch' ]
35 main.dependencyPath = main.testOnDirectory + \
36 main.params[ 'DEPENDENCY' ][ 'path' ]
37 main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
38 main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
39 if main.ONOSbench.maxNodes:
40 main.maxNodes = int( main.ONOSbench.maxNodes )
41 else:
42 main.maxNodes = 0
43 wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
44 wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
45 wrapperFile3 = main.params[ 'DEPENDENCY' ][ 'wrapper3' ]
46 main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
47 main.checkIntentSleep = int( main.params[ 'SLEEP' ][ 'checkintent' ] )
acsmarscfa52272015-08-06 15:21:45 -070048 main.removeIntentSleep = int( main.params[ 'SLEEP' ][ 'removeintent' ] )
Jon Halla3e02432015-07-24 15:55:42 -070049 main.rerouteSleep = int( main.params[ 'SLEEP' ][ 'reroute' ] )
50 main.fwdSleep = int( main.params[ 'SLEEP' ][ 'fwd' ] )
acsmars59a4c552015-09-10 18:11:19 -070051 main.checkTopoAttempts = int( main.params[ 'SLEEP' ][ 'topoAttempts' ] )
Jon Halla3e02432015-07-24 15:55:42 -070052 gitPull = main.params[ 'GIT' ][ 'pull' ]
53 main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
54 main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
55 main.cellData = {} # for creating cell file
56 main.hostsData = {}
57 main.CLIs = []
58 main.ONOSip = []
Jeremy Songster1f39bf02016-01-20 17:17:25 -080059 main.scapyHostNames = main.params[ 'SCAPY' ][ 'HOSTNAMES' ].split( ',' )
60 main.scapyHosts = [] # List of scapy hosts for iterating
acsmars5d8cc862015-09-25 09:44:50 -070061 main.assertReturnString = '' # Assembled assert return string
kelvin-onlabd48a68c2015-07-13 16:01:36 -070062
Jon Halla3e02432015-07-24 15:55:42 -070063 main.ONOSip = main.ONOSbench.getOnosIps()
64 print main.ONOSip
kelvin-onlabd48a68c2015-07-13 16:01:36 -070065
Jon Halla3e02432015-07-24 15:55:42 -070066 # Assigning ONOS cli handles to a list
67 for i in range( 1, main.maxNodes + 1 ):
68 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
kelvin-onlabd48a68c2015-07-13 16:01:36 -070069
Jon Halla3e02432015-07-24 15:55:42 -070070 # -- INIT SECTION, ONLY RUNS ONCE -- #
71 main.startUp = imp.load_source( wrapperFile1,
72 main.dependencyPath +
73 wrapperFile1 +
74 ".py" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -070075
Jon Halla3e02432015-07-24 15:55:42 -070076 main.intentFunction = imp.load_source( wrapperFile2,
77 main.dependencyPath +
78 wrapperFile2 +
79 ".py" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -070080
Jon Halla3e02432015-07-24 15:55:42 -070081 main.topo = imp.load_source( wrapperFile3,
82 main.dependencyPath +
83 wrapperFile3 +
84 ".py" )
85
kelvin-onlabd9e23de2015-08-06 10:34:44 -070086 copyResult1 = main.ONOSbench.scp( main.Mininet1,
87 main.dependencyPath +
88 main.topology,
Jeremy Songster1f39bf02016-01-20 17:17:25 -080089 main.Mininet1.home + "custom/",
kelvin-onlabd9e23de2015-08-06 10:34:44 -070090 direction="to" )
Jon Halla3e02432015-07-24 15:55:42 -070091 if main.CLIs:
92 stepResult = main.TRUE
93 else:
94 main.log.error( "Did not properly created list of ONOS CLI handle" )
95 stepResult = main.FALSE
96 except Exception as e:
97 main.log.exception(e)
98 main.cleanup()
99 main.exit()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700100
101 utilities.assert_equals( expect=main.TRUE,
102 actual=stepResult,
103 onpass="Successfully construct " +
104 "test variables ",
105 onfail="Failed to construct test variables" )
106
107 if gitPull == 'True':
108 main.step( "Building ONOS in " + gitBranch + " branch" )
109 onosBuildResult = main.startUp.onosBuild( main, gitBranch )
110 stepResult = onosBuildResult
111 utilities.assert_equals( expect=main.TRUE,
112 actual=stepResult,
113 onpass="Successfully compiled " +
114 "latest ONOS",
115 onfail="Failed to compile " +
116 "latest ONOS" )
117 else:
118 main.log.warn( "Did not pull new code so skipping mvn " +
119 "clean install" )
Jon Hall106be082015-07-22 09:53:00 -0700120 main.ONOSbench.getVersion( report=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700121
122 def CASE2( self, main ):
123 """
124 - Set up cell
125 - Create cell file
126 - Set cell file
127 - Verify cell file
128 - Kill ONOS process
129 - Uninstall ONOS cluster
130 - Verify ONOS start up
131 - Install ONOS cluster
132 - Connect to cli
133 """
134
135 # main.scale[ 0 ] determines the current number of ONOS controller
136 main.numCtrls = int( main.scale[ 0 ] )
Jeremycd872222016-03-29 10:08:34 -0700137 main.flowCompiler = "Flow Rules"
Jeremyd9e4eb12016-04-13 12:09:06 -0700138 main.initialized = main.TRUE
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700139
140 main.case( "Starting up " + str( main.numCtrls ) +
141 " node(s) ONOS cluster" )
Jon Hall783bbf92015-07-23 14:33:19 -0700142 main.caseExplanation = "Set up ONOS with " + str( main.numCtrls ) +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700143 " node(s) ONOS cluster"
144
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700145 #kill off all onos processes
146 main.log.info( "Safety check, killing all ONOS processes" +
Jon Hall70b2ff42015-11-17 15:49:44 -0800147 " before initiating environment setup" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700148
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800149 time.sleep( main.startUpSleep )
150 main.step( "Uninstalling ONOS package" )
151 onosUninstallResult = main.TRUE
152 for ip in main.ONOSip:
153 onosUninstallResult = onosUninstallResult and \
154 main.ONOSbench.onosUninstall( nodeIp=ip )
155 stepResult = onosUninstallResult
156 utilities.assert_equals( expect=main.TRUE,
157 actual=stepResult,
158 onpass="Successfully uninstalled ONOS package",
159 onfail="Failed to uninstall ONOS package" )
Jeremy42df2e72016-02-23 16:37:46 -0800160 time.sleep( main.startUpSleep )
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800161
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700162 for i in range( main.maxNodes ):
163 main.ONOSbench.onosDie( main.ONOSip[ i ] )
164
165 print "NODE COUNT = ", main.numCtrls
166
167 tempOnosIp = []
168 for i in range( main.numCtrls ):
169 tempOnosIp.append( main.ONOSip[i] )
170
kelvin-onlabf34a58a2015-07-23 16:41:52 -0700171 main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
172 "temp", main.Mininet1.ip_address,
173 main.apps, tempOnosIp )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700174
175 main.step( "Apply cell to environment" )
176 cellResult = main.ONOSbench.setCell( "temp" )
177 verifyResult = main.ONOSbench.verifyCell()
178 stepResult = cellResult and verifyResult
179 utilities.assert_equals( expect=main.TRUE,
180 actual=stepResult,
181 onpass="Successfully applied cell to " + \
182 "environment",
183 onfail="Failed to apply cell to environment " )
184
185 main.step( "Creating ONOS package" )
186 packageResult = main.ONOSbench.onosPackage()
187 stepResult = packageResult
188 utilities.assert_equals( expect=main.TRUE,
189 actual=stepResult,
190 onpass="Successfully created ONOS package",
191 onfail="Failed to create ONOS package" )
192
193 time.sleep( main.startUpSleep )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700194 main.step( "Installing ONOS package" )
195 onosInstallResult = main.TRUE
196 for i in range( main.numCtrls ):
197 onosInstallResult = onosInstallResult and \
198 main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
199 stepResult = onosInstallResult
200 utilities.assert_equals( expect=main.TRUE,
201 actual=stepResult,
202 onpass="Successfully installed ONOS package",
203 onfail="Failed to install ONOS package" )
204
205 time.sleep( main.startUpSleep )
206 main.step( "Starting ONOS service" )
207 stopResult = main.TRUE
208 startResult = main.TRUE
209 onosIsUp = main.TRUE
210
211 for i in range( main.numCtrls ):
Jeremy Songster7edb6632016-04-28 15:44:28 -0700212 isUp = main.ONOSbench.isup( main.ONOSip[ i ] )
213 onosIsUp = onosIsUp and isUp
214 if isUp == main.TRUE:
Jeremyd9e4eb12016-04-13 12:09:06 -0700215 main.log.report( "ONOS instance {0} is up and ready".format( i + 1 ) )
216 else:
217 main.log.report( "ONOS instance {0} may not be up, stop and ".format( i + 1 ) +
218 "start ONOS again " )
219 stopResult = stopResult and main.ONOSbench.onosStop( main.ONOSip[ i ] )
220 startResult = startResult and main.ONOSbench.onosStart( main.ONOSip[ i ] )
221 if not startResult or stopResult:
222 main.log.report( "ONOS instance {0} did not start correctly.".format( i + 1) )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700223 stepResult = onosIsUp and stopResult and startResult
224 utilities.assert_equals( expect=main.TRUE,
225 actual=stepResult,
Jeremyd9e4eb12016-04-13 12:09:06 -0700226 onpass="ONOS service is ready on all nodes",
227 onfail="ONOS service did not start properly on all nodes" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700228
229 main.step( "Start ONOS cli" )
230 cliResult = main.TRUE
231 for i in range( main.numCtrls ):
232 cliResult = cliResult and \
233 main.CLIs[ i ].startOnosCli( main.ONOSip[ i ] )
234 stepResult = cliResult
235 utilities.assert_equals( expect=main.TRUE,
236 actual=stepResult,
237 onpass="Successfully start ONOS cli",
238 onfail="Failed to start ONOS cli" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700239 if not stepResult:
240 main.initialized = main.FALSE
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700241
242 # Remove the first element in main.scale list
243 main.scale.remove( main.scale[ 0 ] )
244
kelvin-onlab016dce22015-08-10 09:54:11 -0700245 main.intentFunction.report( main )
246
Jon Halla3e02432015-07-24 15:55:42 -0700247 def CASE8( self, main ):
248 """
acsmars59a4c552015-09-10 18:11:19 -0700249 Compare ONOS Topology to Mininet Topology
Jon Halla3e02432015-07-24 15:55:42 -0700250 """
251 import json
252
253 main.case( "Compare ONOS Topology view to Mininet topology" )
254 main.caseExplanation = "Compare topology elements between Mininet" +\
255 " and ONOS"
256
acsmars59a4c552015-09-10 18:11:19 -0700257 main.log.info( "Gathering topology information from Mininet" )
258 devicesResults = main.FALSE # Overall Boolean for device correctness
259 linksResults = main.FALSE # Overall Boolean for link correctness
260 hostsResults = main.FALSE # Overall Boolean for host correctness
261 deviceFails = [] # Nodes where devices are incorrect
262 linkFails = [] # Nodes where links are incorrect
263 hostFails = [] # Nodes where hosts are incorrect
264 attempts = main.checkTopoAttempts # Remaining Attempts
Jon Halla3e02432015-07-24 15:55:42 -0700265
266 mnSwitches = main.Mininet1.getSwitches()
267 mnLinks = main.Mininet1.getLinks()
268 mnHosts = main.Mininet1.getHosts()
269
Jon Hall70b2ff42015-11-17 15:49:44 -0800270 main.step( "Comparing Mininet topology to ONOS topology" )
Jon Halla3e02432015-07-24 15:55:42 -0700271
acsmars59a4c552015-09-10 18:11:19 -0700272 while ( attempts >= 0 ) and\
273 ( not devicesResults or not linksResults or not hostsResults ):
274 time.sleep( 2 )
275 if not devicesResults:
276 devices = main.topo.getAllDevices( main )
277 ports = main.topo.getAllPorts( main )
278 devicesResults = main.TRUE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800279 deviceFails = [] # Reset for each failed attempt
acsmars59a4c552015-09-10 18:11:19 -0700280 if not linksResults:
281 links = main.topo.getAllLinks( main )
282 linksResults = main.TRUE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800283 linkFails = [] # Reset for each failed attempt
acsmars59a4c552015-09-10 18:11:19 -0700284 if not hostsResults:
285 hosts = main.topo.getAllHosts( main )
286 hostsResults = main.TRUE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800287 hostFails = [] # Reset for each failed attempt
Jon Halla3e02432015-07-24 15:55:42 -0700288
acsmars59a4c552015-09-10 18:11:19 -0700289 # Check for matching topology on each node
290 for controller in range( main.numCtrls ):
291 controllerStr = str( controller + 1 ) # ONOS node number
292 # Compare Devices
293 if devices[ controller ] and ports[ controller ] and\
294 "Error" not in devices[ controller ] and\
295 "Error" not in ports[ controller ]:
Jon Halla3e02432015-07-24 15:55:42 -0700296
acsmars2ec91d62015-09-16 11:15:48 -0700297 try:
298 deviceData = json.loads( devices[ controller ] )
299 portData = json.loads( ports[ controller ] )
300 except (TypeError,ValueError):
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800301 main.log.error( "Could not load json: {0} or {1}".format( str( devices[ controller ] ), str( ports[ controller ] ) ) )
acsmars2ec91d62015-09-16 11:15:48 -0700302 currentDevicesResult = main.FALSE
303 else:
304 currentDevicesResult = main.Mininet1.compareSwitches(
305 mnSwitches,deviceData,portData )
acsmars59a4c552015-09-10 18:11:19 -0700306 else:
307 currentDevicesResult = main.FALSE
308 if not currentDevicesResult:
309 deviceFails.append( controllerStr )
310 devicesResults = devicesResults and currentDevicesResult
311 # Compare Links
312 if links[ controller ] and "Error" not in links[ controller ]:
acsmars2ec91d62015-09-16 11:15:48 -0700313 try:
314 linkData = json.loads( links[ controller ] )
315 except (TypeError,ValueError):
316 main.log.error("Could not load json:" + str( links[ controller ] ) )
317 currentLinksResult = main.FALSE
318 else:
319 currentLinksResult = main.Mininet1.compareLinks(
320 mnSwitches, mnLinks,linkData )
acsmars59a4c552015-09-10 18:11:19 -0700321 else:
322 currentLinksResult = main.FALSE
323 if not currentLinksResult:
324 linkFails.append( controllerStr )
325 linksResults = linksResults and currentLinksResult
326 # Compare Hosts
acsmars2ec91d62015-09-16 11:15:48 -0700327 if hosts[ controller ] and "Error" not in hosts[ controller ]:
328 try:
329 hostData = json.loads( hosts[ controller ] )
330 except (TypeError,ValueError):
331 main.log.error("Could not load json:" + str( hosts[ controller ] ) )
332 currentHostsResult = main.FALSE
333 else:
334 currentHostsResult = main.Mininet1.compareHosts(
335 mnHosts,hostData )
acsmars59a4c552015-09-10 18:11:19 -0700336 else:
337 currentHostsResult = main.FALSE
338 if not currentHostsResult:
339 hostFails.append( controllerStr )
340 hostsResults = hostsResults and currentHostsResult
341 # Decrement Attempts Remaining
342 attempts -= 1
343
344
345 utilities.assert_equals( expect=[],
346 actual=deviceFails,
347 onpass="ONOS correctly discovered all devices",
348 onfail="ONOS incorrectly discovered devices on nodes: " +
349 str( deviceFails ) )
350 utilities.assert_equals( expect=[],
351 actual=linkFails,
352 onpass="ONOS correctly discovered all links",
353 onfail="ONOS incorrectly discovered links on nodes: " +
354 str( linkFails ) )
355 utilities.assert_equals( expect=[],
356 actual=hostFails,
357 onpass="ONOS correctly discovered all hosts",
358 onfail="ONOS incorrectly discovered hosts on nodes: " +
359 str( hostFails ) )
Jon Hall46d48252015-08-03 11:41:16 -0700360 topoResults = hostsResults and linksResults and devicesResults
361 utilities.assert_equals( expect=main.TRUE,
362 actual=topoResults,
363 onpass="ONOS correctly discovered the topology",
364 onfail="ONOS incorrectly discovered the topology" )
Jon Halla3e02432015-07-24 15:55:42 -0700365
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700366 def CASE10( self, main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700367 """
kelvin-onlabb0b0dcb2015-07-22 16:51:33 -0700368 Start Mininet topology with OF 1.0 switches
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700369 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700370 if main.initialized == main.FALSE:
371 main.log.error( "Test components did not start correctly, skipping further tests" )
372 main.skipCase()
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700373 main.OFProtocol = "1.0"
kelvin-onlabb0b0dcb2015-07-22 16:51:33 -0700374 main.log.report( "Start Mininet topology with OF 1.0 switches" )
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700375 main.case( "Start Mininet topology with OF 1.0 switches" )
Jon Hall783bbf92015-07-23 14:33:19 -0700376 main.caseExplanation = "Start mininet topology with OF 1.0 " +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700377 "switches to test intents, exits out if " +\
378 "topology did not start correctly"
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700379
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700380 main.step( "Starting Mininet topology with OF 1.0 switches" )
kelvin-onlabb0b0dcb2015-07-22 16:51:33 -0700381 args = "--switch ovs,protocols=OpenFlow10"
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700382 topoResult = main.Mininet1.startNet( topoFile=main.dependencyPath +
kelvin-onlabb0b0dcb2015-07-22 16:51:33 -0700383 main.topology,
384 args=args )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700385 stepResult = topoResult
386 utilities.assert_equals( expect=main.TRUE,
387 actual=stepResult,
388 onpass="Successfully loaded topology",
389 onfail="Failed to load topology" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700390
391 # Set flag to test cases if topology did not load properly
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700392 if not topoResult:
Jeremyd9e4eb12016-04-13 12:09:06 -0700393 main.initialized = main.FALSE
394 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700395
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700396 def CASE11( self, main ):
397 """
kelvin-onlabb0b0dcb2015-07-22 16:51:33 -0700398 Start Mininet topology with OF 1.3 switches
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700399 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700400 if main.initialized == main.FALSE:
401 main.log.error( "Test components did not start correctly, skipping further tests" )
402 main.skipCase()
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700403 main.OFProtocol = "1.3"
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700404 main.log.report( "Start Mininet topology with OF 1.3 switches" )
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700405 main.case( "Start Mininet topology with OF 1.3 switches" )
Jon Hall783bbf92015-07-23 14:33:19 -0700406 main.caseExplanation = "Start mininet topology with OF 1.3 " +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700407 "switches to test intents, exits out if " +\
408 "topology did not start correctly"
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700409
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700410 main.step( "Starting Mininet topology with OF 1.3 switches" )
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700411 args = "--switch ovs,protocols=OpenFlow13"
412 topoResult = main.Mininet1.startNet( topoFile=main.dependencyPath +
413 main.topology,
414 args=args )
415 stepResult = topoResult
416 utilities.assert_equals( expect=main.TRUE,
417 actual=stepResult,
418 onpass="Successfully loaded topology",
419 onfail="Failed to load topology" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700420 # Set flag to skip test cases if topology did not load properly
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700421 if not topoResult:
Jeremyd9e4eb12016-04-13 12:09:06 -0700422 main.initialized = main.FALSE
kelvin-onlabb5cfab32015-07-22 16:38:22 -0700423
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700424 def CASE12( self, main ):
425 """
426 Assign mastership to controllers
427 """
428 import re
429
Jeremyd9e4eb12016-04-13 12:09:06 -0700430 if main.initialized == main.FALSE:
431 main.log.error( "Test components did not start correctly, skipping further tests" )
432 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700433 main.case( "Assign switches to controllers" )
434 main.step( "Assigning switches to controllers" )
Jon Hall783bbf92015-07-23 14:33:19 -0700435 main.caseExplanation = "Assign OF " + main.OFProtocol +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700436 " switches to ONOS nodes"
437
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700438 assignResult = main.TRUE
439 switchList = []
440
441 # Creates a list switch name, use getSwitch() function later...
442 for i in range( 1, ( main.numSwitch + 1 ) ):
443 switchList.append( 's' + str( i ) )
444
445 tempONOSip = []
446 for i in range( main.numCtrls ):
447 tempONOSip.append( main.ONOSip[ i ] )
448
449 assignResult = main.Mininet1.assignSwController( sw=switchList,
450 ip=tempONOSip,
Charles Chan029be652015-08-24 01:46:10 +0800451 port='6653' )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700452 if not assignResult:
Jeremyd9e4eb12016-04-13 12:09:06 -0700453 main.log.error( "Problem assigning mastership of switches" )
454 main.initialized = main.FALSE
455 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700456
457 for i in range( 1, ( main.numSwitch + 1 ) ):
458 response = main.Mininet1.getSwController( "s" + str( i ) )
459 print( "Response is " + str( response ) )
460 if re.search( "tcp:" + main.ONOSip[ 0 ], response ):
461 assignResult = assignResult and main.TRUE
462 else:
463 assignResult = main.FALSE
464 stepResult = assignResult
465 utilities.assert_equals( expect=main.TRUE,
466 actual=stepResult,
467 onpass="Successfully assigned switches" +
468 "to controller",
469 onfail="Failed to assign switches to " +
470 "controller" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700471 if not stepResult:
472 main.initialized = main.FALSE
acsmars5d8cc862015-09-25 09:44:50 -0700473
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800474 def CASE13( self,main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700475 """
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800476 Create Scapy components
477 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700478 if main.initialized == main.FALSE:
479 main.log.error( "Test components did not start correctly, skipping further tests" )
480 main.skipCase()
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800481 main.case( "Create scapy components" )
482 main.step( "Create scapy components" )
483 import json
484 scapyResult = main.TRUE
485 for hostName in main.scapyHostNames:
486 main.Scapy1.createHostComponent( hostName )
487 main.scapyHosts.append( getattr( main, hostName ) )
488
489 main.step( "Start scapy components" )
490 for host in main.scapyHosts:
491 host.startHostCli()
492 host.startScapy()
493 host.updateSelf()
494 main.log.debug( host.name )
495 main.log.debug( host.hostIp )
496 main.log.debug( host.hostMac )
497
498
499 utilities.assert_equals( expect=main.TRUE,
500 actual=scapyResult,
501 onpass="Successfully created Scapy Components",
502 onfail="Failed to discover Scapy Components" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700503 if not scapyResult:
504 main.initialized = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800505
506 def CASE14( self, main ):
507 """
508 Discover all hosts with fwd and pingall and store its data in a dictionary
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700509 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700510 if main.initialized == main.FALSE:
511 main.log.error( "Test components did not start correctly, skipping further tests" )
512 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700513 main.case( "Discover all hosts" )
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800514 main.step( "Pingall hosts and confirm ONOS discovery" )
515 utilities.retry( f=main.intentFunction.fwdPingall, retValue=main.FALSE, args=[ main ] )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700516
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800517 utilities.retry( f=main.intentFunction.confirmHostDiscovery, retValue=main.FALSE,
518 args=[ main ], attempts=main.checkTopoAttempts, sleep=2 )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700519 utilities.assert_equals( expect=main.TRUE,
520 actual=stepResult,
521 onpass="Successfully discovered hosts",
522 onfail="Failed to discover hosts" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700523 if not stepResult:
524 main.initialized = main.FALSE
525 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700526
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800527 main.step( "Populate hostsData" )
528 stepResult = main.intentFunction.populateHostData( main )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700529 utilities.assert_equals( expect=main.TRUE,
530 actual=stepResult,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800531 onpass="Successfully populated hostsData",
532 onfail="Failed to populate hostsData" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700533 if not stepResult:
534 main.initialized = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800535
536 def CASE15( self, main ):
537 """
538 Discover all hosts with scapy arp packets and store its data to a dictionary
539 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700540 if main.initialized == main.FALSE:
541 main.log.error( "Test components did not start correctly, skipping further tests" )
542 main.skipCase()
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800543 main.case( "Discover all hosts using scapy" )
544 main.step( "Send packets from each host to the first host and confirm onos discovery" )
545
546 import collections
547 if len( main.scapyHosts ) < 1:
548 main.log.error( "No scapy hosts have been created" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700549 main.initialized = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800550 main.skipCase()
551
552 # Send ARP packets from each scapy host component
553 main.intentFunction.sendDiscoveryArp( main, main.scapyHosts )
554
555 stepResult = utilities.retry( f=main.intentFunction.confirmHostDiscovery,
556 retValue=main.FALSE, args=[ main ],
557 attempts=main.checkTopoAttempts, sleep=2 )
558
559 utilities.assert_equals( expect=main.TRUE,
560 actual=stepResult,
561 onpass="ONOS correctly discovered all hosts",
562 onfail="ONOS incorrectly discovered hosts" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700563 if not stepResult:
564 main.initialized = main.FALSE
565 main.skipCase()
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800566
567 main.step( "Populate hostsData" )
568 stepResult = main.intentFunction.populateHostData( main )
569 utilities.assert_equals( expect=main.TRUE,
570 actual=stepResult,
571 onpass="Successfully populated hostsData",
572 onfail="Failed to populate hostsData" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700573 if not stepResult:
574 main.initialized = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800575
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800576 def CASE16( self, main ):
577 """
Jeremy42df2e72016-02-23 16:37:46 -0800578 Balance Masters
579 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700580 if main.initialized == main.FALSE:
581 main.log.error( "Test components did not start correctly, skipping further tests" )
582 main.skipCase()
Jeremy42df2e72016-02-23 16:37:46 -0800583 main.case( "Balance mastership of switches" )
584 main.step( "Balancing mastership of switches" )
585
586 balanceResult = main.FALSE
587 balanceResult = utilities.retry( f=main.CLIs[ 0 ].balanceMasters, retValue=main.FALSE, args=[] )
588
589 utilities.assert_equals( expect=main.TRUE,
Jeremy6e9748f2016-03-25 15:03:39 -0700590 actual=balanceResult,
Jeremy42df2e72016-02-23 16:37:46 -0800591 onpass="Successfully balanced mastership of switches",
592 onfail="Failed to balance mastership of switches" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700593 if not balanceResult:
594 main.initialized = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800595
596 def CASE17( self, main ):
597 """
Jeremy6e9748f2016-03-25 15:03:39 -0700598 Use Flow Objectives
599 """
Jeremyd9e4eb12016-04-13 12:09:06 -0700600 if main.initialized == main.FALSE:
601 main.log.error( "Test components did not start correctly, skipping further tests" )
602 main.skipCase()
Jeremy6e9748f2016-03-25 15:03:39 -0700603 main.case( "Enable intent compilation using Flow Objectives" )
604 main.step( "Enabling Flow Objectives" )
605
606 main.flowCompiler = "Flow Objectives"
607
608 cmd = "org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator"
609
610 stepResult = main.CLIs[ 0 ].setCfg( component=cmd,
611 propName="useFlowObjectives", value="true" )
612
613 utilities.assert_equals( expect=main.TRUE,
614 actual=stepResult,
615 onpass="Successfully activated Flow Objectives",
616 onfail="Failed to activate Flow Objectives" )
Jeremyd9e4eb12016-04-13 12:09:06 -0700617 if not balanceResult:
618 main.initialized = main.FALSE
Jeremy6e9748f2016-03-25 15:03:39 -0700619
620 def CASE18( self, main ):
621 """
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800622 Stop mininet and remove scapy host
623 """
624 main.log.report( "Stop Mininet and Scapy" )
625 main.case( "Stop Mininet and Scapy" )
626 main.caseExplanation = "Stopping the current mininet topology " +\
627 "to start up fresh"
628 main.step( "Stopping and Removing Scapy Host Components" )
629 scapyResult = main.TRUE
630 for host in main.scapyHosts:
631 scapyResult = scapyResult and host.stopScapy()
632 main.log.info( "Stopped Scapy Host: {0}".format( host.name ) )
633
634 for host in main.scapyHosts:
635 scapyResult = scapyResult and main.Scapy1.removeHostComponent( host.name )
636 main.log.info( "Removed Scapy Host Component: {0}".format( host.name ) )
637
638 main.scapyHosts = []
639 main.scapyHostIPs = []
640
641 utilities.assert_equals( expect=main.TRUE,
642 actual=scapyResult,
643 onpass="Successfully stopped scapy and removed host components",
644 onfail="Failed to stop mininet and scapy" )
645
646 main.step( "Stopping Mininet Topology" )
647 mininetResult = main.Mininet1.stopNet( )
648
649 utilities.assert_equals( expect=main.TRUE,
650 actual=mininetResult,
651 onpass="Successfully stopped mininet and scapy",
652 onfail="Failed to stop mininet and scapy" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700653 # Exit if topology did not load properly
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800654 if not ( mininetResult and scapyResult ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700655 main.cleanup()
656 main.exit()
657
kelvin-onlabb769f562015-07-15 17:05:10 -0700658 def CASE1000( self, main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700659 """
660 Add host intents between 2 host:
661 - Discover hosts
662 - Add host intents
663 - Check intents
664 - Verify flows
665 - Ping hosts
666 - Reroute
667 - Link down
668 - Verify flows
669 - Check topology
670 - Ping hosts
671 - Link up
672 - Verify flows
673 - Check topology
674 - Ping hosts
675 - Remove intents
676 """
677 import time
678 import json
679 import re
Jeremyd9e4eb12016-04-13 12:09:06 -0700680 if main.initialized == main.FALSE:
681 main.log.error( "Test components did not start correctly, skipping further tests" )
682 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700683 # Assert variables - These variable's name|format must be followed
684 # if you want to use the wrapper function
685 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -0700686 try:
687 assert main.CLIs
688 except AssertionError:
689 main.log.error( "There is no main.CLIs, skipping test cases" )
690 main.initialized = main.FALSE
691 main.skipCase()
692 try:
693 assert main.Mininet1
694 except AssertionError:
695 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
696 main.initialized = main.FALSE
697 main.skipCase()
698 try:
699 assert main.numSwitch
700 except AssertionError:
701 main.log.error( "Place the total number of switch topology in \
702 main.numSwitch" )
703 main.initialized = main.FALSE
704 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700705
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800706 # Save leader candidates
acsmarse6b410f2015-07-17 14:39:34 -0700707 intentLeadersOld = main.CLIs[ 0 ].leaderCandidates()
708
kelvin-onlab7bb2d972015-08-05 10:56:16 -0700709 main.testName = "Host Intents"
710 main.case( main.testName + " Test - " + str( main.numCtrls ) +
Jeremy6e9748f2016-03-25 15:03:39 -0700711 " NODE(S) - OF " + main.OFProtocol + " - Using " + main.flowCompiler )
Jon Hall783bbf92015-07-23 14:33:19 -0700712 main.caseExplanation = "This test case tests Host intents using " +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700713 str( main.numCtrls ) + " node(s) cluster;\n" +\
714 "Different type of hosts will be tested in " +\
715 "each step such as IPV4, Dual stack, VLAN " +\
Jeremyeb51cb12016-03-28 17:53:35 -0700716 "etc;\nThe test will use OF " + main.OFProtocol +\
717 " OVS running in Mininet and compile intents" +\
Jeremy6e9748f2016-03-25 15:03:39 -0700718 " using " + main.flowCompiler
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700719
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700720 main.step( "IPV4: Add host intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -0700721 main.assertReturnString = "Assertion Result for IPV4 host intent with mac addresses\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800722 host1 = { "name":"h1","id":"00:00:00:00:00:01/-1" }
723 host2 = { "name":"h9","id":"00:00:00:00:00:09/-1" }
724 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800725 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800726 installResult = main.intentFunction.installHostIntent( main,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700727 name='IPV4',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800728 onosNode='0',
729 host1=host1,
730 host2=host2)
731 if installResult:
732 testResult = main.intentFunction.testHostIntent( main,
733 name='IPV4',
734 intentId = installResult,
735 onosNode='0',
736 host1=host1,
737 host2=host2,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700738 sw1='s5',
739 sw2='s2',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800740 expectedLink = 18)
Jeremy42df2e72016-02-23 16:37:46 -0800741 else:
742 main.CLIs[ 0 ].removeAllIntents( purge=True )
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800743
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700744 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800745 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700746 onpass=main.assertReturnString,
747 onfail=main.assertReturnString)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700748
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700749 main.step( "DUALSTACK1: Add host intents between h3 and h11" )
acsmars5d8cc862015-09-25 09:44:50 -0700750 main.assertReturnString = "Assertion Result for dualstack IPV4 with MAC addresses\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800751 host1 = { "name":"h3","id":"00:00:00:00:00:03/-1" }
752 host2 = { "name":"h11","id":"00:00:00:00:00:0B/-1 "}
753 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800754 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800755 installResult = main.intentFunction.installHostIntent( main,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700756 name='DUALSTACK',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800757 onosNode='0',
758 host1=host1,
759 host2=host2)
760
761 if installResult:
762 testResult = main.intentFunction.testHostIntent( main,
763 name='DUALSTACK',
764 intentId = installResult,
765 onosNode='0',
766 host1=host1,
767 host2=host2,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700768 sw1='s5',
769 sw2='s2',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800770 expectedLink = 18)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700771
772 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800773 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700774 onpass=main.assertReturnString,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800775 onfail=main.assertReturnString)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700776
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700777 main.step( "DUALSTACK2: Add host intents between h1 and h11" )
acsmars5d8cc862015-09-25 09:44:50 -0700778 main.assertReturnString = "Assertion Result for dualstack2 host intent\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800779 host1 = { "name":"h1" }
780 host2 = { "name":"h11" }
781 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800782 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800783 installResult = main.intentFunction.installHostIntent( main,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700784 name='DUALSTACK2',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800785 onosNode='0',
786 host1=host1,
787 host2=host2)
788
789 if installResult:
790 testResult = main.intentFunction.testHostIntent( main,
791 name='DUALSTACK2',
792 intentId = installResult,
793 onosNode='0',
794 host1=host1,
795 host2=host2,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700796 sw1='s5',
797 sw2='s2',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800798 expectedLink = 18)
Jeremy42df2e72016-02-23 16:37:46 -0800799 else:
800 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700801
802 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800803 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700804 onpass=main.assertReturnString,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800805 onfail=main.assertReturnString)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700806
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700807 main.step( "1HOP: Add host intents between h1 and h3" )
acsmars5d8cc862015-09-25 09:44:50 -0700808 main.assertReturnString = "Assertion Result for 1HOP for IPV4 same switch\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800809 host1 = { "name":"h1" }
810 host2 = { "name":"h3" }
811 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800812 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800813 installResult = main.intentFunction.installHostIntent( main,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700814 name='1HOP',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800815 onosNode='0',
816 host1=host1,
817 host2=host2)
818
819 if installResult:
820 testResult = main.intentFunction.testHostIntent( main,
821 name='1HOP',
822 intentId = installResult,
823 onosNode='0',
824 host1=host1,
825 host2=host2,
826 sw1='s5',
827 sw2='s2',
828 expectedLink = 18)
Jeremy42df2e72016-02-23 16:37:46 -0800829 else:
830 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700831
832 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800833 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700834 onpass=main.assertReturnString,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800835 onfail=main.assertReturnString)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700836
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700837 main.step( "VLAN1: Add vlan host intents between h4 and h12" )
acsmars5d8cc862015-09-25 09:44:50 -0700838 main.assertReturnString = "Assertion Result vlan IPV4\n"
Jeremy Songster832f9e92016-05-05 14:30:49 -0700839 host1 = { "name":"h4","id":"00:00:00:00:00:04/100", "vlan":"100" }
840 host2 = { "name":"h12","id":"00:00:00:00:00:0C/100", "vlan":"100" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800841 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -0800842 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800843 installResult = main.intentFunction.installHostIntent( main,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700844 name='VLAN1',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800845 onosNode='0',
846 host1=host1,
847 host2=host2)
848
849 if installResult:
850 testResult = main.intentFunction.testHostIntent( main,
851 name='VLAN1',
852 intentId = installResult,
853 onosNode='0',
854 host1=host1,
855 host2=host2,
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700856 sw1='s5',
857 sw2='s2',
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800858 expectedLink = 18)
Jeremy42df2e72016-02-23 16:37:46 -0800859 else:
860 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700861
862 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800863 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700864 onpass=main.assertReturnString,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800865 onfail=main.assertReturnString)
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700866
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800867 main.step( "Confirm that ONOS leadership is unchanged")
acsmarse6b410f2015-07-17 14:39:34 -0700868 intentLeadersNew = main.CLIs[ 0 ].leaderCandidates()
869 main.intentFunction.checkLeaderChange( intentLeadersOld,
870 intentLeadersNew )
871
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800872 utilities.assert_equals( expect=main.TRUE,
873 actual=testResult,
874 onpass="ONOS Leaders Unchanged",
875 onfail="ONOS Leader Mismatch")
876
kelvin-onlab016dce22015-08-10 09:54:11 -0700877 main.intentFunction.report( main )
878
kelvin-onlabb769f562015-07-15 17:05:10 -0700879 def CASE2000( self, main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700880 """
881 Add point intents between 2 hosts:
882 - Get device ids | ports
883 - Add point intents
884 - Check intents
885 - Verify flows
886 - Ping hosts
887 - Reroute
888 - Link down
889 - Verify flows
890 - Check topology
891 - Ping hosts
892 - Link up
893 - Verify flows
894 - Check topology
895 - Ping hosts
896 - Remove intents
897 """
898 import time
899 import json
900 import re
Jeremyd9e4eb12016-04-13 12:09:06 -0700901 if main.initialized == main.FALSE:
902 main.log.error( "Test components did not start correctly, skipping further tests" )
903 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700904 # Assert variables - These variable's name|format must be followed
905 # if you want to use the wrapper function
906 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -0700907 try:
908 assert main.CLIs
909 except AssertionError:
910 main.log.error( "There is no main.CLIs, skipping test cases" )
911 main.initialized = main.FALSE
912 main.skipCase()
913 try:
914 assert main.Mininet1
915 except AssertionError:
916 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
917 main.initialized = main.FALSE
918 main.skipCase()
919 try:
920 assert main.numSwitch
921 except AssertionError:
922 main.log.error( "Place the total number of switch topology in \
923 main.numSwitch" )
924 main.initialized = main.FALSE
925 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700926
kelvin-onlab7bb2d972015-08-05 10:56:16 -0700927 main.testName = "Point Intents"
928 main.case( main.testName + " Test - " + str( main.numCtrls ) +
Jeremy6e9748f2016-03-25 15:03:39 -0700929 " NODE(S) - OF " + main.OFProtocol + " - Using " + main.flowCompiler )
Jon Hall783bbf92015-07-23 14:33:19 -0700930 main.caseExplanation = "This test case will test point to point" +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -0700931 " intents using " + str( main.numCtrls ) +\
932 " node(s) cluster;\n" +\
933 "Different type of hosts will be tested in " +\
934 "each step such as IPV4, Dual stack, VLAN etc" +\
935 ";\nThe test will use OF " + main.OFProtocol +\
Jeremy6e9748f2016-03-25 15:03:39 -0700936 " OVS running in Mininet and compile intents" +\
937 " using " + main.flowCompiler
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700938
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700939 # No option point intents
940 main.step( "NOOPTION: Add point intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -0700941 main.assertReturnString = "Assertion Result for NOOPTION point intent\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800942 senders = [
943 { "name":"h1","device":"of:0000000000000005/1" }
944 ]
945 recipients = [
946 { "name":"h9","device":"of:0000000000000006/1" }
947 ]
Jeremy42df2e72016-02-23 16:37:46 -0800948 testResult = main.FALSE
949 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800950 installResult = main.intentFunction.installPointIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700951 main,
952 name="NOOPTION",
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800953 senders=senders,
954 recipients=recipients )
955
956 if installResult:
957 testResult = main.intentFunction.testPointIntent(
958 main,
959 intentId=installResult,
960 name="NOOPTION",
961 senders=senders,
962 recipients=recipients,
963 sw1="s5",
964 sw2="s2",
965 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -0800966 else:
967 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700968
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700969 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800970 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -0700971 onpass=main.assertReturnString,
972 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700973
974 stepResult = main.TRUE
kelvin-onlabb769f562015-07-15 17:05:10 -0700975 main.step( "IPV4: Add point intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -0700976 main.assertReturnString = "Assertion Result for IPV4 point intent\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800977 senders = [
978 { "name":"h1","device":"of:0000000000000005/1","mac":"00:00:00:00:00:01" }
979 ]
980 recipients = [
981 { "name":"h9","device":"of:0000000000000006/1","mac":"00:00:00:00:00:09" }
982 ]
Jeremy42df2e72016-02-23 16:37:46 -0800983 testResult = main.FALSE
984 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800985 installResult = main.intentFunction.installPointIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -0700986 main,
987 name="IPV4",
Jeremy Songster1f39bf02016-01-20 17:17:25 -0800988 senders=senders,
989 recipients=recipients,
990 ethType="IPV4" )
991
992 if installResult:
993 testResult = main.intentFunction.testPointIntent(
994 main,
995 intentId=installResult,
996 name="IPV4",
997 senders=senders,
998 recipients=recipients,
999 sw1="s5",
1000 sw2="s2",
1001 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001002 else:
1003 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001004
1005 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001006 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001007 onpass=main.assertReturnString,
1008 onfail=main.assertReturnString )
kelvin-onlabb769f562015-07-15 17:05:10 -07001009 main.step( "IPV4_2: Add point intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -07001010 main.assertReturnString = "Assertion Result for IPV4 no mac address point intents\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001011 senders = [
1012 { "name":"h1","device":"of:0000000000000005/1" }
1013 ]
1014 recipients = [
1015 { "name":"h9","device":"of:0000000000000006/1" }
1016 ]
Jeremy42df2e72016-02-23 16:37:46 -08001017 testResult = main.FALSE
1018 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001019 installResult = main.intentFunction.installPointIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001020 main,
1021 name="IPV4_2",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001022 senders=senders,
1023 recipients=recipients,
1024 ethType="IPV4" )
1025
1026 if installResult:
1027 testResult = main.intentFunction.testPointIntent(
1028 main,
1029 intentId=installResult,
1030 name="IPV4_2",
1031 senders=senders,
1032 recipients=recipients,
1033 sw1="s5",
1034 sw2="s2",
1035 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001036 else:
1037 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001038
1039 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001040 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001041 onpass=main.assertReturnString,
1042 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001043
kelvin-onlabb55e58e2015-08-04 00:13:48 -07001044 main.step( "SDNIP-ICMP: Add point intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -07001045 main.assertReturnString = "Assertion Result for SDNIP-ICMP IPV4 using TCP point intents\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001046 senders = [
1047 { "name":"h1","device":"of:0000000000000005/1","mac":"00:00:00:00:00:01",
Jeremy6f000c62016-02-25 17:02:28 -08001048 "ip":( main.h1.hostIp + "/24" ) }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001049 ]
1050 recipients = [
1051 { "name":"h9","device":"of:0000000000000006/1","mac":"00:00:00:00:00:09",
Jeremy6f000c62016-02-25 17:02:28 -08001052 "ip":( main.h9.hostIp + "/24" ) }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001053 ]
Jeremy6f000c62016-02-25 17:02:28 -08001054 ipProto = main.params[ 'SDNIP' ][ 'ipPrototype' ]
kelvin-onlab79ce0492015-07-27 16:14:39 -07001055 # Uneccessary, not including this in the selectors
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001056 tcpSrc = main.params[ 'SDNIP' ][ 'srcPort' ]
1057 tcpDst = main.params[ 'SDNIP' ][ 'dstPort' ]
Jeremy42df2e72016-02-23 16:37:46 -08001058 testResult = main.FALSE
1059 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001060 installResult = main.intentFunction.installPointIntent(
1061 main,
1062 name="SDNIP-ICMP",
1063 senders=senders,
1064 recipients=recipients,
1065 ethType="IPV4",
1066 ipProto=ipProto,
1067 tcpSrc=tcpSrc,
1068 tcpDst=tcpDst )
1069
1070 if installResult:
1071 testResult = main.intentFunction.testPointIntent(
1072 main,
1073 intentId=installResult,
1074 name="SDNIP_ICMP",
1075 senders=senders,
1076 recipients=recipients,
1077 sw1="s5",
1078 sw2="s2",
1079 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001080 else:
1081 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabb769f562015-07-15 17:05:10 -07001082
1083 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001084 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001085 onpass=main.assertReturnString,
1086 onfail=main.assertReturnString )
kelvin-onlabb769f562015-07-15 17:05:10 -07001087
kelvin-onlabb55e58e2015-08-04 00:13:48 -07001088 main.step( "SDNIP-TCP: Add point intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -07001089 main.assertReturnString = "Assertion Result for SDNIP-TCP IPV4 using ICMP point intents\n"
kelvin-onlabb769f562015-07-15 17:05:10 -07001090 mac1 = main.hostsData[ 'h1' ][ 'mac' ]
1091 mac2 = main.hostsData[ 'h9' ][ 'mac' ]
kelvin-onlab58dc39e2015-08-06 08:11:09 -07001092 ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/32"
1093 ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/32"
kelvin-onlabb769f562015-07-15 17:05:10 -07001094 ipProto = main.params[ 'SDNIP' ][ 'tcpProto' ]
1095 tcp1 = main.params[ 'SDNIP' ][ 'srcPort' ]
1096 tcp2 = main.params[ 'SDNIP' ][ 'dstPort' ]
1097
kelvin-onlab58dc39e2015-08-06 08:11:09 -07001098 stepResult = main.intentFunction.pointIntentTcp(
kelvin-onlabb769f562015-07-15 17:05:10 -07001099 main,
kelvin-onlabb55e58e2015-08-04 00:13:48 -07001100 name="SDNIP-TCP",
kelvin-onlabb769f562015-07-15 17:05:10 -07001101 host1="h1",
1102 host2="h9",
1103 deviceId1="of:0000000000000005/1",
1104 deviceId2="of:0000000000000006/1",
1105 mac1=mac1,
1106 mac2=mac2,
1107 ethType="IPV4",
kelvin-onlabb55e58e2015-08-04 00:13:48 -07001108 ipProto=ipProto,
1109 ip1=ip1,
1110 ip2=ip2,
1111 tcp1=tcp1,
1112 tcp2=tcp2 )
kelvin-onlabb769f562015-07-15 17:05:10 -07001113
1114 utilities.assert_equals( expect=main.TRUE,
Jeremy6f000c62016-02-25 17:02:28 -08001115 actual=stepResult,
acsmars5d8cc862015-09-25 09:44:50 -07001116 onpass=main.assertReturnString,
1117 onfail=main.assertReturnString )
kelvin-onlabb769f562015-07-15 17:05:10 -07001118
acsmars5d8cc862015-09-25 09:44:50 -07001119 main.step( "DUALSTACK1: Add point intents between h3 and h11" )
1120 main.assertReturnString = "Assertion Result for Dualstack1 IPV4 with mac address point intents\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001121 senders = [
1122 { "name":"h3","device":"of:0000000000000005/3","mac":"00:00:00:00:00:03" }
1123 ]
1124 recipients = [
1125 { "name":"h11","device":"of:0000000000000006/3","mac":"00:00:00:00:00:0B" }
1126 ]
Jeremy42df2e72016-02-23 16:37:46 -08001127 testResult = main.FALSE
1128 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001129 installResult = main.intentFunction.installPointIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001130 main,
1131 name="DUALSTACK1",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001132 senders=senders,
1133 recipients=recipients,
1134 ethType="IPV4" )
1135
1136 if installResult:
1137 testResult = main.intentFunction.testPointIntent(
1138 main,
1139 intentId=installResult,
1140 name="DUALSTACK1",
1141 senders=senders,
1142 recipients=recipients,
1143 sw1="s5",
1144 sw2="s2",
1145 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001146 else:
1147 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001148
1149 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001150 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001151 onpass=main.assertReturnString,
1152 onfail=main.assertReturnString )
kelvin-onlabb769f562015-07-15 17:05:10 -07001153
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001154 main.step( "VLAN: Add point intents between h5 and h21" )
acsmars5d8cc862015-09-25 09:44:50 -07001155 main.assertReturnString = "Assertion Result for VLAN IPV4 with mac address point intents\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001156 senders = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001157 { "name":"h5","device":"of:0000000000000005/5","mac":"00:00:00:00:00:05", "vlan":"200" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001158 ]
1159 recipients = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001160 { "name":"h21","device":"of:0000000000000007/5","mac":"00:00:00:00:00:15", "vlan":"200" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001161 ]
Jeremy42df2e72016-02-23 16:37:46 -08001162 testResult = main.FALSE
1163 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001164 installResult = main.intentFunction.installPointIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001165 main,
Jeremy Songster832f9e92016-05-05 14:30:49 -07001166 name="VLAN",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001167 senders=senders,
Jeremy Songster832f9e92016-05-05 14:30:49 -07001168 recipients=recipients)
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001169
1170 if installResult:
1171 testResult = main.intentFunction.testPointIntent(
1172 main,
1173 intentId=installResult,
Jeremy Songster832f9e92016-05-05 14:30:49 -07001174 name="VLAN",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001175 senders=senders,
1176 recipients=recipients,
1177 sw1="s5",
1178 sw2="s2",
1179 expectedLink=18)
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001180
1181 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001182 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001183 onpass=main.assertReturnString,
1184 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001185
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001186 main.step( "1HOP: Add point intents between h1 and h3" )
acsmars5d8cc862015-09-25 09:44:50 -07001187 main.assertReturnString = "Assertion Result for 1HOP IPV4 with no mac address point intents\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001188 senders = [
1189 { "name":"h1","device":"of:0000000000000005/1","mac":"00:00:00:00:00:01" }
1190 ]
1191 recipients = [
1192 { "name":"h3","device":"of:0000000000000005/3","mac":"00:00:00:00:00:03" }
1193 ]
Jeremy42df2e72016-02-23 16:37:46 -08001194 testResult = main.FALSE
1195 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001196 installResult = main.intentFunction.installPointIntent(
1197 main,
1198 name="1HOP IPV4",
1199 senders=senders,
1200 recipients=recipients,
1201 ethType="IPV4" )
1202
1203 if installResult:
1204 testResult = main.intentFunction.testPointIntent(
1205 main,
1206 intentId=installResult,
1207 name="1HOP IPV4",
1208 senders=senders,
1209 recipients=recipients,
1210 sw1="s5",
1211 sw2="s2",
1212 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001213 else:
1214 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001215
1216 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001217 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001218 onpass=main.assertReturnString,
1219 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001220
kelvin-onlab016dce22015-08-10 09:54:11 -07001221 main.intentFunction.report( main )
1222
kelvin-onlabb769f562015-07-15 17:05:10 -07001223 def CASE3000( self, main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001224 """
1225 Add single point to multi point intents
1226 - Get device ids
1227 - Add single point to multi point intents
1228 - Check intents
1229 - Verify flows
1230 - Ping hosts
1231 - Reroute
1232 - Link down
1233 - Verify flows
1234 - Check topology
1235 - Ping hosts
1236 - Link up
1237 - Verify flows
1238 - Check topology
1239 - Ping hosts
1240 - Remove intents
1241 """
Jeremyd9e4eb12016-04-13 12:09:06 -07001242 if main.initialized == main.FALSE:
1243 main.log.error( "Test components did not start correctly, skipping further tests" )
1244 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001245 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -07001246 try:
1247 assert main.CLIs
1248 except AssertionError:
1249 main.log.error( "There is no main.CLIs, skipping test cases" )
1250 main.initialized = main.FALSE
1251 main.skipCase()
1252 try:
1253 assert main.Mininet1
1254 except AssertionError:
1255 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
1256 main.initialized = main.FALSE
1257 main.skipCase()
1258 try:
1259 assert main.numSwitch
1260 except AssertionError:
1261 main.log.error( "Place the total number of switch topology in \
1262 main.numSwitch" )
1263 main.initialized = main.FALSE
1264 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001265
kelvin-onlab7bb2d972015-08-05 10:56:16 -07001266 main.testName = "Single to Multi Point Intents"
1267 main.case( main.testName + " Test - " + str( main.numCtrls ) +
Jeremy6e9748f2016-03-25 15:03:39 -07001268 " NODE(S) - OF " + main.OFProtocol + " - Using " + main.flowCompiler )
Jon Hall783bbf92015-07-23 14:33:19 -07001269 main.caseExplanation = "This test case will test single point to" +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -07001270 " multi point intents using " +\
1271 str( main.numCtrls ) + " node(s) cluster;\n" +\
1272 "Different type of hosts will be tested in " +\
1273 "each step such as IPV4, Dual stack, VLAN etc" +\
1274 ";\nThe test will use OF " + main.OFProtocol +\
Jeremy6e9748f2016-03-25 15:03:39 -07001275 " OVS running in Mininet and compile intents" +\
1276 " using " + main.flowCompiler
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001277
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001278 main.step( "NOOPTION: Install and test single point to multi point intents" )
1279 main.assertReturnString = "Assertion results for IPV4 single to multi point intent with no options set\n"
1280 senders = [
1281 { "name":"h8", "device":"of:0000000000000005/8" }
1282 ]
1283 recipients = [
1284 { "name":"h16", "device":"of:0000000000000006/8" },
1285 { "name":"h24", "device":"of:0000000000000007/8" }
1286 ]
1287 badSenders=[ { "name":"h9" } ] # Senders that are not in the intent
1288 badRecipients=[ { "name":"h17" } ] # Recipients that are not in the intent
1289 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001290 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001291 installResult = main.intentFunction.installSingleToMultiIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001292 main,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001293 name="NOOPTION",
1294 senders=senders,
1295 recipients=recipients,
1296 sw1="s5",
1297 sw2="s2")
1298
1299 if installResult:
1300 testResult = main.intentFunction.testPointIntent(
1301 main,
1302 intentId=installResult,
1303 name="NOOPTION",
1304 senders=senders,
1305 recipients=recipients,
1306 badSenders=badSenders,
1307 badRecipients=badRecipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001308 sw1="s5",
1309 sw2="s2",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001310 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001311 else:
1312 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001313
1314 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001315 actual=testResult,
1316 onpass=main.assertReturnString,
1317 onfail=main.assertReturnString )
1318
1319 main.step( "IPV4: Install and test single point to multi point intents" )
1320 main.assertReturnString = "Assertion results for IPV4 single to multi point intent with IPV4 type and MAC addresses\n"
1321 senders = [
1322 { "name":"h8", "device":"of:0000000000000005/8","mac":"00:00:00:00:00:08" }
1323 ]
1324 recipients = [
1325 { "name":"h16", "device":"of:0000000000000006/8", "mac":"00:00:00:00:00:10" },
1326 { "name":"h24", "device":"of:0000000000000007/8", "mac":"00:00:00:00:00:18" }
1327 ]
1328 badSenders=[ { "name":"h9" } ] # Senders that are not in the intent
1329 badRecipients=[ { "name":"h17" } ] # Recipients that are not in the intent
1330 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001331 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001332 installResult = main.intentFunction.installSingleToMultiIntent(
1333 main,
1334 name="IPV4",
1335 senders=senders,
1336 recipients=recipients,
1337 ethType="IPV4",
1338 sw1="s5",
1339 sw2="s2")
1340
1341 if installResult:
1342 testResult = main.intentFunction.testPointIntent(
1343 main,
1344 intentId=installResult,
1345 name="IPV4",
1346 senders=senders,
1347 recipients=recipients,
1348 badSenders=badSenders,
1349 badRecipients=badRecipients,
1350 sw1="s5",
1351 sw2="s2",
1352 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001353 else:
1354 main.CLIs[ 0 ].removeAllIntents( purge=True )
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001355
1356 utilities.assert_equals( expect=main.TRUE,
1357 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001358 onpass=main.assertReturnString,
1359 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001360
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001361 main.step( "IPV4_2: Add single point to multi point intents" )
acsmars5d8cc862015-09-25 09:44:50 -07001362 main.assertReturnString = "Assertion results for IPV4 single to multi point intent with IPV4 type and no MAC addresses\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001363 senders = [
1364 { "name":"h8", "device":"of:0000000000000005/8" }
1365 ]
1366 recipients = [
1367 { "name":"h16", "device":"of:0000000000000006/8" },
1368 { "name":"h24", "device":"of:0000000000000007/8" }
1369 ]
1370 badSenders=[ { "name":"h9" } ] # Senders that are not in the intent
1371 badRecipients=[ { "name":"h17" } ] # Recipients that are not in the intent
1372 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001373 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001374 installResult = main.intentFunction.installSingleToMultiIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001375 main,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001376 name="IPV4_2",
1377 senders=senders,
1378 recipients=recipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001379 ethType="IPV4",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001380 sw1="s5",
1381 sw2="s2")
1382
1383 if installResult:
1384 testResult = main.intentFunction.testPointIntent(
1385 main,
1386 intentId=installResult,
1387 name="IPV4_2",
1388 senders=senders,
1389 recipients=recipients,
1390 badSenders=badSenders,
1391 badRecipients=badRecipients,
1392 sw1="s5",
1393 sw2="s2",
1394 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001395 else:
1396 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001397
1398 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001399 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001400 onpass=main.assertReturnString,
1401 onfail=main.assertReturnString )
kelvin-onlabb769f562015-07-15 17:05:10 -07001402
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001403 main.step( "VLAN: Add single point to multi point intents" )
acsmars5d8cc862015-09-25 09:44:50 -07001404 main.assertReturnString = "Assertion results for IPV4 single to multi point intent with IPV4 type and MAC addresses in the same VLAN\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001405 senders = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001406 { "name":"h4", "device":"of:0000000000000005/4", "mac":"00:00:00:00:00:04", "vlan":"100" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001407 ]
1408 recipients = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001409 { "name":"h12", "device":"of:0000000000000006/4", "mac":"00:00:00:00:00:0C", "vlan":"100" },
1410 { "name":"h20", "device":"of:0000000000000007/4", "mac":"00:00:00:00:00:14", "vlan":"100" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001411 ]
1412 badSenders=[ { "name":"h13" } ] # Senders that are not in the intent
1413 badRecipients=[ { "name":"h21" } ] # Recipients that are not in the intent
1414 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001415 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001416 installResult = main.intentFunction.installSingleToMultiIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001417 main,
Jeremy Songster832f9e92016-05-05 14:30:49 -07001418 name="VLAN`",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001419 senders=senders,
1420 recipients=recipients,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001421 sw1="s5",
1422 sw2="s2")
1423
1424 if installResult:
1425 testResult = main.intentFunction.testPointIntent(
1426 main,
1427 intentId=installResult,
Jeremy Songster832f9e92016-05-05 14:30:49 -07001428 name="VLAN",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001429 senders=senders,
1430 recipients=recipients,
1431 badSenders=badSenders,
1432 badRecipients=badRecipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001433 sw1="s5",
1434 sw2="s2",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001435 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001436 else:
1437 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001438
1439 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001440 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001441 onpass=main.assertReturnString,
1442 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001443
kelvin-onlab016dce22015-08-10 09:54:11 -07001444 main.intentFunction.report( main )
1445
kelvin-onlabb769f562015-07-15 17:05:10 -07001446 def CASE4000( self, main ):
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001447 """
1448 Add multi point to single point intents
1449 - Get device ids
1450 - Add multi point to single point intents
1451 - Check intents
1452 - Verify flows
1453 - Ping hosts
1454 - Reroute
1455 - Link down
1456 - Verify flows
1457 - Check topology
1458 - Ping hosts
1459 - Link up
1460 - Verify flows
1461 - Check topology
1462 - Ping hosts
1463 - Remove intents
1464 """
Jeremyd9e4eb12016-04-13 12:09:06 -07001465 if main.initialized == main.FALSE:
1466 main.log.error( "Test components did not start correctly, skipping further tests" )
1467 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001468 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -07001469 try:
1470 assert main.CLIs
1471 except AssertionError:
1472 main.log.error( "There is no main.CLIs, skipping test cases" )
1473 main.initialized = main.FALSE
1474 main.skipCase()
1475 try:
1476 assert main.Mininet1
1477 except AssertionError:
1478 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
1479 main.initialized = main.FALSE
1480 main.skipCase()
1481 try:
1482 assert main.numSwitch
1483 except AssertionError:
1484 main.log.error( "Place the total number of switch topology in \
1485 main.numSwitch" )
1486 main.initialized = main.FALSE
1487 main.skipCase()
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001488
kelvin-onlab7bb2d972015-08-05 10:56:16 -07001489 main.testName = "Multi To Single Point Intents"
1490 main.case( main.testName + " Test - " + str( main.numCtrls ) +
Jeremy6e9748f2016-03-25 15:03:39 -07001491 " NODE(S) - OF " + main.OFProtocol + " - Using " + main.flowCompiler )
Jon Hall783bbf92015-07-23 14:33:19 -07001492 main.caseExplanation = "This test case will test single point to" +\
kelvin-onlab6dea6e62015-07-23 13:07:26 -07001493 " multi point intents using " +\
1494 str( main.numCtrls ) + " node(s) cluster;\n" +\
1495 "Different type of hosts will be tested in " +\
1496 "each step such as IPV4, Dual stack, VLAN etc" +\
1497 ";\nThe test will use OF " + main.OFProtocol +\
Jeremy6e9748f2016-03-25 15:03:39 -07001498 " OVS running in Mininet and compile intents" +\
1499 " using " + main.flowCompiler
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001500
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001501 main.step( "NOOPTION: Add multi point to single point intents" )
1502 main.assertReturnString = "Assertion results for NOOPTION multi to single point intent\n"
1503 senders = [
1504 { "name":"h16", "device":"of:0000000000000006/8" },
1505 { "name":"h24", "device":"of:0000000000000007/8" }
1506 ]
1507 recipients = [
1508 { "name":"h8", "device":"of:0000000000000005/8" }
1509 ]
1510 badSenders=[ { "name":"h17" } ] # Senders that are not in the intent
1511 badRecipients=[ { "name":"h9" } ] # Recipients that are not in the intent
1512 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001513 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001514 installResult = main.intentFunction.installMultiToSingleIntent(
1515 main,
1516 name="NOOPTION",
1517 senders=senders,
1518 recipients=recipients,
1519 sw1="s5",
Jeremye0cb5eb2016-01-27 17:39:09 -08001520 sw2="s2" )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001521
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001522 if installResult:
1523 testResult = main.intentFunction.testPointIntent(
1524 main,
1525 intentId=installResult,
1526 name="NOOPTION",
1527 senders=senders,
1528 recipients=recipients,
1529 badSenders=badSenders,
1530 badRecipients=badRecipients,
1531 sw1="s5",
1532 sw2="s2",
Jeremye0cb5eb2016-01-27 17:39:09 -08001533 expectedLink=18 )
Jeremy42df2e72016-02-23 16:37:46 -08001534 else:
1535 main.CLIs[ 0 ].removeAllIntents( purge=True )
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001536
1537 utilities.assert_equals( expect=main.TRUE,
1538 actual=testResult,
1539 onpass=main.assertReturnString,
1540 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001541
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001542 main.step( "IPV4: Add multi point to single point intents" )
acsmars5d8cc862015-09-25 09:44:50 -07001543 main.assertReturnString = "Assertion results for IPV4 multi to single point intent with IPV4 type and MAC addresses\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001544 senders = [
1545 { "name":"h16", "device":"of:0000000000000006/8", "mac":"00:00:00:00:00:10" },
1546 { "name":"h24", "device":"of:0000000000000007/8", "mac":"00:00:00:00:00:18" }
1547 ]
1548 recipients = [
1549 { "name":"h8", "device":"of:0000000000000005/8", "mac":"00:00:00:00:00:08" }
1550 ]
1551 badSenders=[ { "name":"h17" } ] # Senders that are not in the intent
1552 badRecipients=[ { "name":"h9" } ] # Recipients that are not in the intent
1553 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001554 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001555 installResult = main.intentFunction.installMultiToSingleIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001556 main,
1557 name="IPV4",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001558 senders=senders,
1559 recipients=recipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001560 ethType="IPV4",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001561 sw1="s5",
1562 sw2="s2")
1563
1564 if installResult:
1565 testResult = main.intentFunction.testPointIntent(
1566 main,
1567 intentId=installResult,
1568 name="IPV4",
1569 senders=senders,
1570 recipients=recipients,
1571 badSenders=badSenders,
1572 badRecipients=badRecipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001573 sw1="s5",
1574 sw2="s2",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001575 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001576 else:
1577 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001578
1579 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001580 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001581 onpass=main.assertReturnString,
1582 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001583
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001584 main.step( "IPV4_2: Add multi point to single point intents" )
acsmars5d8cc862015-09-25 09:44:50 -07001585 main.assertReturnString = "Assertion results for IPV4 multi to single point intent with IPV4 type and no MAC addresses\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001586 senders = [
1587 { "name":"h16", "device":"of:0000000000000006/8" },
1588 { "name":"h24", "device":"of:0000000000000007/8" }
1589 ]
1590 recipients = [
1591 { "name":"h8", "device":"of:0000000000000005/8" }
1592 ]
1593 badSenders=[ { "name":"h17" } ] # Senders that are not in the intent
1594 badRecipients=[ { "name":"h9" } ] # Recipients that are not in the intent
1595 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001596 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001597 installResult = main.intentFunction.installMultiToSingleIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001598 main,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001599 name="IPV4_2",
1600 senders=senders,
1601 recipients=recipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001602 ethType="IPV4",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001603 sw1="s5",
1604 sw2="s2")
1605
1606 if installResult:
1607 testResult = main.intentFunction.testPointIntent(
1608 main,
1609 intentId=installResult,
1610 name="IPV4_2",
1611 senders=senders,
1612 recipients=recipients,
1613 badSenders=badSenders,
1614 badRecipients=badRecipients,
1615 sw1="s5",
1616 sw2="s2",
1617 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001618 else:
1619 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001620
1621 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001622 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001623 onpass=main.assertReturnString,
1624 onfail=main.assertReturnString )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001625
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001626 main.step( "VLAN: Add multi point to single point intents" )
acsmars5d8cc862015-09-25 09:44:50 -07001627 main.assertReturnString = "Assertion results for IPV4 multi to single point intent with IPV4 type and no MAC addresses in the same VLAN\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001628 senders = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001629 { "name":"h13", "device":"of:0000000000000006/5", "vlan":"200" },
1630 { "name":"h21", "device":"of:0000000000000007/5", "vlan":"200" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001631 ]
1632 recipients = [
Jeremy Songster832f9e92016-05-05 14:30:49 -07001633 { "name":"h5", "device":"of:0000000000000005/5", "vlan":"200" }
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001634 ]
1635 badSenders=[ { "name":"h12" } ] # Senders that are not in the intent
1636 badRecipients=[ { "name":"h20" } ] # Recipients that are not in the intent
1637 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001638 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001639 installResult = main.intentFunction.installMultiToSingleIntent(
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001640 main,
1641 name="VLAN",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001642 senders=senders,
1643 recipients=recipients,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001644 sw1="s5",
1645 sw2="s2")
1646
1647 if installResult:
1648 testResult = main.intentFunction.testPointIntent(
1649 main,
1650 intentId=installResult,
1651 name="VLAN",
1652 senders=senders,
1653 recipients=recipients,
1654 badSenders=badSenders,
1655 badRecipients=badRecipients,
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001656 sw1="s5",
1657 sw2="s2",
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001658 expectedLink=18)
Jeremy42df2e72016-02-23 16:37:46 -08001659 else:
1660 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabd48a68c2015-07-13 16:01:36 -07001661
1662 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001663 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001664 onpass=main.assertReturnString,
1665 onfail=main.assertReturnString )
kelvin-onlabf34a58a2015-07-23 16:41:52 -07001666
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001667 main.intentFunction.report( main )
1668
acsmars1ff5e052015-07-23 11:27:48 -07001669 def CASE5000( self, main ):
1670 """
acsmars5d8cc862015-09-25 09:44:50 -07001671 Tests Host Mobility
1672 Modifies the topology location of h1
acsmars1ff5e052015-07-23 11:27:48 -07001673 """
Jeremyd9e4eb12016-04-13 12:09:06 -07001674 if main.initialized == main.FALSE:
1675 main.log.error( "Test components did not start correctly, skipping further tests" )
1676 main.skipCase()
acsmars1ff5e052015-07-23 11:27:48 -07001677 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -07001678 try:
1679 assert main.CLIs
1680 except AssertionError:
1681 main.log.error( "There is no main.CLIs, skipping test cases" )
1682 main.initialized = main.FALSE
1683 main.skipCase()
1684 try:
1685 assert main.Mininet1
1686 except AssertionError:
1687 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
1688 main.initialized = main.FALSE
1689 main.skipCase()
1690 try:
1691 assert main.numSwitch
1692 except AssertionError:
1693 main.log.error( "Place the total number of switch topology in \
1694 main.numSwitch" )
1695 main.initialized = main.FALSE
1696 main.skipCase()
kelvin-onlabf34a58a2015-07-23 16:41:52 -07001697 main.case( "Test host mobility with host intents " )
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001698 main.step( "Testing host mobility by moving h1 from s5 to s6" )
acsmars1ff5e052015-07-23 11:27:48 -07001699 h1PreMove = main.hostsData[ "h1" ][ "location" ][ 0:19 ]
1700
Jeremy2f190ca2016-01-29 15:23:57 -08001701 main.log.info( "Moving h1 from s5 to s6")
acsmars1ff5e052015-07-23 11:27:48 -07001702 main.Mininet1.moveHost( "h1","s5","s6" )
1703
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001704 # Send discovery ping from moved host
1705 # Moving the host brings down the default interfaces and creates a new one.
1706 # Scapy is restarted on this host to detect the new interface
1707 main.h1.stopScapy()
1708 main.h1.startScapy()
1709
1710 # Discover new host location in ONOS and populate host data.
1711 # Host 1 IP and MAC should be unchanged
1712 main.intentFunction.sendDiscoveryArp( main, [ main.h1 ] )
1713 main.intentFunction.populateHostData( main )
1714
acsmars1ff5e052015-07-23 11:27:48 -07001715 h1PostMove = main.hostsData[ "h1" ][ "location" ][ 0:19 ]
1716
1717 utilities.assert_equals( expect="of:0000000000000006",
1718 actual=h1PostMove,
1719 onpass="Mobility: Successfully moved h1 to s6",
acsmars5d8cc862015-09-25 09:44:50 -07001720 onfail="Mobility: Failed to move h1 to s6" +
kelvin-onlabf34a58a2015-07-23 16:41:52 -07001721 " to single point intents" +
1722 " with IPV4 type and MAC addresses" +
1723 " in the same VLAN" )
1724
1725 main.step( "IPV4: Add host intents between h1 and h9" )
acsmars5d8cc862015-09-25 09:44:50 -07001726 main.assertReturnString = "Assert result for IPV4 host intent between h1, moved, and h9\n"
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001727 host1 = { "name":"h1","id":"00:00:00:00:00:01/-1" }
1728 host2 = { "name":"h9","id":"00:00:00:00:00:09/-1" }
Jeremy42df2e72016-02-23 16:37:46 -08001729 testResult = main.FALSE
1730 installResult = main.FALSE
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001731 installResult = main.intentFunction.installHostIntent( main,
1732 name='IPV4 Mobility IPV4',
kelvin-onlabf34a58a2015-07-23 16:41:52 -07001733 onosNode='0',
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001734 host1=host1,
Jeremye0cb5eb2016-01-27 17:39:09 -08001735 host2=host2 )
Jeremy2f190ca2016-01-29 15:23:57 -08001736 if installResult:
1737 testResult = main.intentFunction.testHostIntent( main,
1738 name='Host Mobility IPV4',
1739 intentId = installResult,
1740 onosNode='0',
1741 host1=host1,
1742 host2=host2,
1743 sw1="s6",
1744 sw2="s2",
1745 expectedLink=18 )
Jeremy42df2e72016-02-23 16:37:46 -08001746 else:
1747 main.CLIs[ 0 ].removeAllIntents( purge=True )
kelvin-onlabf34a58a2015-07-23 16:41:52 -07001748
1749 utilities.assert_equals( expect=main.TRUE,
Jeremy Songster1f39bf02016-01-20 17:17:25 -08001750 actual=testResult,
acsmars5d8cc862015-09-25 09:44:50 -07001751 onpass=main.assertReturnString,
1752 onfail=main.assertReturnString )
kelvin-onlab016dce22015-08-10 09:54:11 -07001753
1754 main.intentFunction.report( main )
Jeremye0cb5eb2016-01-27 17:39:09 -08001755
1756 def CASE6000( self, main ):
1757 """
1758 Tests Multi to Single Point Intent and Single to Multi Point Intent End Point Failure
1759 """
Jeremyd9e4eb12016-04-13 12:09:06 -07001760 if main.initialized == main.FALSE:
1761 main.log.error( "Test components did not start correctly, skipping further tests" )
1762 main.skipCase()
Jeremye0cb5eb2016-01-27 17:39:09 -08001763 assert main, "There is no main"
Jeremyd9e4eb12016-04-13 12:09:06 -07001764 try:
1765 assert main.CLIs
1766 except AssertionError:
1767 main.log.error( "There is no main.CLIs, skipping test cases" )
1768 main.initialized = main.FALSE
1769 main.skipCase()
1770 try:
1771 assert main.Mininet1
1772 except AssertionError:
1773 main.log.error( "Mininet handle should be named Mininet1, skipping test cases" )
1774 main.initialized = main.FALSE
1775 main.skipCase()
1776 try:
1777 assert main.numSwitch
1778 except AssertionError:
1779 main.log.error( "Place the total number of switch topology in \
1780 main.numSwitch" )
1781 main.initialized = main.FALSE
1782 main.skipCase()
Jeremye0cb5eb2016-01-27 17:39:09 -08001783 main.case( "Test Multi to Single End Point Failure" )
1784 main.step( "Installing Multi to Single Point intents" )
1785
1786 main.assertReturnString = "Assertion results for IPV4 multi to single \
1787 point intent end point failure with no options set\n"
1788 senders = [
1789 { "name":"h16", "device":"of:0000000000000006/8" },
1790 { "name":"h24", "device":"of:0000000000000007/8" }
1791 ]
1792 recipients = [
1793 { "name":"h8", "device":"of:0000000000000005/8" }
1794 ]
1795 isolatedSenders = [
1796 { "name":"h24"}
1797 ]
1798 isolatedRecipients = []
1799 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001800 installResult = main.FALSE
Jeremye0cb5eb2016-01-27 17:39:09 -08001801 installResult = main.intentFunction.installMultiToSingleIntent(
1802 main,
1803 name="NOOPTION",
1804 senders=senders,
1805 recipients=recipients,
1806 sw1="s5",
1807 sw2="s2" )
1808
1809 if installResult:
1810 testResult = main.intentFunction.testEndPointFail(
1811 main,
1812 intentId=installResult,
1813 name="NOOPTION",
1814 senders=senders,
1815 recipients=recipients,
1816 isolatedSenders=isolatedSenders,
1817 isolatedRecipients=isolatedRecipients,
1818 sw1="s6",
1819 sw2="s2",
1820 sw3="s4",
1821 sw4="s1",
1822 sw5="s3",
1823 expectedLink1=16,
1824 expectedLink2=14 )
Jeremy42df2e72016-02-23 16:37:46 -08001825 else:
1826 main.CLIs[ 0 ].removeAllIntents( purge=True )
Jeremye0cb5eb2016-01-27 17:39:09 -08001827
1828 utilities.assert_equals( expect=main.TRUE,
1829 actual=testResult,
1830 onpass=main.assertReturnString,
1831 onfail=main.assertReturnString )
1832
Jeremye0cb5eb2016-01-27 17:39:09 -08001833 main.step( "NOOPTION: Install and test single point to multi point intents" )
Jeremy Songster832f9e92016-05-05 14:30:49 -07001834 main.assertReturnString = "Assertion results for IPV4 single to multi point intent with no options set\n"
Jeremye0cb5eb2016-01-27 17:39:09 -08001835 senders = [
1836 { "name":"h8", "device":"of:0000000000000005/8" }
1837 ]
1838 recipients = [
1839 { "name":"h16", "device":"of:0000000000000006/8" },
1840 { "name":"h24", "device":"of:0000000000000007/8" }
1841 ]
Jeremy Songster832f9e92016-05-05 14:30:49 -07001842 isolatedSenders = [
1843 { "name":"h24"}
Jeremye0cb5eb2016-01-27 17:39:09 -08001844 ]
1845 testResult = main.FALSE
Jeremy42df2e72016-02-23 16:37:46 -08001846 installResult = main.FALSE
Jeremye0cb5eb2016-01-27 17:39:09 -08001847 installResult = main.intentFunction.installSingleToMultiIntent(
1848 main,
1849 name="NOOPTION",
1850 senders=senders,
1851 recipients=recipients,
1852 sw1="s5",
1853 sw2="s2")
1854
1855 if installResult:
1856 testResult = main.intentFunction.testEndPointFail(
1857 main,
1858 intentId=installResult,
1859 name="NOOPTION",
1860 senders=senders,
1861 recipients=recipients,
1862 isolatedSenders=isolatedSenders,
1863 isolatedRecipients=isolatedRecipients,
1864 sw1="s6",
1865 sw2="s2",
1866 sw3="s4",
1867 sw4="s1",
1868 sw5="s3",
1869 expectedLink1=16,
1870 expectedLink2=14 )
Jeremy42df2e72016-02-23 16:37:46 -08001871 else:
1872 main.CLIs[ 0 ].removeAllIntents( purge=True )
Jeremye0cb5eb2016-01-27 17:39:09 -08001873
1874 utilities.assert_equals( expect=main.TRUE,
1875 actual=testResult,
1876 onpass=main.assertReturnString,
1877 onfail=main.assertReturnString )
1878
Jeremy2f190ca2016-01-29 15:23:57 -08001879 main.intentFunction.report( main )