blob: 0a620f2936980c99354b2c5f9941b728ed858e1f [file] [log] [blame]
adminbae64d82013-08-01 10:50:15 -07001#!/usr/bin/env python
2'''
James Leec9cacaf2014-04-08 09:17:39 -07003Created on 31-May-2013
adminbae64d82013-08-01 10:50:15 -07004
James Leec9cacaf2014-04-08 09:17:39 -07005@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
adminbae64d82013-08-01 10:50:15 -07006
James Leec9cacaf2014-04-08 09:17:39 -07007TestON is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
adminbae64d82013-08-01 10:50:15 -070011
James Leec9cacaf2014-04-08 09:17:39 -070012TestON is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
adminbae64d82013-08-01 10:50:15 -070016
James Leec9cacaf2014-04-08 09:17:39 -070017You should have received a copy of the GNU General Public License
18along with TestON. If not, see <http://www.gnu.org/licenses/>.
adminbae64d82013-08-01 10:50:15 -070019
20
James Leec9cacaf2014-04-08 09:17:39 -070021'''
adminbae64d82013-08-01 10:50:15 -070022import time
23import pexpect
24import struct, fcntl, os, sys, signal
adminbae64d82013-08-01 10:50:15 -070025import re
26import json
Jon Hallf89c8552014-04-02 13:14:06 -070027import traceback
admin2a9548d2014-06-17 14:08:07 -070028import urllib2
29from urllib2 import URLError, HTTPError
adminbae64d82013-08-01 10:50:15 -070030sys.path.append("../")
31from drivers.common.clidriver import CLI
32
33class OnosCliDriver(CLI):
34
35 def __init__(self):
36 super(CLI, self).__init__()
37
38 def connect(self,**connectargs):
Jon Halld8dc5772014-04-08 16:26:29 -070039 '''
40 Creates ssh handle for ONOS.
41 '''
Jon Hallf89c8552014-04-02 13:14:06 -070042 try:
43 for key in connectargs:
admine0eeea22014-04-14 10:22:46 -070044 vars(self)[key] = connectargs[key]
Jon Hallf89c8552014-04-02 13:14:06 -070045 self.home = "~/ONOS"
46 for key in self.options:
admine0eeea22014-04-14 10:22:46 -070047 if key == "home":
48 self.home = self.options['home']
49 break
adminbae64d82013-08-01 10:50:15 -070050
Jon Hallf89c8552014-04-02 13:14:06 -070051
52 self.name = self.options['name']
53 self.handle = super(OnosCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd, home = self.home)
adminbae64d82013-08-01 10:50:15 -070054
Jon Hallf89c8552014-04-02 13:14:06 -070055 if self.handle:
Jon Hallf89c8552014-04-02 13:14:06 -070056 return self.handle
57 else :
58 main.log.info("NO ONOS HANDLE")
59 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -070060 except pexpect.EOF:
61 main.log.error(self.name + ": EOF exception found")
62 main.log.error(self.name + ": " + self.handle.before)
63 main.cleanup()
64 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -070065 except:
66 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
67 main.log.error( traceback.print_exc() )
68 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
69 main.cleanup()
70 main.exit()
adminbae64d82013-08-01 10:50:15 -070071
72 def start(self):
Jon Halld8dc5772014-04-08 16:26:29 -070073 '''
74 Starts ONOS on remote machine.
75 Returns false if any errors were encountered.
76 '''
James Leec9cacaf2014-04-08 09:17:39 -070077 try:
Jon Hallf89c8552014-04-02 13:14:06 -070078 self.handle.sendline("")
Jon Hallae05dc22014-04-16 10:56:28 -070079 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
Jon Hall4a2b0482014-04-18 16:29:26 -070080 self.handle.sendline("cd "+self.home)
81 self.handle.sendline("./onos.sh core start")
Jon Hallae05dc22014-04-16 10:56:28 -070082 i=self.handle.expect(["STARTED","FAILED",pexpect.EOF,pexpect.TIMEOUT])
83 response = self.handle.before + str(self.handle.after)
Jon Hallf89c8552014-04-02 13:14:06 -070084 if i==0:
Jon Hallae05dc22014-04-16 10:56:28 -070085 j = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], timeout=60)
86 if re.search("Killed",response):
87 main.log.warn(self.name + ": Killed existing process")
88 if j==0:
Jon Hallf89c8552014-04-02 13:14:06 -070089 main.log.info(self.name + ": ONOS Started ")
Jon Hallae05dc22014-04-16 10:56:28 -070090 return main.TRUE
91 elif j==1:
92 main.log.error(self.name + ": EOF exception found")
93 main.log.error(self.name + ": " + self.handle.before)
94 main.cleanup()
95 main.exit()
96 elif j==2:
Jon Hallf89c8552014-04-02 13:14:06 -070097 main.log.info(self.name + ": ONOS NOT Started, stuck while waiting for it to start ")
98 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -070099 else:
100 main.log.warn(self.name +": Unexpected response in start")
101 return main.TRUE
Jon Hallf89c8552014-04-02 13:14:06 -0700102 elif i==1:
Jon Hallae05dc22014-04-16 10:56:28 -0700103 main.log.error(self.name + ": ONOS Failed to start")
adminbae64d82013-08-01 10:50:15 -0700104 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700105 elif i==2:
106 main.log.error(self.name + ": EOF exception found")
107 main.log.error(self.name + ": " + self.handle.before)
108 main.cleanup()
109 main.exit()
110 elif i==3:
111 main.log.error(self.name + ": ONOS timedout while starting")
112 return main.FALSE
113 else:
114 main.log.error(self.name + ": ONOS start expect script missed something... ")
adminbae64d82013-08-01 10:50:15 -0700115 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700116 except pexpect.EOF:
117 main.log.error(self.name + ": EOF exception found")
118 main.log.error(self.name + ": " + self.handle.before)
119 main.cleanup()
120 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700121 except:
122 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
123 main.log.error( traceback.print_exc() )
124 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
125 main.cleanup()
126 main.exit()
Jon Halle80ef8c2014-04-29 15:29:13 -0700127
128 def start_all(self):
129 '''
130 starts ZK, RC, and ONOS
131 '''
132 self.handle.sendline("cd "+self.home)
133 self.handle.sendline("./onos.sh start")
134 self.handle.expect("./onos.sh start")
135 self.handle.expect(["\$",pexpect.TIMEOUT])
136
137
138
adminbae64d82013-08-01 10:50:15 -0700139 def start_rest(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700140 '''
141 Starts the rest server on ONOS.
142 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700143 try:
Jon Hall4a2b0482014-04-18 16:29:26 -0700144 self.handle.sendline("cd "+self.home)
145 response = self.execute(cmd= "./start-rest.sh start",prompt="\$",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700146 if re.search("admin",response):
147 main.log.info(self.name + ": Rest Server Started Successfully")
148 time.sleep(5)
149 return main.TRUE
150 else :
James Leec9cacaf2014-04-08 09:17:39 -0700151 main.log.warn(self.name + ": Failed to start Rest Server")
152 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700153 except pexpect.EOF:
154 main.log.error(self.name + ": EOF exception found")
155 main.log.error(self.name + ": " + self.handle.before)
156 main.cleanup()
157 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700158 except:
159 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
160 main.log.error( traceback.print_exc() )
161 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
162 main.cleanup()
163 main.exit()
164
adminbae64d82013-08-01 10:50:15 -0700165 def status(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700166 '''
167 Called onos.sh core status and returns TRUE/FALSE accordingly
168 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700169 try:
170 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Hall4a2b0482014-04-18 16:29:26 -0700171 self.handle.sendline("cd "+self.home)
172 response = self.execute(cmd="./onos.sh core status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700173 self.execute(cmd="\n",prompt="\$",timeout=10)
174 if re.search("1\sinstance\sof\sonos\srunning",response):
175 return main.TRUE
176 elif re.search("0\sinstance\sof\sonos\srunning",response):
177 return main.FALSE
178 else :
179 main.log.info( self.name + " WARNING: status recieved unknown response")
180 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700181 except pexpect.EOF:
182 main.log.error(self.name + ": EOF exception found")
183 main.log.error(self.name + ": " + self.handle.before)
184 main.cleanup()
185 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700186 except:
187 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
188 main.log.error( traceback.print_exc() )
189 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
190 main.cleanup()
191 main.exit()
192
adminbae64d82013-08-01 10:50:15 -0700193
194 def isup(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700195 '''
196 A more complete check to see if ONOS is up and running properly.
197 First, it checks if the process is up.
198 Second, it reads the logs for "Exception: Connection refused"
199 Third, it makes sure the logs are actually moving.
200 returns TRUE/FALSE accordingly.
201 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700202 try:
203 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Hall4a2b0482014-04-18 16:29:26 -0700204 self.handle.sendline("cd "+self.home)
205 response = self.execute(cmd= "./onos.sh core status ",prompt="running",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700206 self.execute(cmd="\n",prompt="\$",timeout=10)
207 tail1 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
admine8c47d02014-06-03 11:59:16 -0700208 time.sleep(10)
Jon Hallf89c8552014-04-02 13:14:06 -0700209 self.execute(cmd="\n",prompt="\$",timeout=10)
210 tail2 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
211 pattern = '(.*)1 instance(.*)'
212 pattern2 = '(.*)Exception: Connection refused(.*)'
213 # if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
admin2a9548d2014-06-17 14:08:07 -0700214 running = self.execute(cmd="cat "+self.home+"/onos-logs/onos.*.log | grep 'Sending LLDP out on all ports'",prompt="\$",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700215 if re.search(pattern, response):
admin2a9548d2014-06-17 14:08:07 -0700216 if running != "":
Jon Halle80ef8c2014-04-29 15:29:13 -0700217 main.log.info(self.name + ": ONOS process is running...")
218 if tail1 == tail2:
219 main.log.error(self.name + ": ONOS is frozen...")#logs aren't moving
220 return main.FALSE
221 elif re.search( pattern2,tail1 ):
222 main.log.info(self.name + ": Connection Refused found in onos log")
223 return main.FALSE
224 elif re.search( pattern2,tail2 ):
225 main.log.info(self.name + ": Connection Refused found in onos log")
226 return main.FALSE
227 else:
228 main.log.info(self.name + ": Onos log is moving! It's looking good!")
229 return main.TRUE
Jon Hall55c79662014-05-19 15:03:40 -0700230 else:
231 main.log.info(self.name + ": ONOS not yet sending out LLDP messages")
232 return main.FALSE
adminbae64d82013-08-01 10:50:15 -0700233 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700234 main.log.error(self.name + ": ONOS process not running...")
235 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700236 except pexpect.EOF:
237 main.log.error(self.name + ": EOF exception found")
238 main.log.error(self.name + ": " + self.handle.before)
239 main.cleanup()
240 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700241 except:
242 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
243 main.log.error( traceback.print_exc() )
244 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
245 main.cleanup()
246 main.exit()
adminbae64d82013-08-01 10:50:15 -0700247
Jon Hallf89c8552014-04-02 13:14:06 -0700248
249
James Leec9cacaf2014-04-08 09:17:39 -0700250 def rest_status(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700251 '''
252 Checks if the rest server is running.
253 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700254 try:
255 response = self.execute(cmd= self.home + "/start-rest.sh status ",prompt="running",timeout=10)
256 if re.search("rest\sserver\sis\srunning",response):
257 main.log.info(self.name + ": Rest Server is running")
Jon Hallae05dc22014-04-16 10:56:28 -0700258 return main.TRUE
Jon Hallf89c8552014-04-02 13:14:06 -0700259 elif re.search("rest\sserver\sis\snot\srunning",response):
260 main.log.warn(self.name + ": Rest Server is not Running")
Jon Hallae05dc22014-04-16 10:56:28 -0700261 return main.FALSE
Jon Hallf89c8552014-04-02 13:14:06 -0700262 else :
263 main.log.error(self.name + ": No response" +response)
Jon Hallae05dc22014-04-16 10:56:28 -0700264 return main.FALSE
265 except pexpect.EOF:
266 main.log.error(self.name + ": EOF exception found")
267 main.log.error(self.name + ": " + self.handle.before)
268 main.cleanup()
269 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700270 except:
271 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
272 main.log.error( traceback.print_exc() )
273 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
274 main.cleanup()
275 main.exit()
admine8c47d02014-06-03 11:59:16 -0700276
277 def stop_all(self):
278 '''
279 Runs ./onos.sh stop
280 '''
281 try:
282 self.handle.sendline("")
283 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
284 self.handle.sendline("cd "+self.home)
285 self.handle.sendline("./onos.sh stop")
286 i=self.handle.expect(["Stop",pexpect.EOF,pexpect.TIMEOUT])
287 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], 60)
288 result = self.handle.before
289 if re.search("Killed", result):
290 main.log.info(self.name + ": ONOS Killed Successfully")
291 return main.TRUE
292 else :
293 main.log.warn(self.name + ": ONOS wasn't running")
294 return main.FALSE
295 except pexpect.EOF:
296 main.log.error(self.name + ": EOF exception found")
297 main.log.error(self.name + ": " + self.handle.before)
298 main.cleanup()
299 main.exit()
300 except:
301 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
302 main.log.error( traceback.print_exc() )
303 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
304 main.cleanup()
305 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700306
307
adminbae64d82013-08-01 10:50:15 -0700308 def stop(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700309 '''
310 Runs ./onos.sh core stop to stop ONOS
311 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700312 try:
313 self.handle.sendline("")
Jon Hallae05dc22014-04-16 10:56:28 -0700314 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
Jon Hall4a2b0482014-04-18 16:29:26 -0700315 self.handle.sendline("cd "+self.home)
316 self.handle.sendline("./onos.sh core stop")
Jon Hallae05dc22014-04-16 10:56:28 -0700317 i=self.handle.expect(["Stop",pexpect.EOF,pexpect.TIMEOUT])
318 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], 60)
James Leec9cacaf2014-04-08 09:17:39 -0700319 result = self.handle.before
Jon Hallf89c8552014-04-02 13:14:06 -0700320 if re.search("Killed", result):
321 main.log.info(self.name + ": ONOS Killed Successfully")
322 return main.TRUE
323 else :
324 main.log.warn(self.name + ": ONOS wasn't running")
325 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700326 except pexpect.EOF:
327 main.log.error(self.name + ": EOF exception found")
328 main.log.error(self.name + ": " + self.handle.before)
329 main.cleanup()
330 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700331 except:
332 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
333 main.log.error( traceback.print_exc() )
334 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
335 main.cleanup()
336 main.exit()
337
adminbae64d82013-08-01 10:50:15 -0700338
339 def rest_stop(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700340 '''
341 Runs ./start-rest.sh stop to stop ONOS rest server
342 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700343 try:
344 response = self.execute(cmd= self.home + "/start-rest.sh stop ",prompt="killing",timeout=10)
345 self.execute(cmd="\n",prompt="\$",timeout=10)
346 if re.search("killing", response):
347 main.log.info(self.name + ": Rest Server Stopped")
348 return main.TRUE
349 else :
350 main.log.error(self.name + ": Failed to Stop, Rest Server is not Running")
351 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700352 except pexpect.EOF:
353 main.log.error(self.name + ": EOF exception found")
354 main.log.error(self.name + ": " + self.handle.before)
355 main.cleanup()
356 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700357 except:
358 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
359 main.log.error( traceback.print_exc() )
360 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
361 main.cleanup()
362 main.exit()
363
364
adminbae64d82013-08-01 10:50:15 -0700365 def disconnect(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700366 '''
367 Called when Test is complete to disconnect the ONOS handle.
368 '''
adminaeedddd2013-08-02 15:14:15 -0700369 response = ''
370 try:
adminbae64d82013-08-01 10:50:15 -0700371 self.handle.sendline("exit")
adminaeedddd2013-08-02 15:14:15 -0700372 self.handle.expect("closed")
Jon Hallae05dc22014-04-16 10:56:28 -0700373 except pexpect.EOF:
374 main.log.error(self.name + ": EOF exception found")
375 main.log.error(self.name + ": " + self.handle.before)
James Leec9cacaf2014-04-08 09:17:39 -0700376 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700377 main.log.error(self.name + ": Connection failed to the host")
adminbae64d82013-08-01 10:50:15 -0700378 response = main.FALSE
adminaeedddd2013-08-02 15:14:15 -0700379 return response
380
Jon Hall76f2c462014-04-17 11:37:15 -0700381 def print_version(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700382 '''
383 Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
384 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700385 try:
386 self.handle.sendline("export TERM=xterm-256color")
387 self.handle.expect("xterm-256color")
James Leec9cacaf2014-04-08 09:17:39 -0700388 self.handle.expect("\$")
adminf939f8b2014-04-03 17:22:56 -0700389 self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller | grep -A 5 \"commit\"; cd \.\.")
Jon Hallf89c8552014-04-02 13:14:06 -0700390 self.handle.expect("cd ..")
391 self.handle.expect("\$")
admine0eeea22014-04-14 10:22:46 -0700392 response=(self.name +": \n"+ str(self.handle.before + self.handle.after))
393 main.log.report(response)
Jon Hall76f2c462014-04-17 11:37:15 -0700394 except pexpect.EOF:
395 main.log.error(self.name + ": EOF exception found")
396 main.log.error(self.name + ": " + self.handle.before)
397 main.cleanup()
398 main.exit()
399 except:
400 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
401 main.log.error( traceback.print_exc() )
402 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
403 main.cleanup()
404 def get_version(self):
405 '''
406 Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
407 '''
408 try:
409 self.handle.sendline("export TERM=xterm-256color")
410 self.handle.expect("xterm-256color")
411 self.handle.expect("\$")
412 self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller | grep -A 5 \"commit\"; cd \.\.")
413 self.handle.expect("cd ..")
414 self.handle.expect("\$")
415 response=(self.name +": \n"+ str(self.handle.before + self.handle.after))
admine0eeea22014-04-14 10:22:46 -0700416 lines=response.splitlines()
417 for line in lines:
418 print line
419 return lines[2]
Jon Hallae05dc22014-04-16 10:56:28 -0700420 except pexpect.EOF:
421 main.log.error(self.name + ": EOF exception found")
422 main.log.error(self.name + ": " + self.handle.before)
423 main.cleanup()
424 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700425 except:
426 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
427 main.log.error( traceback.print_exc() )
428 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
429 main.cleanup()
430 main.exit()
adminbae64d82013-08-01 10:50:15 -0700431
admin2a9548d2014-06-17 14:08:07 -0700432
admindc1c5072014-06-24 15:57:19 -0700433
434#*********************************************************************
435#*********************************************************************
436# shortest_path is a command to find the shortest path between two
437# switches. It is called using the IP, port, and source and
438# destination dpids
439#*********************************************************************
440#*********************************************************************
441
442 def shortest_path(self,ONOSIP,ONOSPort,srcDPID,dstDPID):
443 main.log.report("Finding the shortest Path between "+str(srcDPID) + " to " + str(dstDPID))
444 url = "http://%s:%s/wm/onos/intent/path/switch/%s/shortest-path/%s"%(ONOSIP,ONOSPort,srcDPID,dstDPID)
445 parsed_result = []
446 try:
447 response = urllib2.urlopen(url)
448 result = response.read()
449 response.close()
450 if len(result) != 0:
451 parsed_result = json.loads(result)
452 except HTTPError as exc:
453 print "ERROR:"
454 print " REST GET URL: %s" % url
455 # NOTE: exc.fp contains the object with the response payload
456 error_payload = json.loads(exc.fp.read())
457 print " REST Error Code: %s" % (error_payload['code'])
458 print " REST Error Summary: %s" % (error_payload['summary'])
459 print " REST Error Description: %s" % (error_payload['formattedDescription'])
460 print " HTTP Error Code: %s" % exc.code
461 print " HTTP Error Reason: %s" % exc.reason
462 except URLError as exc:
463 print "ERROR:"
464 print " REST GET URL: %s" % url
465 print " URL Error Reason: %s" % exc.reason
466
467 if len(parsed_result)==0:
468 return
469 result = json.dumps(parsed_result,indent=4)
470 print(str(result))
471 return result
472
473
474#*********************************************************************
475#*********************************************************************
476# show_intent is a command to show intents.
477# Parameters include intentIP, intentPort, intentURL, and intent_id
478# Based on the url, it will show either high or low intents
479# If intent_id is left blank, it will show all high or all low intents
480# Else it will show the intent with the id
481#*********************************************************************
482#*********************************************************************
483
484
485
486 def show_intent(self,intentIP,intentPort=8080,intentURL="wm/onos/intent",intent_type="high",intent_id="all"):
487 main.log.report("Getting (an) intent(s)")
488 if intent_id=="all":
489 url = "http://%s:%s/%s/%s"%(intentIP,intentPort,intentURL,intent_type)
490 else:
491 url = "http://%s:%s/%s/%s/%s"%(intentIP,intentPort,intentURL,intent_type,intent_id)
492 print(url)
493 parsed_result = []
494 try:
495 response = urllib2.urlopen(url)
496 result = response.read()
497 response.close()
498 if len(result) != 0:
499 parsed_result = json.loads(result)
500 except HTTPError as exc:
501 print "ERROR:"
502 print " REST GET URL: %s" % url
503 # NOTE: exc.fp contains the object with the response payload
504 error_payload = json.loads(exc.fp.read())
505 print " REST Error Code: %s" % (error_payload['code'])
506 print " REST Error Summary: %s" % (error_payload['summary'])
507 print " REST Error Description: %s" % (error_payload['formattedDescription'])
508 print " HTTP Error Code: %s" % exc.code
509 print " HTTP Error Reason: %s" % exc.reason
510 return str(error_payload['code'])
511 except URLError as exc:
512 print "ERROR:"
513 print " REST GET URL: %s" % url
514 print " URL Error Reason: %s" % exc.reason
515 return str(error_payload['code'])
516
517 if len(parsed_result)==0:
518 return
519 result = json.dumps(parsed_result,indent=4)
520 print(str(result))
521 return result
522
523
524#*********************************************************************
525#*********************************************************************
526# del_intent is to delete either all or some or one intents
527# if intent_id is left blank, it will delete all intents
528# else, intent_id should be of the form "intent_id=1,2,3"
529#*********************************************************************
530#*********************************************************************
531
532 def del_intent(self,intentIP,intentPort=8080,intentURL="wm/onos/intent",intent_id="all"):
533 main.log.report("Deleting (an) intent(s)")
534 if intent_id=="all":
535 url = "http://%s:%s/%s/high"%(intentIP,intentPort,intentURL)
536 else:
537 url = "http://%s:%s/%s/high?%s"%(intentIP,intentPort,intentURL,intent_id)
538
539 print(url)
540
541 parsed_result = []
542 try:
543 request = urllib2.Request(url)
544 request.get_method = lambda: 'DELETE'
545 response = urllib2.urlopen(request)
546 result = response.read()
547 response.close()
548 if len(result) != 0:
549 parsed_result = json.loads(result)
550 print(parsed_result)
551 except HTTPError as exc:
552 print "ERROR:"
553 print " REST DELETE URL: %s" % url
554 # NOTE: exc.fp contains the object with the response payload
555 error_payload = json.loads(exc.fp.read())
556 print " REST Error Code: %s" % (error_payload['code'])
557 print " REST Error Summary: %s" % (error_payload['summary'])
558 print " REST Error Description: %s" % (error_payload['formattedDescription'])
559 print " HTTP Error Code: %s" % exc.code
560 print " HTTP Error Reason: %s" % exc.reason
561 except URLError as exc:
562 print "ERROR:"
563 print " REST DELETE URL: %s" % url
564 print " URL Error Reason: %s" % exc.reason
565 return result
566
567#*********************************************************************
568#*********************************************************************
569# add_intent will add a single intent by using dpids and macs.
570#*********************************************************************
571#*********************************************************************
572
573
574 def add_intent(self, intent_id,src_dpid,dst_dpid,src_mac,dst_mac,intentIP,intentPort=8080,intentURL="wm/onos/intent" , intent_type = 'SHORTEST_PATH', static_path=False, src_port=1,dst_port=1):
admin2a9548d2014-06-17 14:08:07 -0700575 "CLI command callback: set intent"
576
577 intents = []
578 oper = {}
579 # Create the POST payload
580 oper['intentId'] = intent_id
581 oper['intentType'] = intent_type # XXX: Hardcoded
582 oper['staticPath'] = static_path # XXX: Hardcoded
583 oper['srcSwitchDpid'] = src_dpid
584 oper['srcSwitchPort'] = src_port
585 oper['dstSwitchDpid'] = dst_dpid
586 oper['dstSwitchPort'] = dst_port
587 oper['matchSrcMac'] = src_mac
588 oper['matchDstMac'] = dst_mac
589 intents.append(oper)
admindc1c5072014-06-24 15:57:19 -0700590 url = "http://%s:%s/%s/high"%(intentIP,intentPort,intentURL)
admin2a9548d2014-06-17 14:08:07 -0700591 parsed_result = []
592 data_json = json.dumps(intents)
593 try:
594 request = urllib2.Request(url,data_json)
595 request.add_header("Content-Type", "application/json")
596 response=urllib2.urlopen(request)
597 result = response.read()
598 response.close()
599 if len(result) != 0:
600 parsed_result = json.loads(result)
601 except HTTPError as exc:
602 print "ERROR:"
603 print " REST GET URL: %s" % url
604 # NOTE: exc.fp contains the object with the response payload
605 error_payload = json.loads(exc.fp.read())
606 print " REST Error Code: %s" % (error_payload['code'])
607 print " REST Error Summary: %s" % (error_payload['summary'])
608 print " REST Error Description: %s" % (error_payload['formattedDescription'])
609 print " HTTP Error Code: %s" % exc.code
610 print " HTTP Error Reason: %s" % exc.reason
611 except URLError as exc:
612 print "ERROR:"
613 print " REST GET URL: %s" % url
614 print " URL Error Reason: %s" % exc.reason
admindc1c5072014-06-24 15:57:19 -0700615 return result
admin2a9548d2014-06-17 14:08:07 -0700616
617
618
619
620 def add_intents(self):
621 main.log.info("Sending new intents to ONOS")
adminc6cfc1c2014-04-21 13:55:21 -0700622 self.handle.sendline("cd "+self.home+ "/scripts")
623 self.handle.expect("scripts")
admin2a9548d2014-06-17 14:08:07 -0700624 main.log.info("Adding intents")
adminc6cfc1c2014-04-21 13:55:21 -0700625 self.handle.sendline("./pyintents.py")
Jon Hall9c6e2c02014-05-02 10:18:53 -0700626 self.handle.expect(["$",pexpect.EOF,pexpect.TIMEOUT])
627 response = self.handle.before
adminc6cfc1c2014-04-21 13:55:21 -0700628 self.handle.sendline("cd "+self.home)
629 return main.TRUE
630
admin2a9548d2014-06-17 14:08:07 -0700631 def rm_intents(self):
632 main.log.info("Deleteing Intents from ONOS")
adminc6cfc1c2014-04-21 13:55:21 -0700633 self.handle.sendline("cd "+self.home+ "/scripts")
634 self.handle.expect("scripts")
admin2a9548d2014-06-17 14:08:07 -0700635 main.log.info("Deleting Intnents")
adminc6cfc1c2014-04-21 13:55:21 -0700636 self.handle.sendline("./rmpyintents.py")
Jon Hall9c6e2c02014-05-02 10:18:53 -0700637 self.handle.expect(["$",pexpect.EOF,pexpect.TIMEOUT])
638 response = self.handle.before
adminc6cfc1c2014-04-21 13:55:21 -0700639 self.handle.sendline("cd "+self.home)
640 return main.TRUE
641
admin2a9548d2014-06-17 14:08:07 -0700642 def purge_intents(self):
Jon Hall265149f2014-04-25 13:39:52 -0700643 main.log.info("Purging dead intents")
644 self.handle.sendline("cd "+self.home+ "/scripts")
645 self.handle.expect("scripts")
admin2a9548d2014-06-17 14:08:07 -0700646 main.log.info("Sending Purge Intent Rest call to ONOS")
Jon Hall265149f2014-04-25 13:39:52 -0700647 self.handle.sendline("./purgeintents.py")
648 self.handle.sendline("cd "+self.home)
649 return main.TRUE
adminc6cfc1c2014-04-21 13:55:21 -0700650
651
652
Jon Hall4a2b0482014-04-18 16:29:26 -0700653 def add_flow(self, testONip, user = "admin", password = "", flowDef = "/flowdef.txt"):
Jon Halld8dc5772014-04-08 16:26:29 -0700654 '''
655 Copies the flowdef file from TestStation -> ONOS machine
656 Then runs ./add_flow.py to add the flows to ONOS
657 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700658 try:
659 main.log.info("Adding Flows...")
660 self.handle.sendline("scp %s@%s:%s /tmp/flowtmp" %(user,testONip,flowDef))
661 i=self.handle.expect(['[pP]assword:', '100%', pexpect.TIMEOUT],30)
662 if(i==0):
663 self.handle.sendline("%s" %(password))
664 self.handle.sendline("")
665 self.handle.expect("100%")
666 self.handle.expect("\$", 30)
667 self.handle.sendline(self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
668 self.handle.expect("\$", 1000)
669 main.log.info("Flows added")
670 return main.TRUE
671
672 elif(i==1):
673 self.handle.sendline("")
674 self.handle.expect("\$", 10)
675 self.handle.sendline( self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
676 self.handle.expect("\$", 1000)
677 main.log.info("Flows added")
678 return main.TRUE
679
680 elif(i==2):
681 main.log.error("Flow Def file SCP Timed out...")
682 return main.FALSE
683
684 else:
685 main.log.error("Failed to add flows...")
James Leec9cacaf2014-04-08 09:17:39 -0700686 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700687 except pexpect.EOF:
688 main.log.error(self.name + ": EOF exception found")
689 main.log.error(self.name + ": " + self.handle.before)
690 main.cleanup()
691 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700692 except:
693 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
694 main.log.error( traceback.print_exc() )
695 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
696 main.cleanup()
697 main.exit()
698
adminbae64d82013-08-01 10:50:15 -0700699
700 def delete_flow(self, *delParams):
Jon Halld8dc5772014-04-08 16:26:29 -0700701 '''
702 Deletes a specific flow, a range of flows, or all flows.
703 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700704 try:
705 if len(delParams)==1:
706 if str(delParams[0])=="all":
707 main.log.info(self.name + ": Deleting ALL flows...")
708 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh all",prompt="done",timeout=150)
709 self.handle.sendline(self.home + "/web/delete_flow.py all")
710 self.handle.expect("delete_flow")
711 self.handle.expect("\$",1000)
712 main.log.info(self.name + ": Flows deleted")
713 else:
714 main.log.info(self.name + ": Deleting flow "+str(delParams[0])+"...")
715 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0]),prompt="done",timeout=150)
716 #self.execute(cmd="\n",prompt="\$",timeout=60)
717 self.handle.sendline(self.home +"/web/delete_flow.py %d" % int(delParams[0]))
718 self.handle.expect("delete_flow")
719 self.handle.expect("\$",60)
720 main.log.info(self.name + ": Flow deleted")
721 elif len(delParams)==2:
722 main.log.info(self.name + ": Deleting flows "+str(delParams[0])+" through "+str(delParams[1])+"...")
723 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0])+" "+str(delParams[1]),prompt="done",timeout=150)
724 #self.execute(cmd="\n",prompt="\$",timeout=60)
725 self.handle.sendline(self.home + "/web/delete_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
726 self.handle.expect("delete_flow")
727 self.handle.expect("\$",600)
728 main.log.info(self.name + ": Flows deleted")
Jon Hallae05dc22014-04-16 10:56:28 -0700729 except pexpect.EOF:
730 main.log.error(self.name + ": EOF exception found")
731 main.log.error(self.name + ": " + self.handle.before)
732 main.cleanup()
733 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700734 except:
735 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
736 main.log.error( traceback.print_exc() )
737 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
738 main.cleanup()
739 main.exit()
adminbae64d82013-08-01 10:50:15 -0700740
741 def check_flow(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700742 '''
743 Calls the ./get_flow.py all and checks:
744 - If each FlowPath has at least one FlowEntry
745 - That there are no "NOT"s found
746 returns TRUE/FALSE
747 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700748 try:
749 flowEntryDetect = 1
750 count = 0
751 self.handle.sendline("clear")
752 time.sleep(1)
753 self.handle.sendline(self.home + "/web/get_flow.py all")
754 self.handle.expect("get_flow")
Jon Hall3bd7c792014-05-30 09:05:21 -0700755 for x in range(15):
Jon Hallf89c8552014-04-02 13:14:06 -0700756 i=self.handle.expect(['FlowPath','FlowEntry','NOT','\$',pexpect.TIMEOUT],timeout=180)
757 if i==0:
758 count = count + 1
759 if flowEntryDetect == 0:
760 main.log.info(self.name + ": FlowPath without FlowEntry")
761 return main.FALSE
762 else:
763 flowEntryDetect = 0
764 elif i==1:
765 flowEntryDetect = 1
766 elif i==2:
767 main.log.error(self.name + ": Found a NOT")
adminbae64d82013-08-01 10:50:15 -0700768 return main.FALSE
Jon Hallf89c8552014-04-02 13:14:06 -0700769 elif i==3:
770 if count == 0:
771 main.log.info(self.name + ": There don't seem to be any flows here...")
772 return main.FALSE
773 else:
774 main.log.info(self.name + ": All flows pass")
775 main.log.info(self.name + ": Number of FlowPaths: "+str(count))
776 return main.TRUE
777 elif i==4:
James Leec9cacaf2014-04-08 09:17:39 -0700778 main.log.error(self.name + ":Check_flow() - Command Timeout!")
Jon Hallf89c8552014-04-02 13:14:06 -0700779 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700780 except pexpect.EOF:
781 main.log.error(self.name + ": EOF exception found")
782 main.log.error(self.name + ": " + self.handle.before)
783 main.cleanup()
784 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700785 except:
786 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
787 main.log.error( traceback.print_exc() )
788 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
789 main.cleanup()
790 main.exit()
adminbae64d82013-08-01 10:50:15 -0700791
792 def get_flow(self, *flowParams):
Jon Halld8dc5772014-04-08 16:26:29 -0700793 '''
794 Returns verbose output of ./get_flow.py
795 '''
796 try:
797 if len(flowParams)==1:
798 if str(flowParams[0])=="all":
799 self.execute(cmd="\n",prompt="\$",timeout=60)
800 main.log.info(self.name + ": Getting all flow data...")
801 data = self.execute(cmd=self.home + "/scripts/TestON_get_flow.sh all",prompt="done",timeout=150)
802 self.execute(cmd="\n",prompt="\$",timeout=60)
803 return data
804 else:
805 main.log.info(self.name + ": Retrieving flow "+str(flowParams[0])+" data...")
806 data = self.execute(cmd=self.home +"/scripts/TestON_get_flow.sh "+str(flowParams[0]),prompt="done",timeout=150)
807 self.execute(cmd="\n",prompt="\$",timeout=60)
808 return data
809 elif len(flowParams)==5:
810 main.log.info(self.name + ": Retrieving flow installer data...")
811 data = self.execute(cmd=self.home + "/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3])+" "+str(flowParams[4]),prompt="done",timeout=150)
812 self.execute(cmd="\n",prompt="\$",timeout=60)
813 return data
814 elif len(flowParams)==4:
815 main.log.info(self.name + ": Retrieving flow endpoints...")
816 data = self.execute(cmd=self.home + "/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3]),prompt="done",timeout=150)
817 self.execute(cmd="\n",prompt="\$",timeout=60)
818 return data
Jon Hallae05dc22014-04-16 10:56:28 -0700819 except pexpect.EOF:
820 main.log.error(self.name + ": EOF exception found")
821 main.log.error(self.name + ": " + self.handle.before)
822 main.cleanup()
823 main.exit()
Jon Halld8dc5772014-04-08 16:26:29 -0700824 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700825 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
826 main.log.error( traceback.print_exc() )
827 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
828 main.cleanup()
829 main.exit()
adminbae64d82013-08-01 10:50:15 -0700830
831
Jon Hall2f42a672014-05-28 10:13:18 -0700832# http://localhost:8080/wm/onos/topology/switches
833# http://localhost:8080/wm/onos/topology/links
Jon Hall8060af02014-04-14 14:17:58 -0700834# http://localhost:8080/wm/onos/registry/controllers/json
835# http://localhost:8080/wm/onos/registry/switches/json"
adminbae64d82013-08-01 10:50:15 -0700836
837 def get_json(self, url):
Jon Halld8dc5772014-04-08 16:26:29 -0700838 '''
839 Helper functions used to parse the json output of a rest call
840 '''
adminbae64d82013-08-01 10:50:15 -0700841 try:
Jon Hallf89c8552014-04-02 13:14:06 -0700842 try:
843 command = "curl -s %s" % (url)
844 result = os.popen(command).read()
845 parsedResult = json.loads(result)
846 except:
847 print "REST IF %s has issue" % command
848 parsedResult = ""
849
850 if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
851 print "REST %s returned code %s" % (command, parsedResult['code'])
852 parsedResult = ""
James Leec9cacaf2014-04-08 09:17:39 -0700853 return parsedResult
Jon Hallae05dc22014-04-16 10:56:28 -0700854 except pexpect.EOF:
855 main.log.error(self.name + ": EOF exception found")
856 main.log.error(self.name + ": " + self.handle.before)
857 main.cleanup()
858 main.exit()
adminbae64d82013-08-01 10:50:15 -0700859 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700860 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
861 main.log.error( traceback.print_exc() )
862 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
863 main.cleanup()
864 main.exit()
adminbae64d82013-08-01 10:50:15 -0700865
Jon Hallf89c8552014-04-02 13:14:06 -0700866 def check_switch(self,RestIP,correct_nr_switch, RestPort ="8080" ):
Jon Halld8dc5772014-04-08 16:26:29 -0700867 '''
868 Used by check_status
869 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700870 try:
871 buf = ""
872 retcode = 0
admin2e131ab2014-05-28 10:03:42 -0700873 url="http://%s:%s/wm/onos/topology/switches" % (RestIP, RestPort)
Jon Hallf89c8552014-04-02 13:14:06 -0700874 parsedResult = self.get_json(url)
875 if parsedResult == "":
876 retcode = 1
877 return (retcode, "Rest API has an issue")
878 url = "http://%s:%s/wm/onos/registry/switches/json" % (RestIP, RestPort)
879 registry = self.get_json(url)
880
881 if registry == "":
882 retcode = 1
883 return (retcode, "Rest API has an issue")
884
885 cnt = 0
886 active = 0
adminbae64d82013-08-01 10:50:15 -0700887
Jon Hallf89c8552014-04-02 13:14:06 -0700888 for s in parsedResult:
889 cnt += 1
James Leec9cacaf2014-04-08 09:17:39 -0700890 if s['state'] == "ACTIVE":
Jon Hallf89c8552014-04-02 13:14:06 -0700891 active += 1
adminbae64d82013-08-01 10:50:15 -0700892
Jon Hallf89c8552014-04-02 13:14:06 -0700893 buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
894 if correct_nr_switch != cnt:
895 buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
896 retcode = 1
adminbae64d82013-08-01 10:50:15 -0700897
Jon Hallf89c8552014-04-02 13:14:06 -0700898 if correct_nr_switch != active:
899 buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
900 retcode = 1
901
902 return (retcode, buf)
Jon Hallae05dc22014-04-16 10:56:28 -0700903 except pexpect.EOF:
904 main.log.error(self.name + ": EOF exception found")
905 main.log.error(self.name + ": " + self.handle.before)
906 main.cleanup()
907 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700908 except:
909 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
910 main.log.error( traceback.print_exc() )
911 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
912 main.cleanup()
913 main.exit()
adminbae64d82013-08-01 10:50:15 -0700914
Jon Hallf89c8552014-04-02 13:14:06 -0700915 def check_link(self,RestIP, nr_links, RestPort = "8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700916 '''
917 Used by check_status
918 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700919 try:
920 buf = ""
921 retcode = 0
922
admin2e131ab2014-05-28 10:03:42 -0700923 url = "http://%s:%s/wm/onos/topology/links" % (RestIP, RestPort)
Jon Hallf89c8552014-04-02 13:14:06 -0700924 parsedResult = self.get_json(url)
925
926 if parsedResult == "":
927 retcode = 1
928 return (retcode, "Rest API has an issue")
929
930 buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
931 intra = 0
932 interlink=0
933
934 for s in parsedResult:
James Leec9cacaf2014-04-08 09:17:39 -0700935 intra = intra + 1
Jon Hallf89c8552014-04-02 13:14:06 -0700936
937 if intra != nr_links:
938 buf += "link fail\n"
939 retcode = 1
940
941 return (retcode, buf)
Jon Hallae05dc22014-04-16 10:56:28 -0700942 except pexpect.EOF:
943 main.log.error(self.name + ": EOF exception found")
944 main.log.error(self.name + ": " + self.handle.before)
945 main.cleanup()
946 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700947 except:
948 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
949 main.log.error( traceback.print_exc() )
950 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
951 main.cleanup()
952 main.exit()
adminbae64d82013-08-01 10:50:15 -0700953
Jon Hallf89c8552014-04-02 13:14:06 -0700954 def check_status_report(self, ip, numoswitch, numolink, port="8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700955 '''
956 Checks the number of swithes & links that ONOS sees against the supplied values.
957 Writes to the report log.
958 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700959 try:
James Leec9cacaf2014-04-08 09:17:39 -0700960 main.log.info(self.name + ": Making some rest calls...")
Jon Hallf89c8552014-04-02 13:14:06 -0700961 switch = self.check_switch(ip, int(numoswitch), port)
962 link = self.check_link(ip, int(numolink), port)
963 value = switch[0]
964 value += link[0]
965 main.log.report( self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
966 if value != 0:
967 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -0700968 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700969 # "PASS"
970 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -0700971 except pexpect.EOF:
972 main.log.error(self.name + ": EOF exception found")
973 main.log.error(self.name + ": " + self.handle.before)
974 main.cleanup()
975 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700976 except:
977 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
978 main.log.error( traceback.print_exc() )
979 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
980 main.cleanup()
981 main.exit()
adminbae64d82013-08-01 10:50:15 -0700982
Jon Hallf89c8552014-04-02 13:14:06 -0700983 def check_status(self, ip, numoswitch, numolink, port = "8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700984 '''
985 Checks the number of swithes & links that ONOS sees against the supplied values.
986 Writes to the main log.
987 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700988 try:
James Leec9cacaf2014-04-08 09:17:39 -0700989 main.log.info(self.name + ": Making some rest calls...")
Jon Hallf89c8552014-04-02 13:14:06 -0700990 switch = self.check_switch(ip, int(numoswitch), port)
991 link = self.check_link(ip, int(numolink), port)
992 value = switch[0]
993 value += link[0]
994 main.log.info(self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
995 if value != 0:
996 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -0700997 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700998 # "PASS"
999 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -07001000 except pexpect.EOF:
1001 main.log.error(self.name + ": EOF exception found")
1002 main.log.error(self.name + ": " + self.handle.before)
1003 main.cleanup()
1004 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -07001005 except:
1006 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1007 main.log.error( traceback.print_exc() )
1008 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1009 main.cleanup()
1010 main.exit()
adminbae64d82013-08-01 10:50:15 -07001011
adminbae64d82013-08-01 10:50:15 -07001012 def check_for_no_exceptions(self):
Jon Halld8dc5772014-04-08 16:26:29 -07001013 '''
1014 TODO: Rewrite
1015 Used by CassndraCheck.py to scan ONOS logs for Exceptions
1016 '''
Jon Hallf89c8552014-04-02 13:14:06 -07001017 try:
1018 self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
James Leec9cacaf2014-04-08 09:17:39 -07001019 self.handle.expect("\$ dsh")
Jon Hallf89c8552014-04-02 13:14:06 -07001020 self.handle.expect("\$")
1021 output = self.handle.before
James Leec9cacaf2014-04-08 09:17:39 -07001022 main.log.info(self.name + ": " + output )
Jon Hallf89c8552014-04-02 13:14:06 -07001023 if re.search("Exception",output):
1024 return main.FALSE
1025 else :
1026 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -07001027 except pexpect.EOF:
1028 main.log.error(self.name + ": EOF exception found")
1029 main.log.error(self.name + ": " + self.handle.before)
1030 main.cleanup()
1031 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -07001032 except:
1033 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1034 main.log.error( traceback.print_exc() )
1035 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1036 main.cleanup()
1037 main.exit()
1038
1039
admine0eeea22014-04-14 10:22:46 -07001040 def git_pull(self, comp1=""):
Jon Halld8dc5772014-04-08 16:26:29 -07001041 '''
Jon Halld8dc5772014-04-08 16:26:29 -07001042 Assumes that "git pull" works without login
admine0eeea22014-04-14 10:22:46 -07001043
1044 This function will perform a git pull on the ONOS instance.
1045 If used as git_pull("NODE") it will do git pull + NODE. This is
1046 for the purpose of pulling from other nodes if necessary.
1047
1048 Otherwise, this function will perform a git pull in the
1049 ONOS repository. If it has any problems, it will return main.ERROR
1050 If it successfully does a git_pull, it will return a 1.
1051 If it has no updates, it will return a 0.
1052
Jon Halld8dc5772014-04-08 16:26:29 -07001053 '''
Jon Hallae05dc22014-04-16 10:56:28 -07001054 try:
Jon Halle80ef8c2014-04-29 15:29:13 -07001055 # main.log.info(self.name + ": Stopping ONOS")
1056 #self.stop()
Jon Hallae05dc22014-04-16 10:56:28 -07001057 self.handle.sendline("cd " + self.home)
1058 self.handle.expect("ONOS\$")
1059 if comp1=="":
1060 self.handle.sendline("git pull")
1061 else:
1062 self.handle.sendline("git pull " + comp1)
1063
1064 uptodate = 0
Jon Hall5a8aac62014-06-03 09:30:21 -07001065 i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting','You\sare\snot\scurrently\son\sa\sbranch'],timeout=1700)
Jon Hallae05dc22014-04-16 10:56:28 -07001066 #debug
1067 #main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
1068 if i==0:
1069 main.log.error(self.name + ": Git pull had some issue...")
1070 return main.ERROR
1071 elif i==1:
1072 main.log.error(self.name + ": Git Pull Asking for username!!! BADD!")
1073 return main.ERROR
1074 elif i==2:
1075 main.log.info(self.name + ": Git Pull - pulling repository now")
1076 self.handle.expect("ONOS\$", 120)
1077 return 0
1078 elif i==3:
1079 main.log.error(self.name + ": Git Pull - TIMEOUT")
1080 return main.ERROR
1081 elif i==4:
1082 main.log.info(self.name + ": Git Pull - Already up to date")
1083 return 1
1084 elif i==5:
1085 main.log.info(self.name + ": Git Pull - Aborting... Are there conflicting git files?")
1086 return main.ERROR
Jon Hall5a8aac62014-06-03 09:30:21 -07001087 elif i==6:
1088 main.log.info(self.name + ": Git Pull - You are not currently on a branch so git pull failed!")
1089 return main.ERROR
Jon Hallae05dc22014-04-16 10:56:28 -07001090 else:
1091 main.log.error(self.name + ": Git Pull - Unexpected response, check for pull errors")
1092 return main.ERROR
1093 except pexpect.EOF:
1094 main.log.error(self.name + ": EOF exception found")
1095 main.log.error(self.name + ": " + self.handle.before)
1096 main.cleanup()
1097 main.exit()
1098 except:
1099 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1100 main.log.error( traceback.print_exc() )
1101 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1102 main.cleanup()
1103 main.exit()
admine0eeea22014-04-14 10:22:46 -07001104#********************************************************
1105
1106
admin7373a812014-04-16 09:49:02 -07001107 def git_compile(self):
Jon Hallae05dc22014-04-16 10:56:28 -07001108 '''
1109 Compiles ONOS
1110 First runs mvn clean then mvn compile
1111 '''
1112 try:
1113 main.log.info(self.name + ": mvn clean")
admin8fc02822014-04-16 13:31:23 -07001114 self.handle.sendline("cd " + self.home)
Jon Hallae05dc22014-04-16 10:56:28 -07001115 self.handle.sendline("mvn clean")
1116 while 1:
Jon Hall1636f942014-04-17 10:07:23 -07001117 i=self.handle.expect(['There\sis\sinsufficient\smemory\sfor\sthe\sJava\sRuntime\sEnvironment\sto\scontinue','BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
Jon Hallae05dc22014-04-16 10:56:28 -07001118 if i == 0:
Jon Hall1636f942014-04-17 10:07:23 -07001119 main.log.error(self.name + ":There is insufficient memory for the Java Runtime Environment to continue.")
Jon Hallae05dc22014-04-16 10:56:28 -07001120 return main.FALSE
1121 elif i == 1:
Jon Hall1636f942014-04-17 10:07:23 -07001122 main.log.error(self.name + ": Clean failure!")
1123 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -07001124 elif i == 2:
Jon Hall1636f942014-04-17 10:07:23 -07001125 main.log.info(self.name + ": Clean success!")
1126 elif i == 3:
admin8fc02822014-04-16 13:31:23 -07001127 main.log.info(self.name + ": Clean complete")
Jon Hallae05dc22014-04-16 10:56:28 -07001128 break;
Jon Hall1636f942014-04-17 10:07:23 -07001129 elif i == 4:
Jon Hallae05dc22014-04-16 10:56:28 -07001130 main.log.error(self.name + ": mvn clean TIMEOUT!")
1131 return main.FALSE
Jon Hall1636f942014-04-17 10:07:23 -07001132 else:
1133 main.log.error(self.name + ": unexpected response from mvn clean")
1134 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -07001135
1136 main.log.info(self.name + ": mvn compile")
1137 self.handle.sendline("mvn compile")
1138 while 1:
Jon Hall1636f942014-04-17 10:07:23 -07001139 i=self.handle.expect(['There\sis\sinsufficient\smemory\sfor\sthe\sJava\sRuntime\sEnvironment\sto\scontinue','BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=60)
Jon Hallae05dc22014-04-16 10:56:28 -07001140 if i == 0:
Jon Hall1636f942014-04-17 10:07:23 -07001141 main.log.error(self.name + ":There is insufficient memory for the Java Runtime Environment to continue.")
1142 return main.FALSE
1143 if i == 1:
Jon Hallae05dc22014-04-16 10:56:28 -07001144 main.log.error(self.name + ": Build failure!")
1145 return main.FALSE
Jon Hall1636f942014-04-17 10:07:23 -07001146 elif i == 2:
Jon Hallae05dc22014-04-16 10:56:28 -07001147 main.log.info(self.name + ": Build success!")
Jon Hall1636f942014-04-17 10:07:23 -07001148 elif i == 3:
Jon Hallae05dc22014-04-16 10:56:28 -07001149 main.log.info(self.name + ": Build complete")
Jon Hall010f5412014-05-21 15:10:12 -07001150 self.handle.expect("\$", timeout=60)
Jon Hallae05dc22014-04-16 10:56:28 -07001151 return main.TRUE
Jon Hall1636f942014-04-17 10:07:23 -07001152 elif i == 4:
Jon Hallae05dc22014-04-16 10:56:28 -07001153 main.log.error(self.name + ": mvn compile TIMEOUT!")
1154 return main.FALSE
1155 else:
Jon Hall1636f942014-04-17 10:07:23 -07001156 main.log.error(self.name + ": unexpected response from mvn compile")
1157 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -07001158 except pexpect.EOF:
1159 main.log.error(self.name + ": EOF exception found")
1160 main.log.error(self.name + ": " + self.handle.before)
1161 main.cleanup()
1162 main.exit()
1163 except:
1164 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1165 main.log.error( traceback.print_exc() )
1166 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1167 main.cleanup()
1168 main.exit()
admin4a58db92013-09-30 12:04:54 -07001169
Jon Hallf89c8552014-04-02 13:14:06 -07001170 def tcpdump(self, intf = "eth0"):
Jon Hallae05dc22014-04-16 10:56:28 -07001171 '''
1172 Runs tpdump on an intferface and saves in onos-logs under the ONOS home directory
1173 intf can be specified, or the default eth0 is used
1174 '''
Jon Hallf89c8552014-04-02 13:14:06 -07001175 try:
1176 self.handle.sendline("")
1177 self.handle.expect("\$")
Jon Hall26f316b2014-04-11 11:21:25 -07001178 self.handle.sendline("sudo tcpdump -n -i "+ intf + " -s0 -w " + self.home +"/onos-logs/tcpdump &")
Jon Hallf89c8552014-04-02 13:14:06 -07001179 i=self.handle.expect(['No\ssuch\device','listening\son',pexpect.TIMEOUT],timeout=10)
1180 if i == 0:
1181 main.log.error(self.name + ": tcpdump - No such device exists. tcpdump attempted on: " + intf)
1182 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -07001183 elif i == 1:
Jon Hallf89c8552014-04-02 13:14:06 -07001184 main.log.info(self.name + ": tcpdump started on " + intf)
1185 return main.TRUE
James Leec9cacaf2014-04-08 09:17:39 -07001186 elif i == 2:
Jon Hallf89c8552014-04-02 13:14:06 -07001187 main.log.error(self.name + ": tcpdump command timed out! Check interface name, given interface was: " + intf)
1188 return main.FALSE
1189 else:
1190 main.log.error(self.name + ": tcpdump - unexpected response")
1191 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -07001192 except pexpect.EOF:
1193 main.log.error(self.name + ": EOF exception found")
1194 main.log.error(self.name + ": " + self.handle.before)
1195 main.cleanup()
1196 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -07001197 except:
1198 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1199 main.log.error( traceback.print_exc() )
1200 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1201 main.cleanup()
1202 main.exit()
1203
admin4a58db92013-09-30 12:04:54 -07001204 def kill_tcpdump(self):
Jon Hallae05dc22014-04-16 10:56:28 -07001205 '''
1206 Kills any tcpdump processes running
1207 '''
Jon Hallf89c8552014-04-02 13:14:06 -07001208 try:
1209 self.handle.sendline("")
1210 self.handle.expect("\$")
1211 self.handle.sendline("sudo kill -9 `ps -ef | grep \"tcpdump -n\" | grep -v grep | awk '{print $2}'`")
Jon Hallae05dc22014-04-16 10:56:28 -07001212 except pexpect.EOF:
1213 main.log.error(self.name + ": EOF exception found")
1214 main.log.error(self.name + ": " + self.handle.before)
1215 main.cleanup()
1216 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -07001217 except:
1218 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1219 main.log.error( traceback.print_exc() )
1220 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1221 main.cleanup()
1222 main.exit()
1223
Jon Hallf15f7852014-05-20 10:37:23 -07001224 def find_host(self,RestIP,RestPort,RestAPI,hostMAC):
admin2a9548d2014-06-17 14:08:07 -07001225 retcode = 0 # number of hosts found with given MAC
1226 retswitch = [] # Switch DPID's of hosts found with MAC
1227 retport = [] # Switch port connected to to hosts found with MAC
Jon Hallf15f7852014-05-20 10:37:23 -07001228 foundHost = []
Jon Hallf89c8552014-04-02 13:14:06 -07001229 try:
Jon Hall2f42a672014-05-28 10:13:18 -07001230 ##### device rest API is: 'host:8080/wm/onos/topology/switches' ###
Jon Hallf89c8552014-04-02 13:14:06 -07001231 url ="http://%s:%s%s" %(RestIP,RestPort,RestAPI)
1232
1233 try:
1234 command = "curl -s %s" % (url)
1235 result = os.popen(command).read()
1236 parsedResult = json.loads(result)
1237 # print parsedResult
1238 except:
1239 print "REST IF %s has issue" % command
1240 parsedResult = ""
1241
1242 if parsedResult == "":
Jon Hallf15f7852014-05-20 10:37:23 -07001243 return (retcode, "Rest API has an error", retport)
Jon Hallf89c8552014-04-02 13:14:06 -07001244 else:
Jon Hallf15f7852014-05-20 10:37:23 -07001245 for host in enumerate(parsedResult):
1246 print host
1247 if (host[1] != []):
1248 try:
1249 foundHost = host[1]['mac']
1250 except:
1251 print "Error in detecting MAC address."
1252 print foundHost
1253 print hostMAC
1254 if foundHost == hostMAC:
1255 for switch in enumerate(host[1]['attachmentPoints']):
1256 retswitch.append(switch[1]['dpid'])
1257 retport.append(switch[1]['port'])
1258 retcode = retcode +1
1259 foundHost =''
1260 '''
Jon Hallf89c8552014-04-02 13:14:06 -07001261 for switch in enumerate(parsedResult):
1262 for port in enumerate(switch[1]['ports']):
admin2a9548d2014-06-17 14:08:07 -07001263 if ( port[1]['hosts'] != [] ):
Jon Hallf89c8552014-04-02 13:14:06 -07001264 try:
admin2a9548d2014-06-17 14:08:07 -07001265 foundHost = port[1]['hosts'][0]['ipv4addresses'][0]['ipv4']
Jon Hallf89c8552014-04-02 13:14:06 -07001266 except:
Jon Hallf15f7852014-05-20 10:37:23 -07001267 print "Error in detecting MAC address."
1268 if foundHost == hostMAC:
Jon Hallf89c8552014-04-02 13:14:06 -07001269 retswitch.append(switch[1]['dpid'])
1270 retport.append(port[1]['desc'])
admin2a9548d2014-06-17 14:08:07 -07001271 retmac.append(port[1]['hosts'][0]['mac'])
Jon Hallf89c8552014-04-02 13:14:06 -07001272 retcode = retcode +1
Jon Hallf15f7852014-05-20 10:37:23 -07001273 foundHost =''
1274 '''
1275 return(retcode, retswitch, retport)
Jon Hallae05dc22014-04-16 10:56:28 -07001276 except pexpect.EOF:
1277 main.log.error(self.name + ": EOF exception found")
1278 main.log.error(self.name + ": " + self.handle.before)
1279 main.cleanup()
1280 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -07001281 except:
1282 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1283 main.log.error( traceback.print_exc() )
1284 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1285 main.cleanup()
1286 main.exit()
SeanCorcoran29b70542014-05-14 14:53:42 -07001287
1288 def check_exceptions(self):
1289 '''
1290 Greps the logs for "xception"
1291 '''
1292 try:
1293 output = ''
1294 self.handle.sendline("")
Jon Halla78cf9a2014-05-16 10:49:30 -07001295 i = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
1296 #main.log.warn("first expect response: " +str(i))
SeanCorcoran29b70542014-05-14 14:53:42 -07001297 self.handle.sendline("cd "+self.home+"/onos-logs")
Jon Halla78cf9a2014-05-16 10:49:30 -07001298 self.handle.sendline("grep \"xception\" *")
1299 i = self.handle.expect(["\*",pexpect.EOF,pexpect.TIMEOUT])
1300 #main.log.warn("second expect response: " +str(i))
1301 i = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
1302 #main.log.warn("third expect response: " +str(i))
SeanCorcoran29b70542014-05-14 14:53:42 -07001303 response = self.handle.before
Jon Halla78cf9a2014-05-16 10:49:30 -07001304 count = 0
SeanCorcoran29b70542014-05-14 14:53:42 -07001305 for line in response.splitlines():
1306 if re.search("log:", line):
1307 output +="Exceptions found in " + line + "\n"
Jon Halla78cf9a2014-05-16 10:49:30 -07001308 count +=1
SeanCorcoran29b70542014-05-14 14:53:42 -07001309 elif re.search("std...:",line):
1310 output+="Exceptions found in " + line + "\n"
Jon Halla78cf9a2014-05-16 10:49:30 -07001311 count +=1
SeanCorcoran29b70542014-05-14 14:53:42 -07001312 else:
1313 pass
1314 #these should be the old logs
admin1723f1c2014-05-19 16:08:39 -07001315 main.log.report(str(count) + " Exceptions were found on "+self.name)
SeanCorcoran29b70542014-05-14 14:53:42 -07001316 return output
1317 except pexpect.TIMEOUT:
1318 main.log.error(self.name + ": Timeout exception found in check_exceptions function")
1319 except pexpect.EOF:
1320 main.log.error(self.name + ": EOF exception found")
1321 main.log.error(self.name + ": " + self.handle.before)
1322 main.cleanup()
1323 main.exit()
1324 except:
1325 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1326 main.log.error( traceback.print_exc() )
1327 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
1328 main.cleanup()
1329 main.exit()