RAMCloud Server Driver fixes on stop, start, and status
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 060a8cc..c9b7c08 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -1,24 +1,24 @@
#!/usr/bin/env python
'''
-Created on 31-May-2013
+Created on 31-May-2013
-@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
- TestON is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
+TestON is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
- TestON is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+TestON is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with TestON. If not, see <http://www.gnu.org/licenses/>.
+You should have received a copy of the GNU General Public License
+along with TestON. If not, see <http://www.gnu.org/licenses/>.
-'''
+'''
import time
import pexpect
import struct, fcntl, os, sys, signal
@@ -34,9 +34,9 @@
super(CLI, self).__init__()
def connect(self,**connectargs):
- '''
- Creates ssh handle for ONOS.
- '''
+'''
+Creates ssh handle for ONOS.
+'''
try:
for key in connectargs:
vars(self)[key] = connectargs[key]
@@ -66,15 +66,15 @@
def start(self):
'''
- Starts ONOS on remote machine.
- Returns false if any errors were encountered.
- '''
- try:
+Starts ONOS on remote machine.
+Returns false if any errors were encountered.
+'''
+ try:
self.handle.sendline("")
self.handle.expect("\$")
self.handle.sendline(self.home + "/onos.sh core start")
self.handle.expect("onos.sh core start")
- i=self.handle.expect(["STARTED","FAILED"])
+ i=self.handle.expect(["STARTED","FAILED"])
if i==0:
try:
self.handle.expect("\$", timeout=60)
@@ -87,7 +87,7 @@
main.log.error(self.name + ": ONOS Failed ")
return main.FALSE
raise
- main.log.error(self.name + ": ONOS expect script missed something... ")
+ main.log.error(self.name + ": ONOS expect script missed something... ")
return main.FALSE
except:
main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
@@ -98,8 +98,8 @@
def start_rest(self):
'''
- Starts the rest server on ONOS.
- '''
+Starts the rest server on ONOS.
+'''
try:
response = self.execute(cmd= self.home + "/start-rest.sh start",prompt="\$",timeout=10)
if re.search("admin",response):
@@ -107,8 +107,8 @@
time.sleep(5)
return main.TRUE
else :
- main.log.warn(self.name + ": Failed to start Rest Server")
- return main.FALSE
+ main.log.warn(self.name + ": Failed to start Rest Server")
+ return main.FALSE
except:
main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
main.log.error( traceback.print_exc() )
@@ -118,8 +118,8 @@
def status(self):
'''
- Called onos.sh core status and returns TRUE/FALSE accordingly
- '''
+Called onos.sh core status and returns TRUE/FALSE accordingly
+'''
try:
self.execute(cmd="\n",prompt="\$",timeout=10)
response = self.execute(cmd= self.home + "/onos.sh core status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
@@ -141,12 +141,12 @@
def isup(self):
'''
- A more complete check to see if ONOS is up and running properly.
- First, it checks if the process is up.
- Second, it reads the logs for "Exception: Connection refused"
- Third, it makes sure the logs are actually moving.
- returns TRUE/FALSE accordingly.
- '''
+A more complete check to see if ONOS is up and running properly.
+First, it checks if the process is up.
+Second, it reads the logs for "Exception: Connection refused"
+Third, it makes sure the logs are actually moving.
+returns TRUE/FALSE accordingly.
+'''
try:
self.execute(cmd="\n",prompt="\$",timeout=10)
response = self.execute(cmd= self.home + "/onos.sh core status ",prompt="running",timeout=10)
@@ -165,10 +165,10 @@
main.log.error(self.name + ": ONOS is frozen...")#logs aren't moving
return main.FALSE
elif re.search( pattern2,tail1 ):
- main.log.info(self.name + ": Connection Refused found in onos log")
+ main.log.info(self.name + ": Connection Refused found in onos log")
return main.FALSE
elif re.search( pattern2,tail2 ):
- main.log.info(self.name + ": Connection Refused found in onos log")
+ main.log.info(self.name + ": Connection Refused found in onos log")
return main.FALSE
else:
main.log.info(self.name + ": Onos log is moving! It's looking good!")
@@ -185,10 +185,10 @@
- def rest_status(self):
+ def rest_status(self):
'''
- Checks if the rest server is running.
- '''
+Checks if the rest server is running.
+'''
try:
response = self.execute(cmd= self.home + "/start-rest.sh status ",prompt="running",timeout=10)
if re.search("rest\sserver\sis\srunning",response):
@@ -210,14 +210,14 @@
def stop(self):
'''
- Runs ./onos.sh core stop to stop ONOS
- '''
+Runs ./onos.sh core stop to stop ONOS
+'''
try:
self.handle.sendline("")
self.handle.expect("\$")
self.handle.sendline(self.home + "/onos.sh core stop")
self.handle.expect("stop", 2)
- result = self.handle.before
+ result = self.handle.before
self.handle.expect("\$", 60)
if re.search("Killed", result):
main.log.info(self.name + ": ONOS Killed Successfully")
@@ -235,8 +235,8 @@
def rest_stop(self):
'''
- Runs ./start-rest.sh stop to stop ONOS rest server
- '''
+Runs ./start-rest.sh stop to stop ONOS rest server
+'''
try:
response = self.execute(cmd= self.home + "/start-rest.sh stop ",prompt="killing",timeout=10)
self.execute(cmd="\n",prompt="\$",timeout=10)
@@ -256,25 +256,25 @@
def disconnect(self):
'''
- Called when Test is complete to disconnect the ONOS handle.
- '''
+Called when Test is complete to disconnect the ONOS handle.
+'''
response = ''
try:
self.handle.sendline("exit")
self.handle.expect("closed")
- except:
+ except:
main.log.error(self.name + ": Connection failed to the host")
response = main.FALSE
return response
def get_version(self):
- '''
- Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
'''
+Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
+'''
try:
self.handle.sendline("export TERM=xterm-256color")
self.handle.expect("xterm-256color")
- self.handle.expect("\$")
+ self.handle.expect("\$")
self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller | grep -A 5 \"commit\"; cd \.\.")
self.handle.expect("cd ..")
self.handle.expect("\$")
@@ -287,10 +287,10 @@
main.exit()
def add_flow(self, testONip, user, password, flowDef):
- '''
- Copies the flowdef file from TestStation -> ONOS machine
- Then runs ./add_flow.py to add the flows to ONOS
- '''
+ '''
+Copies the flowdef file from TestStation -> ONOS machine
+Then runs ./add_flow.py to add the flows to ONOS
+'''
try:
main.log.info("Adding Flows...")
self.handle.sendline("scp %s@%s:%s /tmp/flowtmp" %(user,testONip,flowDef))
@@ -319,7 +319,7 @@
else:
main.log.error("Failed to add flows...")
- return main.FALSE
+ return main.FALSE
except:
main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
main.log.error( traceback.print_exc() )
@@ -330,8 +330,8 @@
def delete_flow(self, *delParams):
'''
- Deletes a specific flow, a range of flows, or all flows.
- '''
+Deletes a specific flow, a range of flows, or all flows.
+'''
try:
if len(delParams)==1:
if str(delParams[0])=="all":
@@ -366,11 +366,11 @@
def check_flow(self):
'''
- Calls the ./get_flow.py all and checks:
- - If each FlowPath has at least one FlowEntry
- - That there are no "NOT"s found
- returns TRUE/FALSE
- '''
+Calls the ./get_flow.py all and checks:
+- If each FlowPath has at least one FlowEntry
+- That there are no "NOT"s found
+returns TRUE/FALSE
+'''
try:
flowEntryDetect = 1
count = 0
@@ -401,7 +401,7 @@
main.log.info(self.name + ": Number of FlowPaths: "+str(count))
return main.TRUE
elif i==4:
- main.log.error(self.name + ":Check_flow() - Command Timeout!")
+ main.log.error(self.name + ":Check_flow() - Command Timeout!")
return main.FALSE
except:
main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
@@ -412,8 +412,8 @@
def get_flow(self, *flowParams):
'''
- Returns verbose output of ./get_flow.py
- '''
+Returns verbose output of ./get_flow.py
+'''
try:
if len(flowParams)==1:
if str(flowParams[0])=="all":
@@ -452,8 +452,8 @@
def get_json(self, url):
'''
- Helper functions used to parse the json output of a rest call
- '''
+Helper functions used to parse the json output of a rest call
+'''
try:
try:
command = "curl -s %s" % (url)
@@ -466,7 +466,7 @@
if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
print "REST %s returned code %s" % (command, parsedResult['code'])
parsedResult = ""
- return parsedResult
+ return parsedResult
except:
main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
main.log.error( traceback.print_exc() )
@@ -475,9 +475,9 @@
main.exit()
def check_switch(self,RestIP,correct_nr_switch, RestPort ="8080" ):
- '''
- Used by check_status
- '''
+ '''
+Used by check_status
+'''
try:
buf = ""
retcode = 0
@@ -499,7 +499,7 @@
for s in parsedResult:
cnt += 1
- if s['state'] == "ACTIVE":
+ if s['state'] == "ACTIVE":
active += 1
buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
@@ -520,9 +520,9 @@
main.exit()
def check_link(self,RestIP, nr_links, RestPort = "8080"):
- '''
- Used by check_status
- '''
+ '''
+Used by check_status
+'''
try:
buf = ""
retcode = 0
@@ -539,7 +539,7 @@
interlink=0
for s in parsedResult:
- intra = intra + 1
+ intra = intra + 1
if intra != nr_links:
buf += "link fail\n"
@@ -554,12 +554,12 @@
main.exit()
def check_status_report(self, ip, numoswitch, numolink, port="8080"):
- '''
- Checks the number of swithes & links that ONOS sees against the supplied values.
- Writes to the report log.
'''
+Checks the number of swithes & links that ONOS sees against the supplied values.
+Writes to the report log.
+'''
try:
- main.log.info(self.name + ": Making some rest calls...")
+ main.log.info(self.name + ": Making some rest calls...")
switch = self.check_switch(ip, int(numoswitch), port)
link = self.check_link(ip, int(numolink), port)
value = switch[0]
@@ -567,7 +567,7 @@
main.log.report( self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
if value != 0:
return main.FALSE
- else:
+ else:
# "PASS"
return main.TRUE
except:
@@ -578,12 +578,12 @@
main.exit()
def check_status(self, ip, numoswitch, numolink, port = "8080"):
- '''
- Checks the number of swithes & links that ONOS sees against the supplied values.
- Writes to the main log.
- '''
+ '''
+Checks the number of swithes & links that ONOS sees against the supplied values.
+Writes to the main log.
+'''
try:
- main.log.info(self.name + ": Making some rest calls...")
+ main.log.info(self.name + ": Making some rest calls...")
switch = self.check_switch(ip, int(numoswitch), port)
link = self.check_link(ip, int(numolink), port)
value = switch[0]
@@ -591,7 +591,7 @@
main.log.info(self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
if value != 0:
return main.FALSE
- else:
+ else:
# "PASS"
return main.TRUE
except:
@@ -603,8 +603,8 @@
def drop_keyspace(self):
'''
- Drops the ONOS keyspace
- '''
+Drops the ONOS keyspace
+'''
try:
self.handle.sendline(self.home + "/scripts/drop-keyspace.sh")
self.handle.expect("keyspace")
@@ -622,15 +622,15 @@
def check_for_no_exceptions(self):
'''
- TODO: Rewrite
- Used by CassndraCheck.py to scan ONOS logs for Exceptions
- '''
+TODO: Rewrite
+Used by CassndraCheck.py to scan ONOS logs for Exceptions
+'''
try:
self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
- self.handle.expect("\$ dsh")
+ self.handle.expect("\$ dsh")
self.handle.expect("\$")
output = self.handle.before
- main.log.info(self.name + ": " + output )
+ main.log.info(self.name + ": " + output )
if re.search("Exception",output):
return main.FALSE
else :
@@ -645,26 +645,26 @@
def git_pull(self):
'''
- Stops the ONOS, pulls the latest code, and builds with mvn.
- Assumes that "git pull" works without login
- '''
+Stops the ONOS, pulls the latest code, and builds with mvn.
+Assumes that "git pull" works without login
+'''
try:
- main.log.info(self.name + ": Stopping ONOS")
+ main.log.info(self.name + ": Stopping ONOS")
self.stop()
self.handle.sendline("cd " + self.home)
self.handle.expect("ONOS\$")
self.handle.sendline("git pull")
- uptodate = 0
+ uptodate = 0
i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting'],timeout=180)
#debug
- #main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
+ #main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
if i==0:
- main.log.error(self.name + ": Git pull had some issue...")
+ main.log.error(self.name + ": Git pull had some issue...")
return main.FALSE
elif i==1:
- main.log.error(self.name + ": Git Pull Asking for username!!! BADD!")
- return main.FALSE
+ main.log.error(self.name + ": Git Pull Asking for username!!! BADD!")
+ return main.FALSE
elif i==2:
main.log.info(self.name + ": Git Pull - pulling repository now")
self.handle.expect("ONOS\$", 120)
@@ -673,7 +673,7 @@
return main.FALSE
elif i==4:
main.log.info(self.name + ": Git Pull - Already up to date")
- uptodate = 1
+ uptodate = 1
elif i==5:
main.log.info(self.name + ": Git Pull - Aborting... Are there conflicting git files?")
return main.FALSE
@@ -682,9 +682,9 @@
return main.FALSE
if uptodate == 0:
- main.log.info(self.name + ": mvn clean")
+ main.log.info(self.name + ": mvn clean")
self.handle.sendline("mvn clean")
- while 1:
+ while 1:
i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
if i == 0:
main.log.error(self.name + ": Build failure!")
@@ -692,15 +692,15 @@
elif i == 1:
main.log.info(self.name + ": Build success!")
elif i == 2:
- main.log.info(self.name + ": Build complete")
+ main.log.info(self.name + ": Build complete")
break;
elif i == 3:
main.log.error(self.name + ": mvn clean TIMEOUT!")
return main.FALSE
- main.log.info(self.name + ": mvn compile")
+ main.log.info(self.name + ": mvn compile")
self.handle.sendline("mvn compile")
- while 1:
+ while 1:
i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=60)
if i == 0:
main.log.error(self.name + ": Build failure!")
@@ -709,7 +709,7 @@
main.log.info(self.name + ": Build success!")
return main.TRUE
elif i == 2:
- main.log.info(self.name + ": Build complete")
+ main.log.info(self.name + ": Build complete")
return main.TRUE
elif i == 3:
main.log.error(self.name + ": mvn compile TIMEOUT!")
@@ -733,10 +733,10 @@
if i == 0:
main.log.error(self.name + ": tcpdump - No such device exists. tcpdump attempted on: " + intf)
return main.FALSE
- elif i == 1:
+ elif i == 1:
main.log.info(self.name + ": tcpdump started on " + intf)
return main.TRUE
- elif i == 2:
+ elif i == 2:
main.log.error(self.name + ": tcpdump command timed out! Check interface name, given interface was: " + intf)
return main.FALSE
else:
@@ -787,7 +787,7 @@
for port in enumerate(switch[1]['ports']):
if ( port[1]['devices'] != [] ):
try:
- foundIP = port[1]['devices'][0]['ipv4addresses'][0]['ipv4']
+ foundIP = port[1]['devices'][0]['ipv4addresses'][0]['ipv4']
except:
print "Error in detecting IP address."
if foundIP == hostIP: