blob: afcd0204b1d7a922bb04b0e4a541fa90978551d8 [file] [log] [blame]
admin4927d4f2014-07-30 09:47:49 -07001
2class HATestZK:
3
4 global topology
5 global masterSwitchList
6 global highIntentList
7 global lowIntentList
8 global flows
9 flows = []
10
11 def __init__(self) :
12 self.default = ''
13
14 '''
15 CASE1 is to close any existing instances of ONOS, clean out the
16 RAMCloud database, and start up ONOS instances.
17 '''
18 def CASE1(self,main) :
19 main.case("Initial Startup")
20 main.step("Stop ONOS")
adminecb92652014-08-04 09:27:21 -070021 main.ONOS1.stop_all()
22 main.ONOS2.stop_all()
23 main.ONOS3.stop_all()
24 main.ONOS4.stop_all()
25 main.ONOS5.stop_all()
admin4927d4f2014-07-30 09:47:49 -070026 main.ONOS1.stop_rest()
27 main.ONOS2.stop_rest()
28 main.ONOS3.stop_rest()
29 main.ONOS4.stop_rest()
adminecb92652014-08-04 09:27:21 -070030 main.ONOS5.stop_rest()
admin4927d4f2014-07-30 09:47:49 -070031 result = main.ONOS1.status() or main.ONOS2.status() \
adminecb92652014-08-04 09:27:21 -070032 or main.ONOS3.status() or main.ONOS4.status() or main.ONOS5.status()
admin4927d4f2014-07-30 09:47:49 -070033 utilities.assert_equals(expect=main.FALSE,actual=result,onpass="ONOS stopped successfully",onfail="ONOS WAS NOT KILLED PROPERLY")
34 main.step("Startup Zookeeper")
35 main.ZK1.start()
36 main.ZK2.start()
37 main.ZK3.start()
38 main.ZK4.start()
adminecb92652014-08-04 09:27:21 -070039 main.ZK5.start()
admin4927d4f2014-07-30 09:47:49 -070040 result = main.ZK1.isup() and main.ZK2.isup()\
adminecb92652014-08-04 09:27:21 -070041 and main.ZK3.isup() and main.ZK4.isup() and main.ZK5.isup()
admin4927d4f2014-07-30 09:47:49 -070042 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Zookeeper started successfully",onfail="ZOOKEEPER FAILED TO START")
43 main.step("Cleaning RC Database and Starting All")
adminecb92652014-08-04 09:27:21 -070044 main.RC1.del_db()
45 main.RC2.del_db()
46 main.RC3.del_db()
47 main.RC4.del_db()
48 main.RC5.del_db()
admin4927d4f2014-07-30 09:47:49 -070049 main.ONOS1.start_all()
50 main.ONOS2.start_all()
51 main.ONOS3.start_all()
52 main.ONOS4.start_all()
adminecb92652014-08-04 09:27:21 -070053 main.ONOS5.start_all()
54 # main.ONOS1.start_rest()
admin4927d4f2014-07-30 09:47:49 -070055 main.step("Testing Startup")
56 result1 = main.ONOS1.rest_status()
57 vm1 = main.RC1.status_coor and main.RC1.status_serv and \
58 main.ONOS1.isup()
59 vm2 = main.RC2.status_coor and main.ONOS2.isup()
60 vm3 = main.RC3.status_coor and main.ONOS3.isup()
61 vm4 = main.RC4.status_coor and main.ONOS4.isup()
adminecb92652014-08-04 09:27:21 -070062 vm5 = main.RC5.status_coor and main.ONOS5.isup()
63 result = result1 and vm1 and vm2 and vm3 and vm4 and vm5
admin4927d4f2014-07-30 09:47:49 -070064 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Everything started successfully",onfail="EVERYTHING FAILED TO START")
adminecb92652014-08-04 09:27:21 -070065 if result==main.FALSE:
66 main.cleanup()
67 main.exit()
admin4927d4f2014-07-30 09:47:49 -070068
69 '''
70 CASE2
71 '''
72 def CASE2(self,main) :
73 import time
74 import json
75 import re
76 main.log.report("Assigning Controllers")
77 main.case("Assigning Controllers")
78 main.step("Assign Master Controllers")
adminecb92652014-08-04 09:27:21 -070079 for i in range(1,29):
admin4927d4f2014-07-30 09:47:49 -070080 if i ==1:
81 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
82 elif i>=2 and i<5:
83 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
84 elif i>=5 and i<8:
85 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
86 elif i>=8 and i<18:
87 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
88 elif i>=18 and i<28:
89 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip5'],port1=main.params['CTRL']['port5'])
90 else:
91 main.Mininet1.assign_sw_controller(sw=str(i),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
92
93 result = main.TRUE
adminecb92652014-08-04 09:27:21 -070094 for i in range (1,29):
admin4927d4f2014-07-30 09:47:49 -070095 if i==1:
96 response = main.Mininet1.get_sw_controller("s"+str(i))
97 print("Response is " + str(response))
98 if re.search("tcp:"+main.params['CTRL']['ip1'],response):
99 result = result and main.TRUE
100 else:
101 result = main.FALSE
102 elif i>=2 and i<5:
103 response = main.Mininet1.get_sw_controller("s"+str(i))
104 print("Response is " + str(response))
105 if re.search("tcp:"+main.params['CTRL']['ip2'],response):
106 result = result and main.TRUE
107 else:
108 result = main.FALSE
109 elif i>=5 and i<8:
110 response = main.Mininet1.get_sw_controller("s"+str(i))
111 print("Response is " + str(response))
112 if re.search("tcp:"+main.params['CTRL']['ip3'],response):
113 result = result and main.TRUE
114 else:
115 result = main.FALSE
116 elif i>=8 and i<18:
117 response = main.Mininet1.get_sw_controller("s"+str(i))
118 print("Response is " + str(response))
119 if re.search("tcp:"+main.params['CTRL']['ip4'],response):
120 result = result and main.TRUE
121 else:
122 result = main.FALSE
123 elif i>=18 and i<28:
124 response = main.Mininet1.get_sw_controller("s"+str(i))
125 print("Response is " + str(response))
126 if re.search("tcp:"+main.params['CTRL']['ip5'],response):
127 result = result and main.TRUE
128 else:
129 result = main.FALSE
130 else:
131 response = main.Mininet1.get_sw_controller("s"+str(i))
132 print("Response is" + str(response))
133 if re.search("tcp:" +main.params['CTRL']['ip1'],response):
134 result = result and main.TRUE
135 else:
136 result = main.FALSE
adminecb92652014-08-04 09:27:21 -0700137
admin4927d4f2014-07-30 09:47:49 -0700138 utilities.assert_equals(expect = main.TRUE,actual=result,onpass="MasterControllers assigned correctly")
adminecb92652014-08-04 09:27:21 -0700139 for i in range (1,29):
140 main.Mininet1.assign_sw_controller(sw=str(i),count=5,ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'])
admin4927d4f2014-07-30 09:47:49 -0700141
142 def CASE3(self,main) :
143 import time
144 import json
145 import re
146 main.case("Adding Intents")
147 intentIP = main.params['CTRL']['ip1']
148 intentPort=main.params['INTENTS']['intentPort']
149 intentURL=main.params['INTENTS']['intentURL']
150 count = 1
151 for i in range(8,18):
152 srcMac = '00:00:00:00:00:' + str(hex(i)[2:]).zfill(2)
153 dstMac = '00:00:00:00:00:'+str(hex(i+10)[2:])
154 srcDPID = '00:00:00:00:00:00:30:'+str(i).zfill(2)
155 dstDPID= '00:00:00:00:00:00:60:' +str(i+10)
156 main.ONOS1.add_intent(intent_id=str(count),src_dpid=srcDPID,dst_dpid=dstDPID,src_mac=srcMac,dst_mac=dstMac,intentIP=intentIP,intentPort=intentPort,intentURL=intentURL)
157 count+=1
158 dstDPID = '00:00:00:00:00:00:30:'+str(i).zfill(2)
159 srcDPID= '00:00:00:00:00:00:60:' +str(i+10)
160 dstMac = '00:00:00:00:00:' + str(hex(i)[2:]).zfill(2)
161 srcMac = '00:00:00:00:00:'+str(hex(i+10)[2:])
162 main.ONOS1.add_intent(intent_id=str(count),src_dpid=srcDPID,dst_dpid=dstDPID,src_mac=srcMac,dst_mac=dstMac,intentIP=intentIP,intentPort=intentPort,intentURL=intentURL)
163 count+=1
164 count = 1
165 i = 8
166 result = main.TRUE
167 while i <18 :
168 main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
169 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
170 if ping ==main.FALSE and count <9:
171 count+=1
172 i = 8
173 result = main.FALSE
174 main.log.info("Ping FAILED! Making attempt number "+str(count) + "in 2 seconds")
175 time.sleep(2)
176 elif ping==main.FALSE:
177 main.log.info("PINGS FAILED! MAX RETRIES REACHED!")
178 i=19
179 result = main.FALSE
180 elif ping==main.TRUE:
181 main.log.info("Ping passed!")
182 i+=1
183 result = main.TRUE
184 else:
185 main.log.info("ERROR!!")
186 result = main.ERROR
187 if result==main.FALSE:
188 main.log.info("INTENTS HAVE NOT BEEN INSTALLED CORRECTLY!! EXITING!!!")
189 main.cleanup()
190 main.exit()
191
192
193 def CASE4(self,main) :
194 import time
195 from subprocess import Popen, PIPE
196 main.case("Setting up and Gathering data for current state")
197 main.step("Get the current In-Memory Topology on each ONOS Instance")
198
199 '''
200 ctrls = []
201 count = 1
202 while True:
203 temp = ()
204 if ('ip'+str(count)) in main.params['CTRL']:
205 temp = temp+(getattr(main,('ONOS'+str(count))),)
206 temp = temp + ("ONOS"+str(count),)
207 temp = temp + (main.params['CTRL']['ip'+str(count)],)
208 temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
209 ctrls.append(temp)
210 count+=1
211 else:
212 break
213 topo_result = main.TRUE
214
215 for n in range(1,count):
216 temp_result = main.Mininet1.compare_topo(ctrls,main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
217 '''
218
219 main.step("Get the Mastership of each switch")
220 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['switchURL']],stdout=PIPE).communicate()
221 global masterSwitchList1
222 masterSwitchList1 = stdout
223
224 main.step("Get the High Level Intents")
225 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['intentHighURL']],stdout=PIPE).communicate()
226 global highIntentList1
227 highIntentList1 = stdout
228
229 main.step("Get the Low level Intents")
230 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['intentLowURL']],stdout=PIPE).communicate()
231 global lowIntentList1
232 lowIntentList1= stdout
233
234 main.step("Get the OF Table entries")
235 global flows
236 flows=[]
adminecb92652014-08-04 09:27:21 -0700237 for i in range(1,29):
admin4927d4f2014-07-30 09:47:49 -0700238 flows.append(main.Mininet2.get_flowTable("s"+str(i)))
239
240
241 main.step("Start continuous pings")
242 main.Mininet2.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'],pingTime=500)
243 main.Mininet2.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'],pingTime=500)
244 main.Mininet2.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'],pingTime=500)
245 main.Mininet2.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'],pingTime=500)
246 main.Mininet2.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'],pingTime=500)
247 main.Mininet2.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'],pingTime=500)
248 main.Mininet2.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'],pingTime=500)
249 main.Mininet2.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'],pingTime=500)
250 main.Mininet2.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'],pingTime=500)
251 main.Mininet2.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'],pingTime=500)
252
253
254 def CASE5(self,main) :
255 import re
256 main.case("MAIN COMPONENT FAILURE AND SCENARIO SPECIFIC TESTS")
257 main.step("Zookeeper Server Failure!")
258 result = main.TRUE
259 master1 = main.ZK1.status()
260 print master1
261 if re.search("leader",master1):
262 main.ZK1.stop()
263 main.log.info("ZK1 was Master and Killed! Also Killing ZK2")
264 main.ZK2.stop()
265 time.sleep(10)
266 if re.search("leader",main.ZK3.status()) or re.search("leader",main.ZK4.status()) or re.search("leader",main.ZK5.status()):
267 result = main.TRUE
268 main.log.info("New Leader Elected")
269 else:
270 result = main.FALSE
271 main.log.info("NO NEW ZK LEADER ELECTED!!!")
272 else:
273 master2 = main.ZK2.status()
274 if re.search("leader",master2):
275 main.ZK2.stop()
276 main.log.info("ZK2 was Master and Killed! Also Killing ZK3")
277 main.ZK3.stop()
278 time.sleep(10)
279 if re.search("leader",main.ZK1.status()) or re.search("leader",main.ZK4.status()) or re.search("leader",main.ZK5.status()):
280 result = main.TRUE
281 main.log.info("New Leader Elected")
282 else:
283 result = main.FALSE
284 main.log.info("NO NEW ZK LEADER ELECTED!!!")
285 else:
286 master3 = main.ZK3.status()
287 if re.search("leader",master3):
288 main.ZK3.stop()
289 main.log.info("ZK3 was Master and Killed! Also Killing ZK4")
290 main.ZK4.stop()
291 time.sleep(10)
292 if re.search("leader",main.ZK1.status()) or re.search("leader",main.ZK2.status()) or re.search("leader",main.ZK5.status()):
293 result = main.TRUE
294 main.log.info("New Leader Elected")
295 else:
296 result = main.FALSE
297 main.log.info("NO NEW ZK LEADER ELECTED!!!")
298 else:
299 master4 = main.ZK4.status()
300 if re.search("leader",master4):
301 main.ZK4.stop()
302 main.log.info("ZK4 was Master and Killed! Also Killing ZK5")
303 main.ZK5.stop()
304 time.sleep(10)
305 if re.search("leader",main.ZK1.status()) or re.search("leader",main.ZK2.status()) or re.search("leader",main.ZK3.status()):
306 result = main.TRUE
307 main.log.info("New Leader Elected")
308 else:
309 result = main.FALSE
310 main.log.info("NO NEW ZK LEADER ELECTED!!!")
311 else:
312 main.ZK5.stop()
313 main.log.info("ZK5 was Master and Killed! Also Killing ZK1")
314 main.ZK1.stop()
315 time.sleep(10)
316 if re.search("leader",main.ZK3.status()) or re.search("leader",main.ZK4.status()) or re.search("leader",main.ZK2.status()):
317 result = main.TRUE
318 main.log.info("New Leader Elected")
319 else:
320 result = main.FALSE
321 main.log.info("NO NEW ZK LEADER ELECTED!!!")
adminecb92652014-08-04 09:27:21 -0700322 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="New Leader was Elected!",onfail="NO NEW LEADER WAS ELECTED!!!!")
323
admin4927d4f2014-07-30 09:47:49 -0700324
325
326 def CASE6(self,main) :
327 import os
328 main.case("Running ONOS Constant State Tests")
329 main.step("Get the current In-Memory Topology on each ONOS Instance and Compare it to the Topology before component failure")
330
331 main.step("Get the Mastership of each switch and compare to the Mastership before component failure")
332 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['switchURL']],stdout=PIPE).communicate()
333 result = main.TRUE
adminecb92652014-08-04 09:27:21 -0700334 for i in range(1,29):
335 switchDPID = str(main.Mininet1.getSwitchDPID(switch="s"+str(i)))
336 switchDPID = switchDPID[:2]+":"+switchDPID[2:4]+":"+switchDPID[4:6]+":"+switchDPID[6:8]+":"+switchDPID[8:10]+":"+switchDPID[10:12]+":"+switchDPID[12:14]+":"+switchDPID[14:]
337 master1 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)
338 master2 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout)
339 if main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)==main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout):
admin4927d4f2014-07-30 09:47:49 -0700340 result = result and main.TRUE
341 else:
342 result = main.FALSE
343 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Mastership of Switches was not changed",onfail="MASTERSHIP OF SWITCHES HAS CHANGED!!!")
adminecb92652014-08-04 09:27:21 -0700344 result1 = result
admin4927d4f2014-07-30 09:47:49 -0700345
346 main.step("Get the High Level Intents and compare to before component failure")
347 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['intentHighURL']],stdout=PIPE).communicate()
348 changesInIntents=main.ONOS1.comp_intents(preIntents=highIntentList1,postIntents=stdout)
349 if not changesInIntents:
350 result = main.TRUE
351 else:
352 main.log.info("THERE WERE CHANGES TO THE HIGH LEVEL INTENTS! CHANGES WERE: "+str(changesInIntents))
353 result = main.FALSE
354 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No changes to High level Intents",onfail="CHANGES WERE MADE TO HIGH LEVEL INTENTS")
adminecb92652014-08-04 09:27:21 -0700355 result2=result
admin4927d4f2014-07-30 09:47:49 -0700356
357 main.step("Get the Low level Intents and compare to before component failure")
358 (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['intentLowURL']],stdout=PIPE).communicate()
359 changesInIntents=main.ONOS1.comp_low(preIntents=lowIntentList1,postIntents=stdout)
360 if not changesInIntents:
361 result = main.TRUE
362 else:
363 main.log.info("THERE WERE CHANGES TO THE LOW LEVEL INTENTS! CHANGES WERE: "+str(changesInIntents))
364 result = main.FALSE
365 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No changes to Low level Intents",onfail="CHANGES WERE MADE TO LOW LEVEL INTENTS")
adminecb92652014-08-04 09:27:21 -0700366 result3=result
admin4927d4f2014-07-30 09:47:49 -0700367
368
369 main.step("Get the OF Table entries and compare to before component failure")
370 result = main.TRUE
371 flows2=[]
372 for i in range(27):
373 flows2.append(main.Mininet2.get_flowTable(sw="s"+str(i+1)))
adminecb92652014-08-04 09:27:21 -0700374 result = result and main.Mininet2.flow_comp(flow1=flows[i], flow2=main.Mininet2.get_flowTable(sw="s"+str(i+1)))
admin4927d4f2014-07-30 09:47:49 -0700375 if result == main.FALSE:
376 main.log.info("DIFFERENCES IN FLOW TABLES FOR SWITCH "+str(i))
377 break
378 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="No changes in the flow tables",onfail="CHANGES IN THE FLOW TABLES!!")
adminecb92652014-08-04 09:27:21 -0700379 result4 = result
admin4927d4f2014-07-30 09:47:49 -0700380
381 main.step("Check the continuous pings to ensure that no packets were dropped during component failure")
382 main.Mininet2.pingKill()
383 result = main.FALSE
384 for i in range(8,18):
385 result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
386 if result==main.TRUE:
387 main.log.info("LOSS IN THE PINGS!")
388 elif result == main.ERROR:
389 main.log.info("There are multiple mininet process running!!")
390 else:
391 main.log.info("No Loss in the pings!")
392 utilities.assert_equals(expect=main.FALSE,actual=result,onpass="No Loss of connectivity!",onfail="LOSS OF CONNECTIVITY")
adminecb92652014-08-04 09:27:21 -0700393 result5=not result
394 result = result1 and result2 and result3 and result4 and result5
395 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Constant State Tests Passed!",onfail="CONSTANT STATE TESTS FAILED!!")
admin4927d4f2014-07-30 09:47:49 -0700396
adminecb92652014-08-04 09:27:21 -0700397 def CASE7 (self,main):
398 main.case("Killing a link to Ensure that Link Discovery is Working Properly")
399 main.step("Start continuous pings")
400 main.Mininet2.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'],pingTime=500)
401 main.Mininet2.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'],pingTime=500)
402 main.Mininet2.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'],pingTime=500)
403 main.Mininet2.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'],pingTime=500)
404 main.Mininet2.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'],pingTime=500)
405 main.Mininet2.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'],pingTime=500)
406 main.Mininet2.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'],pingTime=500)
407 main.Mininet2.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'],pingTime=500)
408 main.Mininet2.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'],pingTime=500)
409 main.Mininet2.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'],pingTime=500)
admin4927d4f2014-07-30 09:47:49 -0700410
adminecb92652014-08-04 09:27:21 -0700411 main.step("Determine the current number of switches and links")
412 (number,active)=main.ONOS1.num_switch(RestIP=main.params['CTRL']['ip1'])
413 links = main.ONOS1.num_link(RestIP=main.params['CTRL']['ip1'])
414 main.log.info("Currently there are %s switches, %s are active, and %s links" %(number,active,links))
415
416 main.step("Kill Link between s3 and s28")
417 main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
418 result = main.ONOS1.check_status_report(main.params['CTRL']['ip1'],active,str(int(links)-2))
419 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link Down discovered properly",onfail="LINKS NOT DISCOVERED PROPERLY")
420 result1 = result
421 result = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
admin4927d4f2014-07-30 09:47:49 -0700422
adminecb92652014-08-04 09:27:21 -0700423 main.step("Check for loss in pings when Link is brought down")
424 main.Mininet2.pingKill()
425 result = main.FALSE
426 for i in range(8,18):
427 result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
428 if result==main.TRUE:
429 main.log.info("LOSS IN THE PINGS!")
430 elif result == main.ERROR:
431 main.log.info("There are multiple mininet process running!!")
432 else:
433 main.log.info("No Loss in the pings!")
434 utilities.assert_equals(expect=main.FALSE,actual=result,onpass="No Loss of connectivity!",onfail="LOSS OF CONNECTIVITY")
435 result2 = result
436 result = result1 and not result2
437 utilities.assert_equals(expect=main.FALSE,actual=result,onpass="Link failure is discovered correctly and no traffic is lost!",onfail="Link Discovery failed or traffic was dropped!!!")
438
admin4927d4f2014-07-30 09:47:49 -0700439
adminecb92652014-08-04 09:27:21 -0700440
441 def CASE8 (self, main) :
442 import time
443 main.case("Killing a switch to ensure switch discovery is working properly")
444 main.step("Start continuous pings")
445 main.Mininet2.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'],pingTime=500)
446 main.Mininet2.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'],pingTime=500)
447 main.Mininet2.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'],pingTime=500)
448 main.Mininet2.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'],pingTime=500)
449 main.Mininet2.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'],pingTime=500)
450 main.Mininet2.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'],pingTime=500)
451 main.Mininet2.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'],pingTime=500)
452 main.Mininet2.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'],pingTime=500)
453 main.Mininet2.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'],pingTime=500)
454 main.Mininet2.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'],pingTime=500)
455
456 main.step("Determine the current number of switches and links")
457 (number,active)=main.ONOS1.num_switch(RestIP=main.params['CTRL']['ip1'])
458 links = main.ONOS1.num_link(RestIP=main.params['CTRL']['ip1'])
459 main.log.info("Currently there are %s switches, %s are active, and %s links" %(number,active,links))
460
461 main.step("Kill s28 ")
462 main.Mininet2.del_switch("s28")
463 time.sleep(31)
464 result = main.ONOS1.check_status_report(main.params['CTRL']['ip1'],str(int(active)-1),str(int(links)-4))
465 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Switch Discovery is Working",onfail="Switch Discovery FAILED TO WORK PROPERLY!")
466
467 main.step("Add back s28")
468 main.Mininet2.add_switch("s28")
469 main.Mininet1.assign_sw_controller(sw="28",ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
470 main.Mininet1.assign_sw_controller(sw="28",count=5,ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'])
471 time.sleep(31)
472 result = main.ONOS1.check_status_report(main.params['CTRL']['ip1'],active,links)
473 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Switch Discovery is Working",onfail="Switch Discovery FAILED TO WORK PROPERLY!")
474 result1=result
475
476 main.step("Checking for Traffic Loss")
477 main.Mininet2.pingKill()
478 result = main.FALSE
479 for i in range(8,18):
480 result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
481 if result==main.TRUE:
482 main.log.info("LOSS IN THE PINGS!")
483 elif result == main.ERROR:
484 main.log.info("There are multiple mininet process running!!")
485 else:
486 main.log.info("No Loss in the pings!")
487 utilities.assert_equals(expect=main.FALSE,actual=result,onpass="No Loss of connectivity!",onfail="LOSS OF CONNECTIVITY")
488 result = not result and result1
489 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Switch Discovered Correctly and No Loss of traffic",onfail="Switch discovery failed or there was loss of traffic")
admin4927d4f2014-07-30 09:47:49 -0700490