blob: eef7a0be8569be1764c5eff9a86890ff0c898e82 [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
adminbae64d82013-08-01 10:50:15 -070028sys.path.append("../")
29from drivers.common.clidriver import CLI
30
31class OnosCliDriver(CLI):
32
33 def __init__(self):
34 super(CLI, self).__init__()
35
36 def connect(self,**connectargs):
Jon Halld8dc5772014-04-08 16:26:29 -070037 '''
38 Creates ssh handle for ONOS.
39 '''
Jon Hallf89c8552014-04-02 13:14:06 -070040 try:
41 for key in connectargs:
admine0eeea22014-04-14 10:22:46 -070042 vars(self)[key] = connectargs[key]
Jon Hallf89c8552014-04-02 13:14:06 -070043 self.home = "~/ONOS"
44 for key in self.options:
admine0eeea22014-04-14 10:22:46 -070045 if key == "home":
46 self.home = self.options['home']
47 break
adminbae64d82013-08-01 10:50:15 -070048
Jon Hallf89c8552014-04-02 13:14:06 -070049
50 self.name = self.options['name']
51 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 -070052
Jon Hallf89c8552014-04-02 13:14:06 -070053 if self.handle:
Jon Hallf89c8552014-04-02 13:14:06 -070054 return self.handle
55 else :
56 main.log.info("NO ONOS HANDLE")
57 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -070058 except pexpect.EOF:
59 main.log.error(self.name + ": EOF exception found")
60 main.log.error(self.name + ": " + self.handle.before)
61 main.cleanup()
62 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -070063 except:
64 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
65 main.log.error( traceback.print_exc() )
66 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
67 main.cleanup()
68 main.exit()
adminbae64d82013-08-01 10:50:15 -070069
70 def start(self):
Jon Halld8dc5772014-04-08 16:26:29 -070071 '''
72 Starts ONOS on remote machine.
73 Returns false if any errors were encountered.
74 '''
James Leec9cacaf2014-04-08 09:17:39 -070075 try:
Jon Hallf89c8552014-04-02 13:14:06 -070076 self.handle.sendline("")
Jon Hallae05dc22014-04-16 10:56:28 -070077 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
Jon Hall4a2b0482014-04-18 16:29:26 -070078 self.handle.sendline("cd "+self.home)
79 self.handle.sendline("./onos.sh core start")
Jon Hallae05dc22014-04-16 10:56:28 -070080 i=self.handle.expect(["STARTED","FAILED",pexpect.EOF,pexpect.TIMEOUT])
81 response = self.handle.before + str(self.handle.after)
Jon Hallf89c8552014-04-02 13:14:06 -070082 if i==0:
Jon Hallae05dc22014-04-16 10:56:28 -070083 j = self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], timeout=60)
84 if re.search("Killed",response):
85 main.log.warn(self.name + ": Killed existing process")
86 if j==0:
Jon Hallf89c8552014-04-02 13:14:06 -070087 main.log.info(self.name + ": ONOS Started ")
Jon Hallae05dc22014-04-16 10:56:28 -070088 return main.TRUE
89 elif j==1:
90 main.log.error(self.name + ": EOF exception found")
91 main.log.error(self.name + ": " + self.handle.before)
92 main.cleanup()
93 main.exit()
94 elif j==2:
Jon Hallf89c8552014-04-02 13:14:06 -070095 main.log.info(self.name + ": ONOS NOT Started, stuck while waiting for it to start ")
96 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -070097 else:
98 main.log.warn(self.name +": Unexpected response in start")
99 return main.TRUE
Jon Hallf89c8552014-04-02 13:14:06 -0700100 elif i==1:
Jon Hallae05dc22014-04-16 10:56:28 -0700101 main.log.error(self.name + ": ONOS Failed to start")
adminbae64d82013-08-01 10:50:15 -0700102 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700103 elif i==2:
104 main.log.error(self.name + ": EOF exception found")
105 main.log.error(self.name + ": " + self.handle.before)
106 main.cleanup()
107 main.exit()
108 elif i==3:
109 main.log.error(self.name + ": ONOS timedout while starting")
110 return main.FALSE
111 else:
112 main.log.error(self.name + ": ONOS start expect script missed something... ")
adminbae64d82013-08-01 10:50:15 -0700113 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700114 except pexpect.EOF:
115 main.log.error(self.name + ": EOF exception found")
116 main.log.error(self.name + ": " + self.handle.before)
117 main.cleanup()
118 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700119 except:
120 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
121 main.log.error( traceback.print_exc() )
122 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
123 main.cleanup()
124 main.exit()
admine0ae8202013-08-28 11:51:43 -0700125
adminbae64d82013-08-01 10:50:15 -0700126 def start_rest(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700127 '''
128 Starts the rest server on ONOS.
129 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700130 try:
Jon Hall4a2b0482014-04-18 16:29:26 -0700131 self.handle.sendline("cd "+self.home)
132 response = self.execute(cmd= "./start-rest.sh start",prompt="\$",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700133 if re.search("admin",response):
134 main.log.info(self.name + ": Rest Server Started Successfully")
135 time.sleep(5)
136 return main.TRUE
137 else :
James Leec9cacaf2014-04-08 09:17:39 -0700138 main.log.warn(self.name + ": Failed to start Rest Server")
139 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700140 except pexpect.EOF:
141 main.log.error(self.name + ": EOF exception found")
142 main.log.error(self.name + ": " + self.handle.before)
143 main.cleanup()
144 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700145 except:
146 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
147 main.log.error( traceback.print_exc() )
148 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
149 main.cleanup()
150 main.exit()
151
adminbae64d82013-08-01 10:50:15 -0700152 def status(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700153 '''
154 Called onos.sh core status and returns TRUE/FALSE accordingly
155 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700156 try:
157 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Hall4a2b0482014-04-18 16:29:26 -0700158 self.handle.sendline("cd "+self.home)
159 response = self.execute(cmd="./onos.sh core status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700160 self.execute(cmd="\n",prompt="\$",timeout=10)
161 if re.search("1\sinstance\sof\sonos\srunning",response):
162 return main.TRUE
163 elif re.search("0\sinstance\sof\sonos\srunning",response):
164 return main.FALSE
165 else :
166 main.log.info( self.name + " WARNING: status recieved unknown response")
167 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700168 except pexpect.EOF:
169 main.log.error(self.name + ": EOF exception found")
170 main.log.error(self.name + ": " + self.handle.before)
171 main.cleanup()
172 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700173 except:
174 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
175 main.log.error( traceback.print_exc() )
176 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
177 main.cleanup()
178 main.exit()
179
adminbae64d82013-08-01 10:50:15 -0700180
181 def isup(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700182 '''
183 A more complete check to see if ONOS is up and running properly.
184 First, it checks if the process is up.
185 Second, it reads the logs for "Exception: Connection refused"
186 Third, it makes sure the logs are actually moving.
187 returns TRUE/FALSE accordingly.
188 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700189 try:
190 self.execute(cmd="\n",prompt="\$",timeout=10)
Jon Hall4a2b0482014-04-18 16:29:26 -0700191 self.handle.sendline("cd "+self.home)
192 response = self.execute(cmd= "./onos.sh core status ",prompt="running",timeout=10)
Jon Hallf89c8552014-04-02 13:14:06 -0700193 self.execute(cmd="\n",prompt="\$",timeout=10)
194 tail1 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
195 time.sleep(30)
196 self.execute(cmd="\n",prompt="\$",timeout=10)
197 tail2 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
198 pattern = '(.*)1 instance(.*)'
199 pattern2 = '(.*)Exception: Connection refused(.*)'
200 # if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
201
202 if re.search(pattern, response):
203 main.log.info(self.name + ": ONOS process is running...")
204 if tail1 == tail2:
205 main.log.error(self.name + ": ONOS is frozen...")#logs aren't moving
206 return main.FALSE
207 elif re.search( pattern2,tail1 ):
James Leec9cacaf2014-04-08 09:17:39 -0700208 main.log.info(self.name + ": Connection Refused found in onos log")
Jon Hallf89c8552014-04-02 13:14:06 -0700209 return main.FALSE
210 elif re.search( pattern2,tail2 ):
James Leec9cacaf2014-04-08 09:17:39 -0700211 main.log.info(self.name + ": Connection Refused found in onos log")
Jon Hallf89c8552014-04-02 13:14:06 -0700212 return main.FALSE
213 else:
214 main.log.info(self.name + ": Onos log is moving! It's looking good!")
215 return main.TRUE
adminbae64d82013-08-01 10:50:15 -0700216 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700217 main.log.error(self.name + ": ONOS process not running...")
218 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700219 except pexpect.EOF:
220 main.log.error(self.name + ": EOF exception found")
221 main.log.error(self.name + ": " + self.handle.before)
222 main.cleanup()
223 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700224 except:
225 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
226 main.log.error( traceback.print_exc() )
227 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
228 main.cleanup()
229 main.exit()
adminbae64d82013-08-01 10:50:15 -0700230
Jon Hallf89c8552014-04-02 13:14:06 -0700231
232
James Leec9cacaf2014-04-08 09:17:39 -0700233 def rest_status(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700234 '''
235 Checks if the rest server is running.
236 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700237 try:
238 response = self.execute(cmd= self.home + "/start-rest.sh status ",prompt="running",timeout=10)
239 if re.search("rest\sserver\sis\srunning",response):
240 main.log.info(self.name + ": Rest Server is running")
Jon Hallae05dc22014-04-16 10:56:28 -0700241 return main.TRUE
Jon Hallf89c8552014-04-02 13:14:06 -0700242 elif re.search("rest\sserver\sis\snot\srunning",response):
243 main.log.warn(self.name + ": Rest Server is not Running")
Jon Hallae05dc22014-04-16 10:56:28 -0700244 return main.FALSE
Jon Hallf89c8552014-04-02 13:14:06 -0700245 else :
246 main.log.error(self.name + ": No response" +response)
Jon Hallae05dc22014-04-16 10:56:28 -0700247 return main.FALSE
248 except pexpect.EOF:
249 main.log.error(self.name + ": EOF exception found")
250 main.log.error(self.name + ": " + self.handle.before)
251 main.cleanup()
252 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700253 except:
254 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
255 main.log.error( traceback.print_exc() )
256 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
257 main.cleanup()
258 main.exit()
259
260
adminbae64d82013-08-01 10:50:15 -0700261 def stop(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700262 '''
263 Runs ./onos.sh core stop to stop ONOS
264 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700265 try:
266 self.handle.sendline("")
Jon Hallae05dc22014-04-16 10:56:28 -0700267 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
Jon Hall4a2b0482014-04-18 16:29:26 -0700268 self.handle.sendline("cd "+self.home)
269 self.handle.sendline("./onos.sh core stop")
Jon Hallae05dc22014-04-16 10:56:28 -0700270 i=self.handle.expect(["Stop",pexpect.EOF,pexpect.TIMEOUT])
271 self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], 60)
James Leec9cacaf2014-04-08 09:17:39 -0700272 result = self.handle.before
Jon Hallf89c8552014-04-02 13:14:06 -0700273 if re.search("Killed", result):
274 main.log.info(self.name + ": ONOS Killed Successfully")
275 return main.TRUE
276 else :
277 main.log.warn(self.name + ": ONOS wasn't running")
278 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700279 except pexpect.EOF:
280 main.log.error(self.name + ": EOF exception found")
281 main.log.error(self.name + ": " + self.handle.before)
282 main.cleanup()
283 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700284 except:
285 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
286 main.log.error( traceback.print_exc() )
287 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
288 main.cleanup()
289 main.exit()
290
adminbae64d82013-08-01 10:50:15 -0700291
292 def rest_stop(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700293 '''
294 Runs ./start-rest.sh stop to stop ONOS rest server
295 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700296 try:
297 response = self.execute(cmd= self.home + "/start-rest.sh stop ",prompt="killing",timeout=10)
298 self.execute(cmd="\n",prompt="\$",timeout=10)
299 if re.search("killing", response):
300 main.log.info(self.name + ": Rest Server Stopped")
301 return main.TRUE
302 else :
303 main.log.error(self.name + ": Failed to Stop, Rest Server is not Running")
304 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700305 except pexpect.EOF:
306 main.log.error(self.name + ": EOF exception found")
307 main.log.error(self.name + ": " + self.handle.before)
308 main.cleanup()
309 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700310 except:
311 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
312 main.log.error( traceback.print_exc() )
313 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
314 main.cleanup()
315 main.exit()
316
317
adminbae64d82013-08-01 10:50:15 -0700318 def disconnect(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700319 '''
320 Called when Test is complete to disconnect the ONOS handle.
321 '''
adminaeedddd2013-08-02 15:14:15 -0700322 response = ''
323 try:
adminbae64d82013-08-01 10:50:15 -0700324 self.handle.sendline("exit")
adminaeedddd2013-08-02 15:14:15 -0700325 self.handle.expect("closed")
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)
James Leec9cacaf2014-04-08 09:17:39 -0700329 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700330 main.log.error(self.name + ": Connection failed to the host")
adminbae64d82013-08-01 10:50:15 -0700331 response = main.FALSE
adminaeedddd2013-08-02 15:14:15 -0700332 return response
333
Jon Hall76f2c462014-04-17 11:37:15 -0700334 def print_version(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700335 '''
336 Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
337 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700338 try:
339 self.handle.sendline("export TERM=xterm-256color")
340 self.handle.expect("xterm-256color")
James Leec9cacaf2014-04-08 09:17:39 -0700341 self.handle.expect("\$")
adminf939f8b2014-04-03 17:22:56 -0700342 self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller | grep -A 5 \"commit\"; cd \.\.")
Jon Hallf89c8552014-04-02 13:14:06 -0700343 self.handle.expect("cd ..")
344 self.handle.expect("\$")
admine0eeea22014-04-14 10:22:46 -0700345 response=(self.name +": \n"+ str(self.handle.before + self.handle.after))
346 main.log.report(response)
Jon Hall76f2c462014-04-17 11:37:15 -0700347 except pexpect.EOF:
348 main.log.error(self.name + ": EOF exception found")
349 main.log.error(self.name + ": " + self.handle.before)
350 main.cleanup()
351 main.exit()
352 except:
353 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
354 main.log.error( traceback.print_exc() )
355 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
356 main.cleanup()
357 def get_version(self):
358 '''
359 Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
360 '''
361 try:
362 self.handle.sendline("export TERM=xterm-256color")
363 self.handle.expect("xterm-256color")
364 self.handle.expect("\$")
365 self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller | grep -A 5 \"commit\"; cd \.\.")
366 self.handle.expect("cd ..")
367 self.handle.expect("\$")
368 response=(self.name +": \n"+ str(self.handle.before + self.handle.after))
admine0eeea22014-04-14 10:22:46 -0700369 lines=response.splitlines()
370 for line in lines:
371 print line
372 return lines[2]
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)
376 main.cleanup()
377 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700378 except:
379 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
380 main.log.error( traceback.print_exc() )
381 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
382 main.cleanup()
383 main.exit()
adminbae64d82013-08-01 10:50:15 -0700384
Jon Hall4a2b0482014-04-18 16:29:26 -0700385 def add_flow(self, testONip, user = "admin", password = "", flowDef = "/flowdef.txt"):
Jon Halld8dc5772014-04-08 16:26:29 -0700386 '''
387 Copies the flowdef file from TestStation -> ONOS machine
388 Then runs ./add_flow.py to add the flows to ONOS
389 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700390 try:
391 main.log.info("Adding Flows...")
392 self.handle.sendline("scp %s@%s:%s /tmp/flowtmp" %(user,testONip,flowDef))
393 i=self.handle.expect(['[pP]assword:', '100%', pexpect.TIMEOUT],30)
394 if(i==0):
395 self.handle.sendline("%s" %(password))
396 self.handle.sendline("")
397 self.handle.expect("100%")
398 self.handle.expect("\$", 30)
399 self.handle.sendline(self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
400 self.handle.expect("\$", 1000)
401 main.log.info("Flows added")
402 return main.TRUE
403
404 elif(i==1):
405 self.handle.sendline("")
406 self.handle.expect("\$", 10)
407 self.handle.sendline( self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
408 self.handle.expect("\$", 1000)
409 main.log.info("Flows added")
410 return main.TRUE
411
412 elif(i==2):
413 main.log.error("Flow Def file SCP Timed out...")
414 return main.FALSE
415
416 else:
417 main.log.error("Failed to add flows...")
James Leec9cacaf2014-04-08 09:17:39 -0700418 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700419 except pexpect.EOF:
420 main.log.error(self.name + ": EOF exception found")
421 main.log.error(self.name + ": " + self.handle.before)
422 main.cleanup()
423 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700424 except:
425 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
426 main.log.error( traceback.print_exc() )
427 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
428 main.cleanup()
429 main.exit()
430
adminbae64d82013-08-01 10:50:15 -0700431
432 def delete_flow(self, *delParams):
Jon Halld8dc5772014-04-08 16:26:29 -0700433 '''
434 Deletes a specific flow, a range of flows, or all flows.
435 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700436 try:
437 if len(delParams)==1:
438 if str(delParams[0])=="all":
439 main.log.info(self.name + ": Deleting ALL flows...")
440 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh all",prompt="done",timeout=150)
441 self.handle.sendline(self.home + "/web/delete_flow.py all")
442 self.handle.expect("delete_flow")
443 self.handle.expect("\$",1000)
444 main.log.info(self.name + ": Flows deleted")
445 else:
446 main.log.info(self.name + ": Deleting flow "+str(delParams[0])+"...")
447 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0]),prompt="done",timeout=150)
448 #self.execute(cmd="\n",prompt="\$",timeout=60)
449 self.handle.sendline(self.home +"/web/delete_flow.py %d" % int(delParams[0]))
450 self.handle.expect("delete_flow")
451 self.handle.expect("\$",60)
452 main.log.info(self.name + ": Flow deleted")
453 elif len(delParams)==2:
454 main.log.info(self.name + ": Deleting flows "+str(delParams[0])+" through "+str(delParams[1])+"...")
455 #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0])+" "+str(delParams[1]),prompt="done",timeout=150)
456 #self.execute(cmd="\n",prompt="\$",timeout=60)
457 self.handle.sendline(self.home + "/web/delete_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
458 self.handle.expect("delete_flow")
459 self.handle.expect("\$",600)
460 main.log.info(self.name + ": Flows deleted")
Jon Hallae05dc22014-04-16 10:56:28 -0700461 except pexpect.EOF:
462 main.log.error(self.name + ": EOF exception found")
463 main.log.error(self.name + ": " + self.handle.before)
464 main.cleanup()
465 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700466 except:
467 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
468 main.log.error( traceback.print_exc() )
469 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
470 main.cleanup()
471 main.exit()
adminbae64d82013-08-01 10:50:15 -0700472
473 def check_flow(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700474 '''
475 Calls the ./get_flow.py all and checks:
476 - If each FlowPath has at least one FlowEntry
477 - That there are no "NOT"s found
478 returns TRUE/FALSE
479 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700480 try:
481 flowEntryDetect = 1
482 count = 0
483 self.handle.sendline("clear")
484 time.sleep(1)
485 self.handle.sendline(self.home + "/web/get_flow.py all")
486 self.handle.expect("get_flow")
487 while 1:
488 i=self.handle.expect(['FlowPath','FlowEntry','NOT','\$',pexpect.TIMEOUT],timeout=180)
489 if i==0:
490 count = count + 1
491 if flowEntryDetect == 0:
492 main.log.info(self.name + ": FlowPath without FlowEntry")
493 return main.FALSE
494 else:
495 flowEntryDetect = 0
496 elif i==1:
497 flowEntryDetect = 1
498 elif i==2:
499 main.log.error(self.name + ": Found a NOT")
adminbae64d82013-08-01 10:50:15 -0700500 return main.FALSE
Jon Hallf89c8552014-04-02 13:14:06 -0700501 elif i==3:
502 if count == 0:
503 main.log.info(self.name + ": There don't seem to be any flows here...")
504 return main.FALSE
505 else:
506 main.log.info(self.name + ": All flows pass")
507 main.log.info(self.name + ": Number of FlowPaths: "+str(count))
508 return main.TRUE
509 elif i==4:
James Leec9cacaf2014-04-08 09:17:39 -0700510 main.log.error(self.name + ":Check_flow() - Command Timeout!")
Jon Hallf89c8552014-04-02 13:14:06 -0700511 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700512 except pexpect.EOF:
513 main.log.error(self.name + ": EOF exception found")
514 main.log.error(self.name + ": " + self.handle.before)
515 main.cleanup()
516 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700517 except:
518 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
519 main.log.error( traceback.print_exc() )
520 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
521 main.cleanup()
522 main.exit()
adminbae64d82013-08-01 10:50:15 -0700523
524 def get_flow(self, *flowParams):
Jon Halld8dc5772014-04-08 16:26:29 -0700525 '''
526 Returns verbose output of ./get_flow.py
527 '''
528 try:
529 if len(flowParams)==1:
530 if str(flowParams[0])=="all":
531 self.execute(cmd="\n",prompt="\$",timeout=60)
532 main.log.info(self.name + ": Getting all flow data...")
533 data = self.execute(cmd=self.home + "/scripts/TestON_get_flow.sh all",prompt="done",timeout=150)
534 self.execute(cmd="\n",prompt="\$",timeout=60)
535 return data
536 else:
537 main.log.info(self.name + ": Retrieving flow "+str(flowParams[0])+" data...")
538 data = self.execute(cmd=self.home +"/scripts/TestON_get_flow.sh "+str(flowParams[0]),prompt="done",timeout=150)
539 self.execute(cmd="\n",prompt="\$",timeout=60)
540 return data
541 elif len(flowParams)==5:
542 main.log.info(self.name + ": Retrieving flow installer data...")
543 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)
544 self.execute(cmd="\n",prompt="\$",timeout=60)
545 return data
546 elif len(flowParams)==4:
547 main.log.info(self.name + ": Retrieving flow endpoints...")
548 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)
549 self.execute(cmd="\n",prompt="\$",timeout=60)
550 return data
Jon Hallae05dc22014-04-16 10:56:28 -0700551 except pexpect.EOF:
552 main.log.error(self.name + ": EOF exception found")
553 main.log.error(self.name + ": " + self.handle.before)
554 main.cleanup()
555 main.exit()
Jon Halld8dc5772014-04-08 16:26:29 -0700556 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700557 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
558 main.log.error( traceback.print_exc() )
559 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
560 main.cleanup()
561 main.exit()
adminbae64d82013-08-01 10:50:15 -0700562
563
Jon Hall8060af02014-04-14 14:17:58 -0700564# http://localhost:8080/wm/onos/ng/switches/json
565# http://localhost:8080/wm/onos/ng/links/json
566# http://localhost:8080/wm/onos/registry/controllers/json
567# http://localhost:8080/wm/onos/registry/switches/json"
adminbae64d82013-08-01 10:50:15 -0700568
569 def get_json(self, url):
Jon Halld8dc5772014-04-08 16:26:29 -0700570 '''
571 Helper functions used to parse the json output of a rest call
572 '''
adminbae64d82013-08-01 10:50:15 -0700573 try:
Jon Hallf89c8552014-04-02 13:14:06 -0700574 try:
575 command = "curl -s %s" % (url)
576 result = os.popen(command).read()
577 parsedResult = json.loads(result)
578 except:
579 print "REST IF %s has issue" % command
580 parsedResult = ""
581
582 if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
583 print "REST %s returned code %s" % (command, parsedResult['code'])
584 parsedResult = ""
James Leec9cacaf2014-04-08 09:17:39 -0700585 return parsedResult
Jon Hallae05dc22014-04-16 10:56:28 -0700586 except pexpect.EOF:
587 main.log.error(self.name + ": EOF exception found")
588 main.log.error(self.name + ": " + self.handle.before)
589 main.cleanup()
590 main.exit()
adminbae64d82013-08-01 10:50:15 -0700591 except:
Jon Hallf89c8552014-04-02 13:14:06 -0700592 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
593 main.log.error( traceback.print_exc() )
594 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
595 main.cleanup()
596 main.exit()
adminbae64d82013-08-01 10:50:15 -0700597
Jon Hallf89c8552014-04-02 13:14:06 -0700598 def check_switch(self,RestIP,correct_nr_switch, RestPort ="8080" ):
Jon Halld8dc5772014-04-08 16:26:29 -0700599 '''
600 Used by check_status
601 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700602 try:
603 buf = ""
604 retcode = 0
admine0eeea22014-04-14 10:22:46 -0700605 url="http://%s:%s/wm/onos/ng/switches/json" % (RestIP, RestPort)
Jon Hallf89c8552014-04-02 13:14:06 -0700606 parsedResult = self.get_json(url)
607 if parsedResult == "":
608 retcode = 1
609 return (retcode, "Rest API has an issue")
610 url = "http://%s:%s/wm/onos/registry/switches/json" % (RestIP, RestPort)
611 registry = self.get_json(url)
612
613 if registry == "":
614 retcode = 1
615 return (retcode, "Rest API has an issue")
616
617 cnt = 0
618 active = 0
adminbae64d82013-08-01 10:50:15 -0700619
Jon Hallf89c8552014-04-02 13:14:06 -0700620 for s in parsedResult:
621 cnt += 1
James Leec9cacaf2014-04-08 09:17:39 -0700622 if s['state'] == "ACTIVE":
Jon Hallf89c8552014-04-02 13:14:06 -0700623 active += 1
adminbae64d82013-08-01 10:50:15 -0700624
Jon Hallf89c8552014-04-02 13:14:06 -0700625 buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
626 if correct_nr_switch != cnt:
627 buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
628 retcode = 1
adminbae64d82013-08-01 10:50:15 -0700629
Jon Hallf89c8552014-04-02 13:14:06 -0700630 if correct_nr_switch != active:
631 buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
632 retcode = 1
633
634 return (retcode, buf)
Jon Hallae05dc22014-04-16 10:56:28 -0700635 except pexpect.EOF:
636 main.log.error(self.name + ": EOF exception found")
637 main.log.error(self.name + ": " + self.handle.before)
638 main.cleanup()
639 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700640 except:
641 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
642 main.log.error( traceback.print_exc() )
643 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
644 main.cleanup()
645 main.exit()
adminbae64d82013-08-01 10:50:15 -0700646
Jon Hallf89c8552014-04-02 13:14:06 -0700647 def check_link(self,RestIP, nr_links, RestPort = "8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700648 '''
649 Used by check_status
650 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700651 try:
652 buf = ""
653 retcode = 0
654
admine0eeea22014-04-14 10:22:46 -0700655 url = "http://%s:%s/wm/onos/ng/links/json" % (RestIP, RestPort)
Jon Hallf89c8552014-04-02 13:14:06 -0700656 parsedResult = self.get_json(url)
657
658 if parsedResult == "":
659 retcode = 1
660 return (retcode, "Rest API has an issue")
661
662 buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
663 intra = 0
664 interlink=0
665
666 for s in parsedResult:
James Leec9cacaf2014-04-08 09:17:39 -0700667 intra = intra + 1
Jon Hallf89c8552014-04-02 13:14:06 -0700668
669 if intra != nr_links:
670 buf += "link fail\n"
671 retcode = 1
672
673 return (retcode, buf)
Jon Hallae05dc22014-04-16 10:56:28 -0700674 except pexpect.EOF:
675 main.log.error(self.name + ": EOF exception found")
676 main.log.error(self.name + ": " + self.handle.before)
677 main.cleanup()
678 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700679 except:
680 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
681 main.log.error( traceback.print_exc() )
682 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
683 main.cleanup()
684 main.exit()
adminbae64d82013-08-01 10:50:15 -0700685
Jon Hallf89c8552014-04-02 13:14:06 -0700686 def check_status_report(self, ip, numoswitch, numolink, port="8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700687 '''
688 Checks the number of swithes & links that ONOS sees against the supplied values.
689 Writes to the report log.
690 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700691 try:
James Leec9cacaf2014-04-08 09:17:39 -0700692 main.log.info(self.name + ": Making some rest calls...")
Jon Hallf89c8552014-04-02 13:14:06 -0700693 switch = self.check_switch(ip, int(numoswitch), port)
694 link = self.check_link(ip, int(numolink), port)
695 value = switch[0]
696 value += link[0]
697 main.log.report( self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
698 if value != 0:
699 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -0700700 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700701 # "PASS"
702 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -0700703 except pexpect.EOF:
704 main.log.error(self.name + ": EOF exception found")
705 main.log.error(self.name + ": " + self.handle.before)
706 main.cleanup()
707 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700708 except:
709 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
710 main.log.error( traceback.print_exc() )
711 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
712 main.cleanup()
713 main.exit()
adminbae64d82013-08-01 10:50:15 -0700714
Jon Hallf89c8552014-04-02 13:14:06 -0700715 def check_status(self, ip, numoswitch, numolink, port = "8080"):
Jon Halld8dc5772014-04-08 16:26:29 -0700716 '''
717 Checks the number of swithes & links that ONOS sees against the supplied values.
718 Writes to the main log.
719 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700720 try:
James Leec9cacaf2014-04-08 09:17:39 -0700721 main.log.info(self.name + ": Making some rest calls...")
Jon Hallf89c8552014-04-02 13:14:06 -0700722 switch = self.check_switch(ip, int(numoswitch), port)
723 link = self.check_link(ip, int(numolink), port)
724 value = switch[0]
725 value += link[0]
726 main.log.info(self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
727 if value != 0:
728 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -0700729 else:
Jon Hallf89c8552014-04-02 13:14:06 -0700730 # "PASS"
731 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -0700732 except pexpect.EOF:
733 main.log.error(self.name + ": EOF exception found")
734 main.log.error(self.name + ": " + self.handle.before)
735 main.cleanup()
736 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700737 except:
738 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
739 main.log.error( traceback.print_exc() )
740 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
741 main.cleanup()
742 main.exit()
adminbae64d82013-08-01 10:50:15 -0700743
adminbae64d82013-08-01 10:50:15 -0700744 def check_for_no_exceptions(self):
Jon Halld8dc5772014-04-08 16:26:29 -0700745 '''
746 TODO: Rewrite
747 Used by CassndraCheck.py to scan ONOS logs for Exceptions
748 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700749 try:
750 self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
James Leec9cacaf2014-04-08 09:17:39 -0700751 self.handle.expect("\$ dsh")
Jon Hallf89c8552014-04-02 13:14:06 -0700752 self.handle.expect("\$")
753 output = self.handle.before
James Leec9cacaf2014-04-08 09:17:39 -0700754 main.log.info(self.name + ": " + output )
Jon Hallf89c8552014-04-02 13:14:06 -0700755 if re.search("Exception",output):
756 return main.FALSE
757 else :
758 return main.TRUE
Jon Hallae05dc22014-04-16 10:56:28 -0700759 except pexpect.EOF:
760 main.log.error(self.name + ": EOF exception found")
761 main.log.error(self.name + ": " + self.handle.before)
762 main.cleanup()
763 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700764 except:
765 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
766 main.log.error( traceback.print_exc() )
767 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
768 main.cleanup()
769 main.exit()
770
771
admine0eeea22014-04-14 10:22:46 -0700772 def git_pull(self, comp1=""):
Jon Halld8dc5772014-04-08 16:26:29 -0700773 '''
Jon Halld8dc5772014-04-08 16:26:29 -0700774 Assumes that "git pull" works without login
admine0eeea22014-04-14 10:22:46 -0700775
776 This function will perform a git pull on the ONOS instance.
777 If used as git_pull("NODE") it will do git pull + NODE. This is
778 for the purpose of pulling from other nodes if necessary.
779
780 Otherwise, this function will perform a git pull in the
781 ONOS repository. If it has any problems, it will return main.ERROR
782 If it successfully does a git_pull, it will return a 1.
783 If it has no updates, it will return a 0.
784
Jon Halld8dc5772014-04-08 16:26:29 -0700785 '''
Jon Hallae05dc22014-04-16 10:56:28 -0700786 try:
787 main.log.info(self.name + ": Stopping ONOS")
788 self.stop()
789 self.handle.sendline("cd " + self.home)
790 self.handle.expect("ONOS\$")
791 if comp1=="":
792 self.handle.sendline("git pull")
793 else:
794 self.handle.sendline("git pull " + comp1)
795
796 uptodate = 0
SeanCorcoran20bd6fc2014-04-16 17:10:30 -0700797 i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting'],timeout=1800)
Jon Hallae05dc22014-04-16 10:56:28 -0700798 #debug
799 #main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
800 if i==0:
801 main.log.error(self.name + ": Git pull had some issue...")
802 return main.ERROR
803 elif i==1:
804 main.log.error(self.name + ": Git Pull Asking for username!!! BADD!")
805 return main.ERROR
806 elif i==2:
807 main.log.info(self.name + ": Git Pull - pulling repository now")
808 self.handle.expect("ONOS\$", 120)
809 return 0
810 elif i==3:
811 main.log.error(self.name + ": Git Pull - TIMEOUT")
812 return main.ERROR
813 elif i==4:
814 main.log.info(self.name + ": Git Pull - Already up to date")
815 return 1
816 elif i==5:
817 main.log.info(self.name + ": Git Pull - Aborting... Are there conflicting git files?")
818 return main.ERROR
819 else:
820 main.log.error(self.name + ": Git Pull - Unexpected response, check for pull errors")
821 return main.ERROR
822 except pexpect.EOF:
823 main.log.error(self.name + ": EOF exception found")
824 main.log.error(self.name + ": " + self.handle.before)
825 main.cleanup()
826 main.exit()
827 except:
828 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
829 main.log.error( traceback.print_exc() )
830 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
831 main.cleanup()
832 main.exit()
admine0eeea22014-04-14 10:22:46 -0700833#********************************************************
834
835
admin7373a812014-04-16 09:49:02 -0700836 def git_compile(self):
Jon Hallae05dc22014-04-16 10:56:28 -0700837 '''
838 Compiles ONOS
839 First runs mvn clean then mvn compile
840 '''
841 try:
842 main.log.info(self.name + ": mvn clean")
admin8fc02822014-04-16 13:31:23 -0700843 self.handle.sendline("cd " + self.home)
Jon Hallae05dc22014-04-16 10:56:28 -0700844 self.handle.sendline("mvn clean")
845 while 1:
Jon Hall1636f942014-04-17 10:07:23 -0700846 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 -0700847 if i == 0:
Jon Hall1636f942014-04-17 10:07:23 -0700848 main.log.error(self.name + ":There is insufficient memory for the Java Runtime Environment to continue.")
Jon Hallae05dc22014-04-16 10:56:28 -0700849 return main.FALSE
850 elif i == 1:
Jon Hall1636f942014-04-17 10:07:23 -0700851 main.log.error(self.name + ": Clean failure!")
852 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700853 elif i == 2:
Jon Hall1636f942014-04-17 10:07:23 -0700854 main.log.info(self.name + ": Clean success!")
855 elif i == 3:
admin8fc02822014-04-16 13:31:23 -0700856 main.log.info(self.name + ": Clean complete")
Jon Hallae05dc22014-04-16 10:56:28 -0700857 break;
Jon Hall1636f942014-04-17 10:07:23 -0700858 elif i == 4:
Jon Hallae05dc22014-04-16 10:56:28 -0700859 main.log.error(self.name + ": mvn clean TIMEOUT!")
860 return main.FALSE
Jon Hall1636f942014-04-17 10:07:23 -0700861 else:
862 main.log.error(self.name + ": unexpected response from mvn clean")
863 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700864
865 main.log.info(self.name + ": mvn compile")
866 self.handle.sendline("mvn compile")
867 while 1:
Jon Hall1636f942014-04-17 10:07:23 -0700868 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 -0700869 if i == 0:
Jon Hall1636f942014-04-17 10:07:23 -0700870 main.log.error(self.name + ":There is insufficient memory for the Java Runtime Environment to continue.")
871 return main.FALSE
872 if i == 1:
Jon Hallae05dc22014-04-16 10:56:28 -0700873 main.log.error(self.name + ": Build failure!")
874 return main.FALSE
Jon Hall1636f942014-04-17 10:07:23 -0700875 elif i == 2:
Jon Hallae05dc22014-04-16 10:56:28 -0700876 main.log.info(self.name + ": Build success!")
877 return main.TRUE
Jon Hall1636f942014-04-17 10:07:23 -0700878 elif i == 3:
Jon Hallae05dc22014-04-16 10:56:28 -0700879 main.log.info(self.name + ": Build complete")
880 return main.TRUE
Jon Hall1636f942014-04-17 10:07:23 -0700881 elif i == 4:
Jon Hallae05dc22014-04-16 10:56:28 -0700882 main.log.error(self.name + ": mvn compile TIMEOUT!")
883 return main.FALSE
884 else:
Jon Hall1636f942014-04-17 10:07:23 -0700885 main.log.error(self.name + ": unexpected response from mvn compile")
886 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700887 except pexpect.EOF:
888 main.log.error(self.name + ": EOF exception found")
889 main.log.error(self.name + ": " + self.handle.before)
890 main.cleanup()
891 main.exit()
892 except:
893 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
894 main.log.error( traceback.print_exc() )
895 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
896 main.cleanup()
897 main.exit()
admin4a58db92013-09-30 12:04:54 -0700898
Jon Hallf89c8552014-04-02 13:14:06 -0700899 def tcpdump(self, intf = "eth0"):
Jon Hallae05dc22014-04-16 10:56:28 -0700900 '''
901 Runs tpdump on an intferface and saves in onos-logs under the ONOS home directory
902 intf can be specified, or the default eth0 is used
903 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700904 try:
905 self.handle.sendline("")
906 self.handle.expect("\$")
Jon Hall26f316b2014-04-11 11:21:25 -0700907 self.handle.sendline("sudo tcpdump -n -i "+ intf + " -s0 -w " + self.home +"/onos-logs/tcpdump &")
Jon Hallf89c8552014-04-02 13:14:06 -0700908 i=self.handle.expect(['No\ssuch\device','listening\son',pexpect.TIMEOUT],timeout=10)
909 if i == 0:
910 main.log.error(self.name + ": tcpdump - No such device exists. tcpdump attempted on: " + intf)
911 return main.FALSE
James Leec9cacaf2014-04-08 09:17:39 -0700912 elif i == 1:
Jon Hallf89c8552014-04-02 13:14:06 -0700913 main.log.info(self.name + ": tcpdump started on " + intf)
914 return main.TRUE
James Leec9cacaf2014-04-08 09:17:39 -0700915 elif i == 2:
Jon Hallf89c8552014-04-02 13:14:06 -0700916 main.log.error(self.name + ": tcpdump command timed out! Check interface name, given interface was: " + intf)
917 return main.FALSE
918 else:
919 main.log.error(self.name + ": tcpdump - unexpected response")
920 return main.FALSE
Jon Hallae05dc22014-04-16 10:56:28 -0700921 except pexpect.EOF:
922 main.log.error(self.name + ": EOF exception found")
923 main.log.error(self.name + ": " + self.handle.before)
924 main.cleanup()
925 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700926 except:
927 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
928 main.log.error( traceback.print_exc() )
929 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
930 main.cleanup()
931 main.exit()
932
admin4a58db92013-09-30 12:04:54 -0700933 def kill_tcpdump(self):
Jon Hallae05dc22014-04-16 10:56:28 -0700934 '''
935 Kills any tcpdump processes running
936 '''
Jon Hallf89c8552014-04-02 13:14:06 -0700937 try:
938 self.handle.sendline("")
939 self.handle.expect("\$")
940 self.handle.sendline("sudo kill -9 `ps -ef | grep \"tcpdump -n\" | grep -v grep | awk '{print $2}'`")
Jon Hallae05dc22014-04-16 10:56:28 -0700941 except pexpect.EOF:
942 main.log.error(self.name + ": EOF exception found")
943 main.log.error(self.name + ": " + self.handle.before)
944 main.cleanup()
945 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700946 except:
947 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
948 main.log.error( traceback.print_exc() )
949 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
950 main.cleanup()
951 main.exit()
952
953 def find_host(self,RestIP,RestPort,RestAPI,hostIP):
954 retcode = 0
955 retswitch = []
956 retport = []
957 retmac = []
958 foundIP = []
959 try:
Jon Hall8060af02014-04-14 14:17:58 -0700960 ##### device rest API is: 'host:8080/wm/onos/ng/switches/json' ###
Jon Hallf89c8552014-04-02 13:14:06 -0700961 url ="http://%s:%s%s" %(RestIP,RestPort,RestAPI)
962
963 try:
964 command = "curl -s %s" % (url)
965 result = os.popen(command).read()
966 parsedResult = json.loads(result)
967 # print parsedResult
968 except:
969 print "REST IF %s has issue" % command
970 parsedResult = ""
971
972 if parsedResult == "":
Jon Hallae05dc22014-04-16 10:56:28 -0700973 return (retcode, "Rest API has an error", retport, retmac)
Jon Hallf89c8552014-04-02 13:14:06 -0700974 else:
975 for switch in enumerate(parsedResult):
976 for port in enumerate(switch[1]['ports']):
977 if ( port[1]['devices'] != [] ):
978 try:
James Leec9cacaf2014-04-08 09:17:39 -0700979 foundIP = port[1]['devices'][0]['ipv4addresses'][0]['ipv4']
Jon Hallf89c8552014-04-02 13:14:06 -0700980 except:
981 print "Error in detecting IP address."
982 if foundIP == hostIP:
983 retswitch.append(switch[1]['dpid'])
984 retport.append(port[1]['desc'])
985 retmac.append(port[1]['devices'][0]['mac'])
986 retcode = retcode +1
987 foundIP =''
988 return(retcode, retswitch, retport, retmac)
Jon Hallae05dc22014-04-16 10:56:28 -0700989 except pexpect.EOF:
990 main.log.error(self.name + ": EOF exception found")
991 main.log.error(self.name + ": " + self.handle.before)
992 main.cleanup()
993 main.exit()
Jon Hallf89c8552014-04-02 13:14:06 -0700994 except:
995 main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
996 main.log.error( traceback.print_exc() )
997 main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
998 main.cleanup()
999 main.exit()