blob: f50e7c56a1a47ea3a884afa51adfd65fcf962e03 [file] [log] [blame]
kavitha Alagesan373e0552016-11-22 05:22:05 +05301class FUNCgroup:
2
3 def __init__( self ):
4 self.default = ''
5
6 def CASE1( self, main ):
7 import os
8 import imp
kavitha Alagesan373e0552016-11-22 05:22:05 +05309 """
10 - Construct tests variables
11 - GIT ( optional )
12 - Checkout ONOS master branch
13 - Pull latest ONOS code
14 - Building ONOS ( optional )
15 - Install ONOS package
16 - Build ONOS package
17 """
Devin Lim58046fa2017-07-05 16:55:00 -070018 try:
19 from tests.dependencies.ONOSSetup import ONOSSetup
20 main.testSetUp = ONOSSetup()
21 except ImportError:
22 main.log.error( "ONOSSetup not found. exiting the test" )
23 main.exit()
24 main.testSetUp.envSetupDescription()
25 stepResult = main.FALSE
kavitha Alagesan373e0552016-11-22 05:22:05 +053026
Devin Lim58046fa2017-07-05 16:55:00 -070027 try:
28 # Test variables
29 main.cellName = main.params['ENV']['cellName']
30 main.apps = main.params['ENV']['cellApps']
31 main.ONOSport = main.params['CTRL']['port']
32 main.dependencyPath = main.testOnDirectory + \
33 main.params['DEPENDENCY']['path']
34 wrapperFile1 = main.params['DEPENDENCY']['wrapper1']
35 wrapperFile2 = main.params['DEPENDENCY']['wrapper2']
36 main.topology = main.params['DEPENDENCY']['topology']
37 bucket = main.params['DEPENDENCY']['bucket']
38 main.maxNodes = int(main.params['SCALE']['max'])
39 main.startUpSleep = int(main.params['SLEEP']['startup'])
40 main.startMNSleep = int(main.params['SLEEP']['startMN'])
41 main.addFlowSleep = int(main.params['SLEEP']['addFlow'])
42 main.delFlowSleep = int(main.params['SLEEP']['delFlow'])
43 main.addGroupSleep = int(main.params['SLEEP']['addGroup'])
44 main.delGroupSleep = int(main.params['SLEEP']['delGroup'])
45 main.debug = main.params['DEBUG']
46 main.swDPID = main.params['TEST']['swDPID']
47 egressPort1 = main.params['TEST']['egressPort1']
48 egressPort2 = main.params['TEST']['egressPort2']
49 egressPort3 = main.params['TEST']['egressPort3']
50 ingressPort = main.params['TEST']['ingressPort']
51 appCookie = main.params['TEST']['appCookie']
52 type1 = main.params['TEST']['type1']
53 type2 = main.params['TEST']['type2']
54 groupId = main.params['TEST']['groupId']
55 priority = main.params['TEST']['priority']
56 deviceId = main.params['TEST']['swDPID']
kavitha Alagesan373e0552016-11-22 05:22:05 +053057
Devin Lim58046fa2017-07-05 16:55:00 -070058 main.debug = True if "on" in main.debug else False
59 # -- INIT SECTION, ONLY RUNS ONCE -- #
kavitha Alagesan373e0552016-11-22 05:22:05 +053060
Devin Lim58046fa2017-07-05 16:55:00 -070061 main.buckets = imp.load_source(bucket,
62 main.dependencyPath +
63 bucket +
64 ".py")
kavitha Alagesan373e0552016-11-22 05:22:05 +053065
Devin Lim58046fa2017-07-05 16:55:00 -070066 copyResult = main.ONOSbench.scp(main.Mininet1,
67 main.dependencyPath + main.topology,
68 main.Mininet1.home + '/custom/',
69 direction="to")
kavitha Alagesan373e0552016-11-22 05:22:05 +053070
Devin Lim58046fa2017-07-05 16:55:00 -070071 utilities.assert_equals(expect=main.TRUE,
72 actual=copyResult,
73 onpass="Successfully copy " + "test variables ",
74 onfail="Failed to copy test variables")
75 stepResult = main.testSetUp.envSetup()
kavitha Alagesan373e0552016-11-22 05:22:05 +053076
Devin Lim58046fa2017-07-05 16:55:00 -070077 except Exception as e:
78 main.testSetUp.envSetupException( e )
kavitha Alagesan373e0552016-11-22 05:22:05 +053079
Devin Lim58046fa2017-07-05 16:55:00 -070080 main.testSetUp.evnSetupConclusion( stepResult )
kavitha Alagesan373e0552016-11-22 05:22:05 +053081
kavitha Alagesan373e0552016-11-22 05:22:05 +053082
kavitha Alagesan373e0552016-11-22 05:22:05 +053083
kavitha Alagesan373e0552016-11-22 05:22:05 +053084 def CASE2( self, main ):
85 """
86 - Set up cell
87 - Create cell file
88 - Set cell file
89 - Verify cell file
90 - Kill ONOS process
91 - Uninstall ONOS cluster
92 - Verify ONOS start up
93 - Install ONOS cluster
94 - Connect to cli
95 """
Devin Lim58046fa2017-07-05 16:55:00 -070096 main.testSetUp.ONOSSetUp( main.Mininet1 )
kavitha Alagesan373e0552016-11-22 05:22:05 +053097
98 def CASE3( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -070099 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530100 Start Mininet
Jon Hall602d0a72017-05-24 16:06:53 -0700101 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530102 import json
Devin Lim58046fa2017-07-05 16:55:00 -0700103 import time
104 try:
105 from tests.dependencies.topology import Topology
106 except ImportError:
107 main.log.error( "Topology not found exiting the test" )
108 main.exit()
109 try:
110 main.topoRelated
111 except ( NameError, AttributeError ):
112 main.topoRelated = Topology()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530113
114 main.case( "Setup mininet and compare ONOS topology view to Mininet topology" )
115 main.caseExplanation = "Start mininet with custom topology and compare topology " +\
116 "elements between Mininet and ONOS"
117
118 main.step( "Setup Mininet Topology" )
119 topology = main.Mininet1.home + '/custom/' + main.topology
Jon Hall602d0a72017-05-24 16:06:53 -0700120 stepResult = main.Mininet1.startNet( topoFile=topology )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530121
122 utilities.assert_equals( expect=main.TRUE,
123 actual=stepResult,
124 onpass="Successfully loaded topology",
125 onfail="Failed to load topology" )
126
127 main.step( "Assign switch to controller" )
Jon Hall602d0a72017-05-24 16:06:53 -0700128 stepResult = main.Mininet1.assignSwController( "s1", main.ONOSip[ 0 ] )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530129
130 utilities.assert_equals( expect=main.TRUE,
131 actual=stepResult,
132 onpass="Successfully assigned switch to controller",
133 onfail="Failed to assign switch to controller" )
134
135 time.sleep( main.startMNSleep )
136
Devin Lim58046fa2017-07-05 16:55:00 -0700137 main.topoRelated.compareTopos( main.Mininet1 )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530138
139 def CASE4( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -0700140 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530141 Testing scapy
Jon Hall602d0a72017-05-24 16:06:53 -0700142 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530143 main.case( "Testing scapy" )
144 main.step( "Creating Host1 component" )
145 main.Scapy.createHostComponent( "h1" )
146 main.Scapy.createHostComponent( "h2" )
147 hosts = [ main.h1, main.h2 ]
148 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700149 host.startHostCli()
150 host.startScapy()
151 host.updateSelf()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530152 main.log.debug( host.name )
153 main.log.debug( host.hostIp )
154 main.log.debug( host.hostMac )
155
156 main.step( "Sending/Receiving Test packet - Filter doesn't match" )
157 main.log.info( "Starting Filter..." )
Jon Hall602d0a72017-05-24 16:06:53 -0700158 main.h2.startFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530159 main.log.info( "Building Ether frame..." )
160 main.h1.buildEther( dst=main.h2.hostMac )
161 main.log.info( "Sending Packet..." )
Jon Hall602d0a72017-05-24 16:06:53 -0700162 main.h1.sendPacket()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530163 main.log.info( "Checking Filter..." )
Jon Hall602d0a72017-05-24 16:06:53 -0700164 finished = main.h2.checkFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530165 main.log.debug( finished )
166 i = ""
167 if finished:
Jon Hall602d0a72017-05-24 16:06:53 -0700168 a = main.h2.readPackets()
169 for i in a.splitlines():
kavitha Alagesan373e0552016-11-22 05:22:05 +0530170 main.log.info( i )
171 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700172 kill = main.h2.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530173 main.log.debug( kill )
174 main.h2.handle.sendline( "" )
175 main.h2.handle.expect( main.h2.scapyPrompt )
176 main.log.debug( main.h2.handle.before )
177 utilities.assert_equals( expect=True,
178 actual="dst=00:00:00:00:00:02 src=00:00:00:00:00:01" in i,
179 onpass="Pass",
180 onfail="Fail" )
181
182 main.step( "Sending/Receiving Test packet - Filter matches" )
Jon Hall602d0a72017-05-24 16:06:53 -0700183 main.h2.startFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530184 main.h1.buildEther( dst=main.h2.hostMac )
185 main.h1.buildIP( dst=main.h2.hostIp )
Jon Hall602d0a72017-05-24 16:06:53 -0700186 main.h1.sendPacket()
187 finished = main.h2.checkFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530188 i = ""
189 if finished:
Jon Hall602d0a72017-05-24 16:06:53 -0700190 a = main.h2.readPackets()
191 for i in a.splitlines():
kavitha Alagesan373e0552016-11-22 05:22:05 +0530192 main.log.info( i )
193 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700194 kill = main.h2.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530195 main.log.debug( kill )
196 main.h2.handle.sendline( "" )
197 main.h2.handle.expect( main.h2.scapyPrompt )
198 main.log.debug( main.h2.handle.before )
199 utilities.assert_equals( expect=True,
200 actual="dst=00:00:00:00:00:02 src=00:00:00:00:00:01" in i,
201 onpass="Pass",
202 onfail="Fail" )
203
kavitha Alagesan373e0552016-11-22 05:22:05 +0530204 main.step( "Clean up host components" )
205 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700206 host.stopScapy()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530207 main.Mininet1.removeHostComponent( "h1" )
208 main.Mininet1.removeHostComponent( "h2" )
209
210 def CASE5( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -0700211 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530212 Adding Group of type "ALL" using Rest api
Jon Hall602d0a72017-05-24 16:06:53 -0700213 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530214 import json
215 import time
216 isAdded = main.FALSE
217 main.case( "Verify Group of type All are successfully Added" )
218 main.caseExplanation = " Install a Group of type ALL " +\
219 " Verify the Group is Added " +\
220 " Add a flow using the group " +\
221 " Send a packet that verifies the action bucket of the group"
222
223 main.step( "Add Group using Rest api" )
224 bucketList = []
Jon Hall602d0a72017-05-24 16:06:53 -0700225 bucket = main.buckets.addBucket( main, egressPort=egressPort1 )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530226 bucketList.append( bucket )
Jon Hall602d0a72017-05-24 16:06:53 -0700227 bucket = main.buckets.addBucket( main, egressPort=egressPort2 )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530228 bucketList.append( bucket )
Jon Hall602d0a72017-05-24 16:06:53 -0700229 bucket = main.buckets.addBucket( main, egressPort=egressPort3 )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530230 bucketList.append( bucket )
Jon Hall602d0a72017-05-24 16:06:53 -0700231 response = main.ONOSrest.addGroup( deviceId=deviceId,
232 groupType=type1,
233 bucketList=bucketList,
234 appCookie=appCookie,
235 groupId=groupId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530236
237 utilities.assert_equals( expect=main.TRUE,
238 actual=response,
239 onpass="Successfully added Groups of type ALL",
240 onfail="Failed to add Groups of type ALL" )
241
242 # Giving ONOS time to add the group
243 time.sleep( main.addGroupSleep )
244
245 main.step( "Check groups are in ADDED state" )
246
Jon Hall602d0a72017-05-24 16:06:53 -0700247 response = main.ONOSrest.getGroups( deviceId=deviceId,
248 appCookie=appCookie )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530249 responsejson = json.loads( response )
Jon Hall602d0a72017-05-24 16:06:53 -0700250 for item in responsejson:
251 if item[ "state" ] == "ADDED":
kavitha Alagesan373e0552016-11-22 05:22:05 +0530252 isAdded = main.TRUE
253
254 utilities.assert_equals( expect=main.TRUE,
255 actual=isAdded,
256 onpass="All Group is in Added State",
257 onfail="All Group is not in Added State" )
258
Jon Hall602d0a72017-05-24 16:06:53 -0700259 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530260 Adding flow using rest api
Jon Hall602d0a72017-05-24 16:06:53 -0700261 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530262 isAdded = main.FALSE
263
264 main.step( "Adding flow with Group using rest api" )
Jon Hall602d0a72017-05-24 16:06:53 -0700265 response = main.ONOSrest.addFlow( deviceId=deviceId,
266 priority=priority,
267 ingressPort=ingressPort,
268 groupId=groupId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530269 utilities.assert_equals( expect=main.TRUE,
270 actual=response,
271 onpass="Successfully Added Flows",
272 onfail="Failed to Add flows" )
273
274 # Giving ONOS time to add the flow
275 time.sleep( main.addFlowSleep )
276
Jon Hall602d0a72017-05-24 16:06:53 -0700277 response = main.ONOSrest.getFlows( deviceId=deviceId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530278 responsejson = json.loads( response )
Jon Hall602d0a72017-05-24 16:06:53 -0700279 for item in responsejson:
280 if item[ "priority" ] == int( priority ) and item[ "state" ] == "ADDED":
kavitha Alagesan373e0552016-11-22 05:22:05 +0530281 isAdded = main.TRUE
282
283 utilities.assert_equals( expect=main.TRUE,
284 actual=isAdded,
285 onpass="Flow is in Added State",
286 onfail="Flow is not in Added State" )
287
Jon Hall602d0a72017-05-24 16:06:53 -0700288 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530289 Sends a packet using scapy
Jon Hall602d0a72017-05-24 16:06:53 -0700290 """
Devin Lim58046fa2017-07-05 16:55:00 -0700291 main.step( "Testing Group by sending packet using Scapy" )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530292 main.log.info( "Creating host components" )
293 main.Scapy.createHostComponent( "h1" )
294 main.Scapy.createHostComponent( "h2" )
295 main.Scapy.createHostComponent( "h3" )
296 main.Scapy.createHostComponent( "h4" )
297
Jon Hall602d0a72017-05-24 16:06:53 -0700298 hosts = [ main.h1, main.h2, main.h3, main.h4 ]
kavitha Alagesan373e0552016-11-22 05:22:05 +0530299 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700300 host.startHostCli()
301 host.startScapy()
302 host.updateSelf()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530303 main.log.info( "Constructing Packet" )
304 main.h1.buildEther( dst=main.h1.hostMac )
305 main.h1.buildIP( dst=main.h1.hostIp )
306 main.log.info( "Start Filter on host2,host3,host4" )
307 main.h2.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) )
308 main.h3.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) )
309 main.h4.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) )
310 main.log.info( "sending packet to Host" )
Jon Hall602d0a72017-05-24 16:06:53 -0700311 main.h1.sendPacket()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530312 main.log.info( "Checking filter for our packet" )
Jon Hall602d0a72017-05-24 16:06:53 -0700313 stepResultH2 = main.h2.checkFilter()
314 stepResultH3 = main.h3.checkFilter()
315 stepResultH4 = main.h4.checkFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530316
317 if stepResultH2:
Jon Hall602d0a72017-05-24 16:06:53 -0700318 main.log.info( "Packet : %s" % main.h2.readPackets() )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530319 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700320 main.h2.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530321
322 if stepResultH3:
Jon Hall602d0a72017-05-24 16:06:53 -0700323 main.log.info( "Packet : %s" % main.h3.readPackets() )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530324 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700325 main.h2.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530326
327 if stepResultH4:
Jon Hall602d0a72017-05-24 16:06:53 -0700328 main.log.info( "Packet : %s" % main.h4.readPackets() )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530329 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700330 main.h4.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530331
Jon Hall602d0a72017-05-24 16:06:53 -0700332 if stepResultH2 and stepResultH3 and stepResultH4:
kavitha Alagesan373e0552016-11-22 05:22:05 +0530333 main.log.info( "Success!!!Packet sent to port 1 is received at port 2,3 and 4" )
334 stepResult = main.TRUE
335 else:
336 main.log.info( "Failure!!!Packet sent to port 1 is not received at port 2,3 and 4" )
337 stepResult = main.FALSE
338
339 main.log.info( "Clean up host components" )
340 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700341 host.stopScapy()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530342 main.Mininet1.removeHostComponent( "h1" )
343 main.Mininet1.removeHostComponent( "h2" )
344 main.Mininet1.removeHostComponent( "h3" )
345 main.Mininet1.removeHostComponent( "h4" )
346
347 utilities.assert_equals( expect=main.TRUE,
348 actual=stepResult,
349 onpass="Packet sent to port 1 is received at port 2,3,4 ",
350 onfail="Packet sent to port 1 is not received at port 2,3,4 " )
351
352 def CASE6( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -0700353 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530354 Deleting the Group and Flow
Jon Hall602d0a72017-05-24 16:06:53 -0700355 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530356 import json
357 import time
358 respFlowId = 1
359
360 main.case( "Delete the Group and Flow added through Rest api " )
361 main.step( "Deleting Group and Flows" )
362
363 #Get Flow ID
Jon Hall602d0a72017-05-24 16:06:53 -0700364 response = main.ONOSrest.getFlows( deviceId=deviceId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530365 responsejson = json.loads( response )
Jon Hall602d0a72017-05-24 16:06:53 -0700366 for item in responsejson:
367 if item[ "priority" ] == int( priority ):
368 respFlowId = item[ "id" ]
kavitha Alagesan373e0552016-11-22 05:22:05 +0530369
370 main.step( "Deleting the created flow by deviceId and flowId" )
Jon Hall602d0a72017-05-24 16:06:53 -0700371 flowResponse = main.ONOSrest.removeFlow( deviceId=deviceId,
372 flowId=respFlowId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530373
374 utilities.assert_equals( expect=main.TRUE,
375 actual=flowResponse,
376 onpass="Deleting flow is successful!!!",
377 onfail="Deleting flow is failure!!!" )
378
379 # Giving ONOS time to delete the flow
380 time.sleep( main.delFlowSleep )
381
382 main.step( "Deleting the created group by deviceId and appCookie" )
Jon Hall602d0a72017-05-24 16:06:53 -0700383 groupResponse = main.ONOSrest.removeGroup( deviceId=deviceId,
384 appCookie=appCookie )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530385
386 utilities.assert_equals( expect=main.TRUE,
387 actual=groupResponse,
388 onpass="Deleting Group is successful!!!",
389 onfail="Deleting Group is failure!!!" )
390
391 # Giving ONOS time to delete the group
392 time.sleep( main.delGroupSleep )
393
394 def CASE7( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -0700395 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530396 Adding Group of type "INDIRECT" using Rest api.
Jon Hall602d0a72017-05-24 16:06:53 -0700397 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530398 import json
399 import time
400 isAdded = main.FALSE
401
402 main.case( "Verify Group of type INDIRECT are successfully Added" )
403 main.caseExplanation = " Install a Group of type INDIRECT " +\
404 " Verify the Group is Added " +\
405 " Add a flow using the group " +\
406 " Send a packet that verifies the action bucket of the group"
407
408 main.step( "Add Group using Rest api" )
409 bucketList = []
Jon Hall602d0a72017-05-24 16:06:53 -0700410 bucket = main.buckets.addBucket( main, egressPort=egressPort1 )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530411 bucketList.append( bucket )
Jon Hall602d0a72017-05-24 16:06:53 -0700412 response = main.ONOSrest.addGroup( deviceId=deviceId,
413 groupType=type2,
414 bucketList=bucketList,
415 appCookie=appCookie,
416 groupId=groupId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530417
418 utilities.assert_equals( expect=main.TRUE,
419 actual=response,
420 onpass="Successfully added Groups of type INDIRECT",
421 onfail="Failed to add Groups of type INDIRECT" )
422
423 # Giving ONOS time to add the group
424 time.sleep( main.addGroupSleep )
425
426 main.step( "Check groups are in ADDED state" )
427
Jon Hall602d0a72017-05-24 16:06:53 -0700428 response = main.ONOSrest.getGroups( deviceId=deviceId,
429 appCookie=appCookie )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530430 responsejson = json.loads( response )
Jon Hall602d0a72017-05-24 16:06:53 -0700431 for item in responsejson:
432 if item[ "state" ] == "ADDED":
kavitha Alagesan373e0552016-11-22 05:22:05 +0530433 isAdded = main.TRUE
434
435 utilities.assert_equals( expect=main.TRUE,
436 actual=isAdded,
437 onpass="INDIRECT Group is in Added State",
438 onfail="INDIRECT Group is not in Added State" )
439
Jon Hall602d0a72017-05-24 16:06:53 -0700440 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530441 Adding flows using rest api
Jon Hall602d0a72017-05-24 16:06:53 -0700442 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530443 isAdded = main.FALSE
444
445 main.step( "Adding flow with Group using rest api" )
Jon Hall602d0a72017-05-24 16:06:53 -0700446 response = main.ONOSrest.addFlow( deviceId=deviceId,
447 priority=priority,
448 ingressPort=ingressPort,
449 groupId=groupId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530450 utilities.assert_equals( expect=main.TRUE,
451 actual=response,
452 onpass="Successfully Added Flows",
453 onfail="Failed to Add flows" )
454
455 # Giving ONOS time to add the flow
456 time.sleep( main.addFlowSleep )
457
Jon Hall602d0a72017-05-24 16:06:53 -0700458 response = main.ONOSrest.getFlows( deviceId=deviceId )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530459 responsejson = json.loads( response )
Jon Hall602d0a72017-05-24 16:06:53 -0700460 for item in responsejson:
461 if item[ "priority" ] == int( priority ) and item[ "state" ] == "ADDED":
kavitha Alagesan373e0552016-11-22 05:22:05 +0530462 isAdded = main.TRUE
463
464 utilities.assert_equals( expect=main.TRUE,
465 actual=isAdded,
466 onpass="Flow is in Added State",
467 onfail="Flow is not in Added State" )
468
Jon Hall602d0a72017-05-24 16:06:53 -0700469 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530470 Sends a packet using scapy
Jon Hall602d0a72017-05-24 16:06:53 -0700471 """
Devin Lim58046fa2017-07-05 16:55:00 -0700472 main.step( "Testing Group by sending packet using Scapy" )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530473 main.log.info( "Creating host components" )
474 main.Scapy.createHostComponent( "h1" )
475 main.Scapy.createHostComponent( "h2" )
476
Jon Hall602d0a72017-05-24 16:06:53 -0700477 hosts = [ main.h1, main.h2 ]
kavitha Alagesan373e0552016-11-22 05:22:05 +0530478 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700479 host.startHostCli()
480 host.startScapy()
481 host.updateSelf()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530482 main.log.info( "Constructing Packet" )
483 main.h1.buildEther( dst=main.h1.hostMac )
484 main.h1.buildIP( dst=main.h1.hostIp )
485 main.log.info( "Start Filter on host2" )
486 main.h2.startFilter( pktFilter="ether host %s and ip host %s" % ( main.h1.hostMac, main.h1.hostIp ) )
487 main.log.info( "sending packet to Host" )
Jon Hall602d0a72017-05-24 16:06:53 -0700488 main.h1.sendPacket()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530489 main.log.info( "Checking filter for our packet" )
Jon Hall602d0a72017-05-24 16:06:53 -0700490 stepResultH2 = main.h2.checkFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530491
492 if stepResultH2:
Jon Hall602d0a72017-05-24 16:06:53 -0700493 main.log.info( "Packet : %s" % main.h2.readPackets() )
kavitha Alagesan373e0552016-11-22 05:22:05 +0530494 else:
Jon Hall602d0a72017-05-24 16:06:53 -0700495 main.h2.killFilter()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530496
497 main.log.info( "Clean up host components" )
498 for host in hosts:
Jon Hall602d0a72017-05-24 16:06:53 -0700499 host.stopScapy()
kavitha Alagesan373e0552016-11-22 05:22:05 +0530500 main.Mininet1.removeHostComponent( "h1" )
501 main.Mininet1.removeHostComponent( "h2" )
502
503 utilities.assert_equals( expect=main.TRUE,
504 actual=stepResultH2,
505 onpass="Packet sent to port 1 is received at port 2 successfully!!!",
506 onfail="Failure!!!Packet sent to port 1 is not received at port 2" )
507
kavitha Alagesan373e0552016-11-22 05:22:05 +0530508 def CASE100( self, main ):
Jon Hall602d0a72017-05-24 16:06:53 -0700509 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530510 Report errors/warnings/exceptions
Jon Hall602d0a72017-05-24 16:06:53 -0700511 """
kavitha Alagesan373e0552016-11-22 05:22:05 +0530512 main.log.info( "Error report: \n" )
513 main.ONOSbench.logReport( main.ONOSip[ 0 ],
514 [ "INFO",
515 "FOLLOWER",
516 "WARN",
517 "flow",
518 "group",
519 "ERROR",
520 "Except" ],
521 "s" )