blob: 6b4221a55e10f475b8fea5bb4fe52cf4f079f326 [file] [log] [blame]
adminbae64d82013-08-01 10:50:15 -07001
2class OnosCHO4nodes :
3
4 def __init__(self) :
5 self.default = ''
6
7#**********************************************************************************************************************************************************************************************
8#Test startup
9#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
10 def CASE1(self,main) : #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
adminbae64d82013-08-01 10:50:15 -070011 import time
admin530b4c92013-08-14 16:54:35 -070012 main.ONOS1.stop()
13 main.ONOS2.stop()
14 main.ONOS3.stop()
15 main.ONOS4.stop()
admin4a58db92013-09-30 12:04:54 -070016 main.Cassandra1.start()
17 main.Cassandra2.start()
18 main.Cassandra3.start()
19 main.Cassandra4.start()
20 time.sleep(20)
21 main.ONOS1.drop_keyspace()
22 main.ONOS1.start()
23 time.sleep(10)
24 main.ONOS2.start()
25 main.ONOS3.start()
26 main.ONOS4.start()
27 main.ONOS1.start_rest()
28 time.sleep(5)
29 test= main.ONOS1.rest_status()
30 if test == main.FALSE:
31 main.ONOS1.start_rest()
32 main.ONOS1.get_version()
33 main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
34 main.case("Checking if the startup was clean...")
35 main.step("Testing startup Zookeeper")
36 data = main.Zookeeper1.isup()
37 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
38 main.step("Testing startup Cassandra")
39 data = main.Cassandra1.isup()
admin530b4c92013-08-14 16:54:35 -070040 if data == main.FALSE:
41 main.Cassandra1.stop()
42 main.Cassandra2.stop()
43 main.Cassandra3.stop()
44 main.Cassandra4.stop()
45
46 time.sleep(5)
admin4a58db92013-09-30 12:04:54 -070047
admin530b4c92013-08-14 16:54:35 -070048 main.Cassandra1.start()
49 main.Cassandra2.start()
50 main.Cassandra3.start()
51 main.Cassandra4.start()
adminbae64d82013-08-01 10:50:15 -070052 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
53 main.step("Testing startup ONOS")
admin4a58db92013-09-30 12:04:54 -070054 data = main.ONOS1.isup()
55 data = data and main.ONOS2.isup()
56 data = data and main.ONOS3.isup()
57 data = data and main.ONOS4.isup()
58 if data == main.FALSE:
59 main.log.report("Something is funny... restarting ONOS")
60 main.ONOS1.stop()
61 main.ONOS2.stop()
62 main.ONOS3.stop()
63 main.ONOS4.stop()
64 time.sleep(5)
65 main.ONOS1.start()
66 time.sleep(10)
67 main.ONOS2.start()
68 main.ONOS3.start()
69 main.ONOS4.start()
70 data = main.ONOS1.isup()
71 #main.ONOS1.tcpdump()
72 #main.ONOS2.tcpdump()
73 #main.ONOS3.tcpdump()
74 #main.ONOS4.tcpdump()
adminbae64d82013-08-01 10:50:15 -070075 utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
76
77#**********************************************************************************************************************************************************************************************
78#Assign Controllers
79#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
80#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
81#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
82# the controllers already assigned to the switch are not specified.
83
84 def CASE2(self,main) : #Make sure mininet exists, then assign controllers to switches
85 import time
86 main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
87 main.case("Checking if one MN host exists")
88 main.step("Host IP Checking using checkIP")
89 result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
90 main.step("Verifying the result")
91 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
92 main.step("assigning ONOS controllers to switches")
93 for i in range(25):
94 if i < 3:
95 j=i+1
admin530b4c92013-08-14 16:54:35 -070096 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
97 time.sleep(1)
98 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'])
adminbae64d82013-08-01 10:50:15 -070099 elif i >= 3 and i < 5:
100 j=i+1
admin530b4c92013-08-14 16:54:35 -0700101 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
102 time.sleep(1)
103 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'])
adminbae64d82013-08-01 10:50:15 -0700104 elif i >= 5 and i < 15:
105 j=i+1
admin530b4c92013-08-14 16:54:35 -0700106 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
107 time.sleep(1)
108 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'])
adminbae64d82013-08-01 10:50:15 -0700109 else:
110 j=i+16
admin530b4c92013-08-14 16:54:35 -0700111 main.Mininet1.assign_sw_controller(sw=str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
112 time.sleep(1)
113 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'])
adminbae64d82013-08-01 10:50:15 -0700114 main.Mininet1.get_sw_controller("s1")
admin4a58db92013-09-30 12:04:54 -0700115
116 for i in range(9):
117 if result == main.FALSE:
118 time.sleep(3)
119 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
120 else:
121 break
adminbae64d82013-08-01 10:50:15 -0700122
123# **********************************************************************************************************************************************************************************************
124#Add Flows
125#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
126#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
127
128 def CASE3(self,main) : #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
129 main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
130 import time
admin4a58db92013-09-30 12:04:54 -0700131
132 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
133 for i in range(9):
134 if result == main.FALSE:
135 time.sleep(3)
136 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
137 else:
138 break
139
adminbae64d82013-08-01 10:50:15 -0700140 main.case("Taking care of these flows!")
141 main.step("Cleaning out any leftover flows...")
142 main.ONOS1.delete_flow("all")
143 time.sleep(5)
144 strtTime = time.time()
145 main.ONOS1.add_flow(main.params['FLOWDEF'])
146 main.case("Checking flows")
147 tmp = main.FALSE
148 count = 1
admine0ae8202013-08-28 11:51:43 -0700149 main.log.info("Wait for flows to be pushed to the switches, then check")
adminbae64d82013-08-01 10:50:15 -0700150 while tmp == main.FALSE:
151 main.step("Waiting")
152 time.sleep(10)
153 main.step("Checking")
154 tmp = main.ONOS1.check_flow()
155 if tmp == main.FALSE and count < 6:
156 count = count + 1
157 main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
158 elif tmp == main.FALSE and count == 6:
admin530b4c92013-08-14 16:54:35 -0700159 result1 = main.FALSE
adminbae64d82013-08-01 10:50:15 -0700160 break
161 else:
admin530b4c92013-08-14 16:54:35 -0700162 result1 = main.TRUE
adminbae64d82013-08-01 10:50:15 -0700163 break
164 endTime = time.time()
admin530b4c92013-08-14 16:54:35 -0700165 if result1 == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700166 main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
adminbae64d82013-08-01 10:50:15 -0700167 else:
168 main.log.report("\tFlows failed check")
admin530b4c92013-08-14 16:54:35 -0700169
admin530b4c92013-08-14 16:54:35 -0700170 count = 1
171 i = 6
172 while i < 16 :
173 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
174 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
175 if ping == main.FALSE and count < 3:
176 count = count + 1
177 i = 6
admin4a58db92013-09-30 12:04:54 -0700178 main.log.report("Ping failed, making attempt number "+str(count)+" in 10 seconds")
admin530b4c92013-08-14 16:54:35 -0700179 time.sleep(10)
180 elif ping == main.FALSE and count ==3:
181 main.log.error("Ping test failed")
182 i = 17
183 result2 = main.FALSE
184 elif ping == main.TRUE:
185 i = i + 1
186 result2 = main.TRUE
admin530b4c92013-08-14 16:54:35 -0700187 if result2 == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700188 main.log.info("Flows successfully added")
admin530b4c92013-08-14 16:54:35 -0700189 else:
190 main.log.report("\tPING TEST FAIL")
191
admin530b4c92013-08-14 16:54:35 -0700192 main.step("Verifying the result")
admin4a58db92013-09-30 12:04:54 -0700193 utilities.assert_equals(expect=main.TRUE,actual=result1 and result2,onpass="Flow check PASS",onfail="Flow check FAIL")
adminbae64d82013-08-01 10:50:15 -0700194
195#**********************************************************************************************************************************************************************************************
196#This test case removes Controllers 2,3, and 4 then performs a ping test.
197#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
admin530b4c92013-08-14 16:54:35 -0700198#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 5 seconds before trying again.
adminbae64d82013-08-01 10:50:15 -0700199#If the ping test fails 6 times, then the test case will return false
200
201 def CASE4(self,main) :
admin4a58db92013-09-30 12:04:54 -0700202 main.log.report("Remove all but one ONOS then ping until all hosts are reachable or fail after 6 attempts")
adminbae64d82013-08-01 10:50:15 -0700203 import time
admine0ae8202013-08-28 11:51:43 -0700204 import random
205
206 random.seed(None)
207
admin4a58db92013-09-30 12:04:54 -0700208 num = random.randint(1,4)
209 if num == 1:
admine0ae8202013-08-28 11:51:43 -0700210 ip = main.params['CTRL']['ip1']
211 port = main.params['CTRL']['port1']
admin4a58db92013-09-30 12:04:54 -0700212 elif num == 2:
admine0ae8202013-08-28 11:51:43 -0700213 ip = main.params['CTRL']['ip2']
214 port = main.params['CTRL']['port2']
admin4a58db92013-09-30 12:04:54 -0700215 elif num == 3:
admine0ae8202013-08-28 11:51:43 -0700216 ip = main.params['CTRL']['ip3']
217 port = main.params['CTRL']['port3']
admin4a58db92013-09-30 12:04:54 -0700218 else:
admine0ae8202013-08-28 11:51:43 -0700219 ip = main.params['CTRL']['ip4']
220 port = main.params['CTRL']['port4']
221
admin4a58db92013-09-30 12:04:54 -0700222 main.log.report("ONOS"+str(num)+" will be the sole controller")
adminbae64d82013-08-01 10:50:15 -0700223 for i in range(25):
224 if i < 15:
225 j=i+1
admine0ae8202013-08-28 11:51:43 -0700226 main.Mininet1.assign_sw_controller(sw=str(j),ip1=ip,port1=port) #Assigning a single controller removes all other controllers
adminbae64d82013-08-01 10:50:15 -0700227 else:
228 j=i+16
admine0ae8202013-08-28 11:51:43 -0700229 main.Mininet1.assign_sw_controller(sw=str(j),ip1=ip,port1=port)
admin4a58db92013-09-30 12:04:54 -0700230
231 strtTime = time.time()
admin530b4c92013-08-14 16:54:35 -0700232 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
admin4a58db92013-09-30 12:04:54 -0700233 for i in range(9):
admin530b4c92013-08-14 16:54:35 -0700234 if result == main.FALSE:
admin4a58db92013-09-30 12:04:54 -0700235 time.sleep(3)
admin530b4c92013-08-14 16:54:35 -0700236 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
237 else:
238 break
239
adminbae64d82013-08-01 10:50:15 -0700240 count = 1
241 i = 6
242 while i < 16 :
243 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
244 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
245 if ping == main.FALSE and count < 6:
246 count = count + 1
247 i = 6
admin4a58db92013-09-30 12:04:54 -0700248 main.log.report("Ping failed, making attempt number "+str(count)+" in 5 seconds")
admin530b4c92013-08-14 16:54:35 -0700249 time.sleep(5)
adminbae64d82013-08-01 10:50:15 -0700250 elif ping == main.FALSE and count ==6:
251 main.log.error("Ping test failed")
252 i = 17
253 result = main.FALSE
254 elif ping == main.TRUE:
255 i = i + 1
256 result = main.TRUE
257 endTime = time.time()
258 if result == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700259 main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
adminbae64d82013-08-01 10:50:15 -0700260 else:
261 main.log.report("\tPING TEST FAIL")
262 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
263
264# **********************************************************************************************************************************************************************************************
265#This test case restores the controllers removed by Case 4 then performs a ping test.
266
267 def CASE5(self,main) :
268 main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
269 import time
270 for i in range(25):
271 if i < 15:
272 j=i+1
admin530b4c92013-08-14 16:54:35 -0700273 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'])
adminbae64d82013-08-01 10:50:15 -0700274 else:
275 j=i+16
admin530b4c92013-08-14 16:54:35 -0700276 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'])
admin4a58db92013-09-30 12:04:54 -0700277
278 strtTime = time.time()
admin530b4c92013-08-14 16:54:35 -0700279 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
admin4a58db92013-09-30 12:04:54 -0700280 for i in range(9):
admin530b4c92013-08-14 16:54:35 -0700281 if result == main.FALSE:
admin4a58db92013-09-30 12:04:54 -0700282 time.sleep(3)
admin530b4c92013-08-14 16:54:35 -0700283 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
284 else:
285 break
286
adminbae64d82013-08-01 10:50:15 -0700287 count = 1
288 i = 6
289 while i < 16 :
290 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
291 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
292 if ping == main.FALSE and count < 6:
293 count = count + 1
294 i = 6
admin4a58db92013-09-30 12:04:54 -0700295 main.log.report("Ping failed, making attempt number "+str(count)+" in 5 seconds")
admin530b4c92013-08-14 16:54:35 -0700296 time.sleep(5)
adminbae64d82013-08-01 10:50:15 -0700297 elif ping == main.FALSE and count ==6:
298 main.log.error("Ping test failed")
299 i = 17
300 result = main.FALSE
301 elif ping == main.TRUE:
302 i = i + 1
303 result = main.TRUE
304 endTime = time.time()
305 if result == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700306 main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
adminbae64d82013-08-01 10:50:15 -0700307 else:
308 main.log.report("\tPING TEST FAILED")
309 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
310
311# **********************************************************************************************************************************************************************************************
312#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
313
314 def CASE6(self,main) :
admine0ae8202013-08-28 11:51:43 -0700315 main.log.report("Bring Link between s1 and s2 down, then ping until all hosts are reachable or fail after 10 attempts")
adminbae64d82013-08-01 10:50:15 -0700316 import time
317 main.case("Bringing Link down... ")
318 result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
adminbae64d82013-08-01 10:50:15 -0700319 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
admine0ae8202013-08-28 11:51:43 -0700320
admin4a58db92013-09-30 12:04:54 -0700321 strtTime = time.time()
admin530b4c92013-08-14 16:54:35 -0700322 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
admin4a58db92013-09-30 12:04:54 -0700323 for i in range(9):
admin530b4c92013-08-14 16:54:35 -0700324 if result == main.FALSE:
admin4a58db92013-09-30 12:04:54 -0700325 time.sleep(3)
admin530b4c92013-08-14 16:54:35 -0700326 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],str(int(main.params['NR_Links'])-2))
327 else:
328 break
329
adminbae64d82013-08-01 10:50:15 -0700330 count = 1
331 i = 6
332 while i < 16 :
333 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
334 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
admine0ae8202013-08-28 11:51:43 -0700335 if ping == main.FALSE and count < 10:
adminbae64d82013-08-01 10:50:15 -0700336 count = count + 1
admin4a58db92013-09-30 12:04:54 -0700337 main.log.report("Ping failed, making attempt number "+str(count)+" in 5 seconds")
adminbae64d82013-08-01 10:50:15 -0700338 i = 6
admin530b4c92013-08-14 16:54:35 -0700339 time.sleep(5)
admine0ae8202013-08-28 11:51:43 -0700340 elif ping == main.FALSE and count == 10:
adminbae64d82013-08-01 10:50:15 -0700341 main.log.error("Ping test failed")
342 i = 17
343 result = main.FALSE
344 elif ping == main.TRUE:
345 i = i + 1
346 result = main.TRUE
347 endTime = time.time()
348 if result == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700349 main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
adminbae64d82013-08-01 10:50:15 -0700350 else:
351 main.log.report("\tPING TEST FAILED")
352 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
353
354# **********************************************************************************************************************************************************************************************
355#Brings the link that Case 6 took down back up, then runs a ping test to view reroute time
356
357 def CASE7(self,main) :
admine0ae8202013-08-28 11:51:43 -0700358 main.log.report("Bring Link between s1 and s2 up, then ping until all hosts are reachable or fail after 10 attempts")
adminbae64d82013-08-01 10:50:15 -0700359 import time
admin530b4c92013-08-14 16:54:35 -0700360 main.case("Bringing Link up... ")
361 result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
admin530b4c92013-08-14 16:54:35 -0700362 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link UP!",onfail="Link not brought up...")
admin4a58db92013-09-30 12:04:54 -0700363
364 strtTime = time.time()
admin530b4c92013-08-14 16:54:35 -0700365 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
admin4a58db92013-09-30 12:04:54 -0700366 for i in range(9):
admin530b4c92013-08-14 16:54:35 -0700367 if result == main.FALSE:
admin4a58db92013-09-30 12:04:54 -0700368 time.sleep(3)
admin530b4c92013-08-14 16:54:35 -0700369 result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
370 else:
371 break
372
adminbae64d82013-08-01 10:50:15 -0700373 strtTime = time.time()
374 count = 1
375 i = 6
376 while i < 16 :
377 main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
378 ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
admine0ae8202013-08-28 11:51:43 -0700379 if ping == main.FALSE and count < 10:
adminbae64d82013-08-01 10:50:15 -0700380 count = count + 1
admin4a58db92013-09-30 12:04:54 -0700381 main.log.report("Ping failed, making attempt number "+str(count)+" in 5 seconds")
adminbae64d82013-08-01 10:50:15 -0700382 i = 6
admin530b4c92013-08-14 16:54:35 -0700383 time.sleep(5)
admin4a58db92013-09-30 12:04:54 -0700384 elif ping == main.FALSE and count ==10:
adminbae64d82013-08-01 10:50:15 -0700385 main.log.error("Ping test failed")
386 i = 17
387 result = main.FALSE
388 elif ping == main.TRUE:
389 i = i + 1
390 result = main.TRUE
391 endTime = time.time()
392 if result == main.TRUE:
admin4a58db92013-09-30 12:04:54 -0700393 main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
adminbae64d82013-08-01 10:50:15 -0700394 else:
395 main.log.report("\tPING TESTS FAILED")
396 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
397
admin530b4c92013-08-14 16:54:35 -0700398
399# ******************************************************************************************************************************************************************
400# Test Device Discovery function by yanking s6:s6-eth0 interface and re-plug it into a switch
401
402 def CASE21(self,main) :
403 import json
404 from drivers.common.api.onosrestapidriver import *
405 main.log.report("Test device discovery function, by attach/detach/move host h1 from s1->s6->s1.")
406 main.log.report("Check initially hostMAC exist on the mininet...")
407 host = main.params['YANK']['hostname']
408 mac = main.params['YANK']['hostmac']
409 RestIP1 = main.params['RESTCALL']['restIP1']
410 RestIP2 = main.params['RESTCALL']['restIP2']
411 RestPort = main.params['RESTCALL']['restPort']
412 url = main.params['RESTCALL']['restURL']
413 #print "host=" + host + "; RestIP=" + RestIP1 + "; RestPort=" + str(RestPort)
414
415 main.log.info("\n\t\t\t\t ping issue one ping from" + str(host) + "to generate arp to switch. Ping result is not important" )
416 ping = main.Mininet1.pingHost(src = str(host),target = "10.0.0.254")
417 restcall = OnosRestApiDriver()
418 Reststatus, Hoststatus = restcall.find_host(RestIP1,RestPort,url,mac)
419 try:
420 attachedSW = Hoststatus[0]['attachmentPoint'][0]['switchDPID']
admin4a58db92013-09-30 12:04:54 -0700421 ip_found = Hoststatus[0]['ipv4'][0]
422 except:
admin530b4c92013-08-14 16:54:35 -0700423 Reststatus = 0
admin4a58db92013-09-30 12:04:54 -0700424
admin530b4c92013-08-14 16:54:35 -0700425 if Reststatus == 1:
426 main.log.report("\tFound host " + host + " attached to switchDPID = " + attachedSW)
admin4a58db92013-09-30 12:04:54 -0700427 if ip_found != None:
428 main.log.report("\t IP discovered is ip_found ( " + ip_found + " ).")
429 result = main.TRUE
430 else:
431 main.log.report("\t Found host attached to switch, but no IP address discovered.")
432 result = main.FALSE
admin530b4c92013-08-14 16:54:35 -0700433 else:
434 main.log.report("\t Host " + host + " with MAC:" + str(mac) + " does not exist. FAILED")
435 result = main.FALSE
436
437 ##### Step to yank out "s1-eth1" from s1, which is on autoONOS1 #####
438
439 main.log.report("Yank out s1-eth1")
440 main.case("Yankout s6-eth1 (link to h1) from s1")
441 result = main.Mininet1.yank(SW=main.params['YANK']['sw1'],INTF=main.params['YANK']['intf'])
442 time.sleep(3)
443 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Yank command suceeded",onfail="Yank command failed...")
444 ping = main.Mininet1.pingHost(src = str(host),target = "10.0.0.254")
445 Reststatus, Hoststatus = restcall.find_host(RestIP1,RestPort,url,mac)
446 try:
447 attachedSW = Hoststatus[0]['attachmentPoint'][0]['switchDPID']
admin4a58db92013-09-30 12:04:54 -0700448 except:
admin530b4c92013-08-14 16:54:35 -0700449 Reststatus = 0
450 if Reststatus == 0:
451 main.log.report("Attempt to yank out s1-eth1 from s1 sucessfully")
452 result = main.TRUE
453 else:
454 main.log.report("Attempt to yank out s1-eht1 from s1 failed.")
455 result = main.FALSE
456
457 ##### Step to plug "s1-eth1" to s6, which is on autoONOS3 ######
458 main.log.report("Plug s1-eth1 into s6")
459 main.case("Plug s1-eth1 to s6")
460 result = main.Mininet1.plug(SW=main.params['PLUG']['sw6'],INTF=main.params['PLUG']['intf'])
461 time.sleep(3)
462 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Plug command suceeded",onfail="Plug command failed...")
463 ping = main.Mininet1.pingHost(src = str(host),target = "10.0.0.254")
464 Reststatus, Hoststatus = restcall.find_host(RestIP2,RestPort,url,mac)
465 try:
466 attachedSW = Hoststatus[0]['attachmentPoint'][0]['switchDPID']
admin4a58db92013-09-30 12:04:54 -0700467 ip_found = Hoststatus[0]['ipv4'][0]
468 except:
admin530b4c92013-08-14 16:54:35 -0700469 Reststatus = 0
470 if Reststatus == 0:
471 main.log.report("Attempt to plug s1-eth1 to s6 FAILED")
472 result = main.FALSE
473 elif attachedSW == "00:00:00:00:00:00:00:06":
474 main.log.report("Attempt to plug s1-eht1 to s6 succeded.")
admin4a58db92013-09-30 12:04:54 -0700475 if ip_found != None:
476 main.log.report("\t IP discovered is ip_found ( " + ip_found + " ).")
477 result = main.TRUE
478 else:
479 main.log.report("\t Found host attached to switch, but no IP address discovered.")
480 result = main.FALSE
admin530b4c92013-08-14 16:54:35 -0700481 else:
482 main.log.report( "FAILED to attach s1-eth1 to s6 correctly!")
483 result = main.FALSE
484
485 ###### Step to put interface "s1-eth1" back to s1"#####
486 main.log.report("Move s1-eth1 back on to s1")
487 main.case("Move s1-eth1 back to s1")
488 result = main.Mininet1.yank(SW=main.params['YANK']['sw6'],INTF=main.params['YANK']['intf'])
489 time.sleep(3)
490 retult = main.Mininet1.plug(SW=main.params['PLUG']['sw1'],INTF=main.params['PLUG']['intf'])
491 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Yank/Plug command suceeded",onfail="Yank/Plug command failed...")
492 ping = main.Mininet1.pingHost(src = str(host),target = "10.0.0.254")
493 Reststatus, Hoststatus = restcall.find_host(RestIP1,RestPort,url,mac)
494 try:
495 attachedSW = Hoststatus[0]['attachmentPoint'][0]['switchDPID']
admin4a58db92013-09-30 12:04:54 -0700496 ip_found = Hoststatus[0]['ipv4'][0]
497 except:
admin530b4c92013-08-14 16:54:35 -0700498 Reststatus = 0
499 if Reststatus == 0:
500 main.log.report("Attempt to plug s1-eth1 back to s1 FAILED")
501 result = main.FALSE
502 elif attachedSW == "00:00:00:00:00:00:00:01":
503 main.log.report("Attempt to plug s1-eht1 back to s1 succeded.")
admin4a58db92013-09-30 12:04:54 -0700504 if ip_found != None:
505 main.log.report("\t IP discovered is ip_found ( " + ip_found + " ).")
506 result = main.TRUE
507 else:
508 main.log.report("\t Found host attached to switch, but no IP address discovered.")
509 result = main.FALSE
admin530b4c92013-08-14 16:54:35 -0700510 else:
511 main.log.report( "FAIL to attach s1-eth1 to s1 correctly!")
512 result = main.FALSE
513
514 utilities.assert_equals(expect=main.TRUE,actual=result,onpass="DEVICE DISCOVERY TEST PASSED PLUG/UNPLUG/MOVE TEST",onfail="DEVICE DISCOVERY TEST FAILED")
515
516
admin4a58db92013-09-30 12:04:54 -0700517
518