blob: 0b732016ee36133ed1c52678dc7c7de75c349c60 [file] [log] [blame]
admincb593912014-04-14 10:34:41 -07001
2class RCOnosPerf4nodes:
3
4 def __init__(self) :
5 self.default = ''
6
7 def CASE1(self,main) :
8 '''
9 First case is to simply check if ONOS, ZK, and RamCloud are all running properly.
10 If ONOS if not running properly, it will restart ONOS once before continuing.
11 It will then check if the ONOS has a view of all the switches and links as defined in the params file.
12 The test will only pass if ONOS is running properly, and has a full view of all topology elements.
13 '''
14 import time
15 main.ONOS1.stop()
16 main.ONOS2.stop()
17 main.ONOS3.stop()
18 main.ONOS4.stop()
adminaef00552014-05-08 09:18:36 -070019 main.RamCloud1.stop_coor()
20 main.RamCloud1.stop_serv()
21 main.RamCloud2.stop_serv()
22 main.RamCloud3.stop_serv()
23 main.RamCloud4.stop_serv()
24 main.ONOS1.handle.sendline("~/ONOS/onos.sh rc deldb")
admin6c96b8e2014-05-15 11:11:58 -070025 main.ONOS1.handle.sendline("y")
adminaef00552014-05-08 09:18:36 -070026 main.ONOS2.handle.sendline("~/ONOS/onos.sh rc deldb")
admin6c96b8e2014-05-15 11:11:58 -070027 main.ONOS2.handle.sendline("y")
adminaef00552014-05-08 09:18:36 -070028 main.ONOS3.handle.sendline("~/ONOS/onos.sh rc deldb")
admin6c96b8e2014-05-15 11:11:58 -070029 main.ONOS3.handle.sendline("y")
adminaef00552014-05-08 09:18:36 -070030 main.ONOS4.handle.sendline("~/ONOS/onos.sh rc deldb")
admin6c96b8e2014-05-15 11:11:58 -070031 main.ONOS4.handle.sendline("y")
adminaef00552014-05-08 09:18:36 -070032 time.sleep(10)
admincb593912014-04-14 10:34:41 -070033 main.RamCloud1.start_coor()
34 main.RamCloud1.start_serv()
35 main.RamCloud2.start_serv()
36 main.RamCloud3.start_serv()
37 main.RamCloud4.start_serv()
admincb593912014-04-14 10:34:41 -070038 main.ONOS1.start()
39 time.sleep(10)
40 main.ONOS2.start()
41 main.ONOS3.start()
42 main.ONOS4.start()
43 main.ONOS1.start_rest()
44 time.sleep(5)
45 test= main.ONOS1.rest_status()
46 if test == main.FALSE:
47 main.ONOS1.start_rest()
48 main.ONOS1.get_version()
49 main.log.report("Startup check Zookeeper1, RamCloud1, and ONOS1 connections")
50 main.case("Checking if the startup was clean...")
51 main.step("Testing startup Zookeeper")
52 data = main.Zookeeper1.isup()
53 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
54 main.step("Testing startup RamCloud")
Jon Halle80ef8c2014-04-29 15:29:13 -070055 data = main.RamCloud1.server_status()
admincb593912014-04-14 10:34:41 -070056 if data == main.FALSE:
57 main.RamCloud1.stop_coor()
58 main.RamCloud1.stop_serv()
59 main.RamCloud2.stop_serv()
60 main.RamCloud3.stop_serv()
61 main.RamCloud4.stop_serv()
62
63 time.sleep(5)
64 main.RamCloud1.start_coor()
65 main.RamCloud1.start_serv()
66 main.RamCloud2.start_serv()
67 main.RamCloud3.start_serv()
68 main.RamCloud4.start_serv()
69 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="RamCloud is up!",onfail="RamCloud is down...")
70 main.step("Testing startup ONOS")
71 data = main.ONOS1.isup()
72 data = data and main.ONOS2.isup()
73 data = data and main.ONOS3.isup()
74 data = data and main.ONOS4.isup()
75 if data == main.FALSE:
76 main.log.report("Something is funny... restarting ONOS")
77 main.ONOS1.stop()
78 main.ONOS2.stop()
79 main.ONOS3.stop()
80 main.ONOS4.stop()
81 time.sleep(5)
82 main.ONOS1.start()
83 time.sleep(10)
84 main.ONOS2.start()
85 main.ONOS3.start()
86 main.ONOS4.start()
87 data = main.ONOS1.isup()
88 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
89
90 def CASE2(self,main) :
91 '''
92 Makes sure that the HW links are all up
93 Verifies that at least one mininet host exists.
94 Proves that there is actually a mininet that we are working with
95 '''
96 import time
97 main.step("Checking if MN switches exist")
98 main.log.report("Check if MN switches exist")
99 #result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
100 #for i in range(2):
101 # if result == main.FALSE:
102 # time.sleep(5)
103 # result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
104 # else:
105 # break
106 #main.step("Verifying the result")
107 #utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches and or links...")
108
109 main.step("assigning ONOS controllers to switches")
110 for i in range(25):
111 if i < 3:
112 j=i+1
113 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
114 time.sleep(1)
115 main.Mininet1.assign_sw_controller(sw=str(j),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'])
116 elif i >= 3 and i < 5:
117 j=i+1
118 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
119 time.sleep(1)
120 main.Mininet1.assign_sw_controller(sw=str(j),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'])
121 elif i >= 5 and i < 15:
122 j=i+1
123 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
124 time.sleep(1)
125 main.Mininet1.assign_sw_controller(sw=str(j),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'])
126 else:
127 j=i+16
128 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
129 time.sleep(1)
130 main.Mininet1.assign_sw_controller(sw=str(j),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'])
131 main.Mininet1.get_sw_controller("s1")
132 time.sleep(5)
133
134 def CASE3(self,main) :
135 '''
136 Verifies that ONOS sees the right topology...
137 '''
138 import time
139 main.log.report("checking if ONOS sees the right topo...")
140 main.case("TOPO check")
141 main.step("calling rest calls")
142 for i in range(4):
143 result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
144 time.sleep(5)
145 if result == 1:
146 break
147 if result == 0:
148 main.ONOS1.start()
149 main.ONOS2.start()
150 main.ONOS3.start()
151 main.ONOS4.start()
152 time.sleep(45)
153 for i in range(4):
154 result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
155 time.sleep(5)
156 if result == 1:
157 break
158 utilities.assert_equals(expect=1,actual=result)
159
160 def CASE4(self,main) :
161 '''
162 This Test case:
163 - Clears out any leftover flows
164 - Adds new flows into ONOS
165 - Checks flows up to 10 times waiting for each flow to be caluculated and no "NOT" statements inte get_flow
166 '''
167 import time
168 main.log.report("Deleting and adding flows")
169 main.case("Taking care of these flows!")
170 main.step("Cleaning out any leftover flows...")
171 main.log.info("deleting...")
Jon Halle80ef8c2014-04-29 15:29:13 -0700172 main.ONOS1.rm_flow()
173 # main.ONOS1.delete_flow("all")
admincb593912014-04-14 10:34:41 -0700174 main.log.info("adding...")
175 t1 = time.time()
Jon Halle80ef8c2014-04-29 15:29:13 -0700176 main.ONOS1.ad_flow()
177 # main.ONOS1.add_flow(main.params['FLOWDEF'])
admincb593912014-04-14 10:34:41 -0700178 main.log.info("Checking...")
179 for i in range(15):
180 result = main.ONOS1.check_flow()
181 if result == main.TRUE:
182 t2 = time.time()
183 main.log.info( 'Adding flows took %0.3f s' % (t2-t1))
184 break
185 time.sleep(5)
186 main.log.info("Checking Flows again...")
187
188 strtTime = time.time()
189 count = 1
190 i = 6
191 while i < 16 :
192 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
193 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
194 if ping == main.FALSE and count < 3:
195 count = count + 1
196 i = 6
197 main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
198 time.sleep(10)
199 elif ping == main.FALSE and count ==3:
200 main.log.error("Ping test failed")
201 i = 17
202 result = main.FALSE
203 elif ping == main.TRUE:
204 i = i + 1
205 result = main.TRUE
206 endTime = time.time()
207 if result == main.TRUE:
208 main.log.info("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
209 else:
210 main.log.info("\tPING TEST FAIL")
211
212 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="flows are good",onfail="FLOWS not correct")
213
214 main.log.report("checking if ONOS sees the right topo...")
215 main.case("TOPO check")
216 main.step("calling rest calls")
217 for i in range(3):
218 result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
219 time.sleep(5)
220 if result == 1:
221 break
222
223 def CASE5(self,main) :
224 '''
225 Tests a single ping
226 '''
227 main.log.report("Testing a single ping")
228 main.case("Testing ping...")
229 ping_result = main.Mininet4.pingHost(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
230 utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
231
232
233 def CASE6(self,main) :
234 '''
235 Starts continuous pings on the Mininet nodes
236 '''
237 main.log.report("Starting continuous ping, then toggle a single link in the center triangle")
238 import time
239 import os
240 main.case("Starting long ping... ")
241 main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
242 main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
243 main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
244 main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
245 main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
246 main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
247 main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
248 main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
249 main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
250 main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
251 main.step("Check that the pings are going")
252 result = main.Mininet4.pingstatus(src=main.params['PING']['source1'])
253 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source2'])
254 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source3'])
255 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source4'])
256 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source5'])
257 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source6'])
258 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source7'])
259 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source8'])
260 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source9'])
261 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source10'])
262 main.step( "Link down number of iterations: " + main.params['Iterations'] )
263 for i in range(int(main.params['Iterations'])):
264 main.log.info("Bringing Link down... ")
265 main.Mininet1.link(END1="s1",END2="s2",OPTION="down")
266 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
267 time.sleep( int(main.params['WaitTime']) )
268 main.log.info("Bringing Link up... ")
269 main.Mininet1.link(END1="s1",END2="s2",OPTION="up")
270 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
271 time.sleep( int(main.params['WaitTime']) )
272 main.case("Killing remote ping processes ")
273 result = result & main.Mininet4.pingKill()
274 utilities.assert_equals(expect=main.TRUE,actual=result)
275
276
277 def CASE7(self,main) :
278 '''
279 Processes all of the ping data and outputs raw data and an overall average
280 '''
281 import os
282 import time
283 main.log.report("Process ping data (Fail is time is >20 seconds)")
284 main.case("Processing Ping data")
285 time.sleep(3)
286 #result=os.popen("/home/admin/tools/shell.sh " + main.params['Iterations']).read()
287 try:
288 result=os.popen("/home/admin/ONLabTest/TestON/scripts/get_reroute_times.py").read()
289 average=result.split(":")[1]
290 main.log.info( "Reroute times are... " )
291 main.log.report( result + " seconds" )
292 try:
293 if float(average) < float(main.params['TargetTime']) :
294 test=main.TRUE
295 else:
296 test=main.FALSE
297 except ValueError:
298 main.log.error("Data is corrupted")
299 test=main.FALSE
300 except:
301 main.log.report("No data")
302 test=main.FALSE
303 utilities.assert_equals(expect=main.TRUE,actual=test,onpass="Average is less then the target time!",onfail="Average is worse then target time... ")
304
305 def CASE8(self,main) :
306 '''
307 Starts continuous pings on the Mininet nodes
308 '''
309 main.log.report("Start continuous pings, then toggle multiple links in center triangle")
310 import time
311 import os
312 time.sleep(20)
313 main.case("Starting long ping... ")
314 main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
315 main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
316 main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
317 main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
318 main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
319 main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
320 main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
321 main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
322 main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
323 main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
324 main.step("Check that the pings are going")
325 result = main.Mininet4.pingstatus(src=main.params['PING']['source1'])
326 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source2'])
327 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source3'])
328 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source4'])
329 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source5'])
330 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source6'])
331 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source7'])
332 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source8'])
333 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source9'])
334 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source10'])
335 main.step( "Making topo change while flows are rerouting")
336 main.step( "Link down number of iterations: " + main.params['Iterations'] )
337 for i in range(int(main.params['Iterations'])):
338 main.log.info("s1-s2 link down")
339 main.Mininet1.link(END1="s1",END2="s2",OPTION="down")
340 main.Mininet1.link(END1="s1",END2="s3",OPTION="up")
341 main.Mininet1.link(END1="s2",END2="s3",OPTION="up")
342
343 time.sleep(5)
344
345 main.log.info("s1-s2 link up | s1-s3 link down | s2-s3 link down")
346 main.Mininet1.link(END1="s1",END2="s2",OPTION="up")
347 main.Mininet1.link(END1="s1",END2="s3",OPTION="down")
348 main.Mininet1.link(END1="s2",END2="s3",OPTION="down")
349
350 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
351 time.sleep( int(main.params['WaitTime']) + 60 )
352
353 main.case("Killing remote ping processes ")
354 result = result & main.Mininet4.pingKill()
355 utilities.assert_equals(expect=main.TRUE,actual=result)
356 main.log.info("Make sure all links in triangle are up")
357 main.Mininet1.link(END1="s1",END2="s2",OPTION="up")
358 main.Mininet1.link(END1="s1",END2="s3",OPTION="up")
359 main.Mininet1.link(END1="s2",END2="s3",OPTION="up")
360
361 def CASE9(self,main) :
362 '''
363 Starts continuous pings on the Mininet nodes
364 '''
365 main.log.report("Start continuous pings, then toggle one link in center triangle and start/stop 1 ONOS node")
366 import time
367 import os
368
369 time.sleep(20)
370 main.case("Starting long ping... ")
371 main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
372 main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
373 main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
374 main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
375 main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
376 main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
377 main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
378 main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
379 main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
380 main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
381 main.step("Check that the pings are going")
382 result = main.Mininet4.pingstatus(src=main.params['PING']['source1'])
383 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source2'])
384 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source3'])
385 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source4'])
386 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source5'])
387 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source6'])
388 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source7'])
389 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source8'])
390 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source9'])
391 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source10'])
392 main.step( "Making topo change while flows are rerouting")
393 main.step( "Link down number of iterations: " + main.params['Iterations'] )
394 for i in range(int(main.params['Iterations'])):
395 main.log.info("s1-s2 link down | Onos 1 down")
396 main.Mininet1.link(END1="s1",END2="s2",OPTION="down")
397 if i % 4 == 0:
398 main.ONOS1.stop()
399 elif i % 4 == 1:
400 main.ONOS2.stop()
401 elif i % 4 == 2:
402 main.ONOS3.stop()
403 else:
404 main.ONOS4.stop()
405
406 time.sleep(5)
407
408 main.log.info("s1-s2 link up | Onos 1 back up")
409 main.Mininet1.link(END1="s1",END2="s2",OPTION="up")
410 if i % 4 == 0:
411 main.ONOS1.start()
412 main.ONOS1.isup()
413 elif i % 4 == 1:
414 main.ONOS2.start()
415 main.ONOS2.isup()
416 elif i % 4 == 2:
417 main.ONOS3.start()
418 main.ONOS3.isup()
419 else:
420 main.ONOS4.start()
421 main.ONOS4.isup()
422
423 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
424 time.sleep( int(main.params['WaitTime']) )
425
426 main.case("Killing remote ping processes ")
427 result = result & main.Mininet4.pingKill()
428 utilities.assert_equals(expect=main.TRUE,actual=result)
429