blob: 8d65f351b25ccf5459bdfbf5b6f4bb88b44f3ae8 [file] [log] [blame]
adminbae64d82013-08-01 10:50:15 -07001
2class OnosPerf4nodes:
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 Cassandra 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.log.report("Checking if the startup was clean")
16 main.case("Checking if the startup was clean...")
17 main.step("Testing startup Zookeeper")
18 main.ONOS1.get_version()
19 data = main.Zookeeper1.isup()
20 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
21 main.step("Testing startup Cassandra")
22 data = main.Cassandra1.isup()
23 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
24 main.ONOS1.drop_keyspace()
25 time.sleep(5)
26 main.ONOS1.start()
27 time.sleep(5)
28 main.ONOS2.start()
29 main.ONOS3.start()
30 main.ONOS4.start()
31 main.step("Testing startup ONOS")
32 data = main.ONOS1.isup()
33 if data == main.FALSE:
34 main.log.info("Something is funny... restarting ONOS")
35 main.ONOS1.stop()
36 time.sleep(3)
37 main.ONOS1.start()
38 time.sleep(5)
39 data = main.ONOS1.isup()
40 data = data & main.ONOS2.isup()
41 data = data & main.ONOS3.isup()
42 data = data & main.ONOS4.isup()
43 main.ONOS1.start_rest()
44 #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
45
46 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running ",onfail="ONOS didn't start ...")
47
48 def CASE2(self,main) :
49 '''
50 Makes sure that the HW links are all up
51 Verifies that at least one mininet host exists.
52 Proves that there is actually a mininet that we are working with
53 '''
54 import time
55 main.step("Checking if MN switches exist")
56 main.log.report("Check if MN switches exist")
57 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
58 for i in range(2):
59 if result == main.FALSE:
60 time.sleep(5)
61 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
62 else:
63 break
64 main.step("Verifying the result")
65 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches and or links...")
66
67
68 def CASE3(self,main) :
69 '''
70 This Test case:
71 - Clears out any leftover flows
72 - Adds new flows into ONOS
73 - Checks flows up to 10 times waiting for each flow to be caluculated and no "NOT" statements inte get_flow
74 '''
75 import time
76 main.log.report("Deleting and adding flows")
77 main.case("Taking care of these flows!")
78 main.step("Cleaning out any leftover flows...")
79 main.log.info("deleting...")
80 main.ONOS1.delete_flow("all")
81 main.log.info("adding...")
82 t1 = time.time()
83 main.ONOS1.add_flow(main.params['FLOWDEF'])
84 main.log.info("Checking...")
85 for i in range(15):
86 result = main.ONOS1.check_flow()
87 if result == main.TRUE:
88 t2 = time.time()
89 main.log.info( 'Adding flows took %0.3f ms' % ((t2-t1)*1000.0))
90 break
91 time.sleep(5)
92 main.log.info("Checking Flows again...")
93 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="flows are good",onfail="FLOWS not correct")
94
95
96 def CASE4(self,main) :
97 '''
98 Tests a single ping
99 '''
100 main.log.report("Testing a single ping")
101 main.case("Testing ping...")
102 ping_result = main.Mininet4.pingHost(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
103 utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
104
105
106 def CASE5(self,main) :
107 '''
108 Starts continuous pings on the Mininet nodes
109 '''
110 main.log.report("Starting continuous ping")
111 import time
112 main.case("Starting long ping... ")
113 main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
114 main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
115 main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
116 main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
117 main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
118 main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
119 main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
120 main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
121 main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
122 main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
123 time.sleep(5)
124 result = main.Mininet4.pingstatus(src=main.params['PING']['source1'])
125 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source2'])
126 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source3'])
127 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source4'])
128 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source5'])
129 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source6'])
130 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source7'])
131 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source8'])
132 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source9'])
133 result = result & main.Mininet4.pingstatus(src=main.params['PING']['source10'])
134 utilities.assert_equals(expect=main.TRUE,actual=result)
135
136
137 def CASE6(self,main) :
138 '''
139 Brings the defined link down and up a certain number of iterations
140 Stops the continuous pings that are running on the mininet machines from CASE 5
141 '''
142 import time
143 import os
144 main.log.report("Links UP/DOWN and stop ping")
145 main.log.case( "Link down number of iterations: " + main.params['Iterations'] )
146 os.popen("echo "" > ~/tools/downtimes.log")
147 for i in range(int(main.params['Iterations'])):
148 main.log.info("Bringing Link down... ")
149 #main.ONOS1.link_down(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
150 main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
151 os.popen("echo `date +%s` >> ~/tools/downtimes.log")
152 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
153 time.sleep( int(main.params['WaitTime']) )
154 main.log.info("Bringing Link up... ")
155 #main.ONOS1.link_up(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
156 main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
157 main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
158 time.sleep( int(main.params['WaitTime']) )
159 main.case("Killing remote ping processes ")
160 result = main.Mininet4.pingKill()
161 utilities.assert_equals(expect=main.TRUE,actual=result)
162
163
164 def CASE7(self,main) :
165 '''
166 Processes all of the ping data and outputs raw data and an overall average
167 '''
168 import os
169 import time
170 main.log.report("Process ping data")
171 main.case("Processing Ping data")
172 time.sleep(3)
173 result=os.popen("/home/admin/tools/shell.sh " + main.params['Iterations']).read()
174 average=result.split(":")[1]
175 main.log.info( "Reroute times are... " )
176 main.log.report( result )
177 try:
178 if float(average) < float(main.params['TargetTime']) :
179 test=main.TRUE
180 else:
181 test=main.FALSE
182 except ValueError:
183 main.log.error("Data is corrupted")
184 test=main.FALSE
185 utilities.assert_equals(expect=main.TRUE,actual=test,onpass="Average is less then the target time!",onfail="Average is worse then target time... ")