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