Refactor ONOS Drivers
Changes include:
Include component handle in log messages
Replace carriage returns with new line characters
Remove static IP addresses and passwords
Add exception handling to prevent TestON crashes
Delete old tests and duplicate files
Onoscli driver
Remove assert from isup()
Parameterize REST port and set default to 8080
Add ONOS home directory, default to ~/ONOS
Merge onosrestapidriver.py into onosclidriver.py
Remove ctrl_one and ctrl_none functions
Improve git_pull() error checking
Parameterize the interface for tcpdump
Print more information in get_version
Parameterize the scp source username and password for add_flow
Remove Link_up and Link_down - see link() in mininet driver
Mininet Driver
assign_sw_controller takes COUNT to indicate how many controllers to assign to a switch - requires change to each test that uses this function to assign more than 1 controller to a switch
remove static password
doubled timeout for cleanup(larger networks can take longer to clean)
Zookeeper Driver
Remove start() call from connect()
add Zookeeper home directory, with default as ~/zookeeper-3.4.5
Cassandra Driver
Improve logic of status function
Check if self is up in isup instead of 4 instances running
diff --git a/TestON/drivers/common/cli/cassandraclidriver.py b/TestON/drivers/common/cli/cassandraclidriver.py
index 6a961ee..bad8c4e 100644
--- a/TestON/drivers/common/cli/cassandraclidriver.py
+++ b/TestON/drivers/common/cli/cassandraclidriver.py
@@ -58,8 +58,8 @@
#self.start()
return main.TRUE
else :
- main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
- main.log.error("Failed to connect to the Onos system")
+ main.log.error(self.name + ": Connection failed to the host "+self.user_name+"@"+self.ip_address)
+ main.log.error(self.name + ": Failed to connect to the Onos system")
return main.FALSE
@@ -67,7 +67,7 @@
'''
This Function will start the Cassandra
'''
- main.log.info( "Starting Cassandra" )
+ main.log.info(self.name + ": Starting Cassandra" )
self.handle.sendline("")
self.handle.expect("\$")
self.handle.sendline("~/ONOS/start-cassandra.sh start")
@@ -76,10 +76,10 @@
response = self.handle.before + self.handle.after
time.sleep(5)
if re.search("Starting\scassandra(.*)", response):
- main.log.info("Cassandra Started ")
+ main.log.info(self.name + ": Cassandra Started ")
return main.TRUE
else:
- main.log.error("Failed to start Cassandra"+ response)
+ main.log.error(self.name + ": Failed to start Cassandra"+ response)
return main.FALSE
def status(self):
@@ -87,33 +87,40 @@
This Function will return the Status of the Cassandra
'''
time.sleep(5)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
response = self.execute(cmd="~/ONOS/start-cassandra.sh status ",prompt="\d+\sinstance\sof\scassandra\srunning(.*)",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- return response
+ #self.execute(cmd="\n",prompt="\$",timeout=10)
+ #return response
- if re.search("0\sinstance\sof\scassandra\srunning(.*)") :
- main.log.info("Cassandra not running")
+ if re.search("0\sinstance\sof\scassandra\srunning(.*)",response) :
+ main.log.info(self.name + ": Cassandra not running")
+ return main.FALSE
+ elif re.search("1\sinstance\sof\scassandra\srunning(.*)",response):
+ main.log.warn(self.name + ": Cassandra Running")
return main.TRUE
- elif re.search("1\sinstance\sof\scassandra\srunning(.*)"):
- main.log.warn("Cassandra Running")
+ elif re.search("\sinstance\sof\scassandra\srunning(.*)",response):
+ main.log.warn(self.name + ": Multiple instances of Cassandra Running on the same machine!")
+ #Known bug: Once ONOS starts the script shows 2 instances
return main.TRUE
+ else:
+ main.log.warn(self.name + ": Cannot determine cassandra status")
+ return main.False
def stop(self):
'''
This Function will stop the Cassandra if it is Running
'''
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
time.sleep(5)
response = self.execute(cmd="~/ONOS/start-cassandra.sh stop ",prompt="Killed\sexisting\sprosess(.*)",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
if re.search("Killed\sexisting\sprosess(.*)",response):
- main.log.info("Cassandra Stopped")
+ main.log.info(self.name + ": Cassandra Stopped")
return main.TRUE
else:
- main.log.warn("Cassndra is not Running")
+ main.log.warn(self.name + ": Cassndra is not Running")
return main.FALSE
def disconnect(self):
@@ -125,7 +132,7 @@
self.handle.sendline("exit")
self.handle.expect("closed")
else :
- main.log.error("Connection failed to the host")
+ main.log.error(self.name + ": Connection failed to the host")
response = main.FALSE
return response
@@ -136,16 +143,17 @@
returns TRUE if it sees four occurances of both Up, and Normal
'''
tries = 5
- main.log.info("trying %i times" % tries )
+ main.log.info(self.name + ": trying %i times" % tries )
for i in range(tries):
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
self.handle.sendline("")
self.handle.expect("\$")
self.handle.sendline("~/ONOS/start-cassandra.sh status")
self.handle.expect("sh status")
self.handle.expect("\$")
result = self.handle.before + self.handle.after
- pattern = '(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)'
+ #pattern = '(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)\n(.*)Up(.*)Normal(.*)'
+ pattern = '(' + self.ip_address.replace('.', '\\.') + '.*)Up(.*)Normal(.*)'
if re.search(pattern, result):
return main.TRUE
return main.FALSE
diff --git a/TestON/drivers/common/cli/emulator/flowvisordriver.py b/TestON/drivers/common/cli/emulator/flowvisordriver.py
index 8df7338..66946bd 100644
--- a/TestON/drivers/common/cli/emulator/flowvisordriver.py
+++ b/TestON/drivers/common/cli/emulator/flowvisordriver.py
@@ -91,7 +91,7 @@
else :
self.execute(cmd="clear",prompt="\$",timeout=10)
self.execute(cmd="./fvctl.sh removeFlowSpace "+id,prompt="passwd:",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
main.log.info("Removed flowSpace which is having id :"+id)
return main.TRUE
@@ -129,7 +129,7 @@
#self.execute(cmd="clear",prompt="\$",timeout=10)
self.execute(cmd="./fvctl.sh addFlowSpace "+flowspace,prompt="passwd:",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
sucess_match = re.search("success\:\s+(\d+)", main.last_response)
if sucess_match :
main.log.info("Added flow Space and id is "+sucess_match.group(1))
@@ -142,7 +142,7 @@
def listFlowSpace(self):
self.execute(cmd="clear",prompt="\$",timeout=10)
self.execute(cmd="./fvctl.sh listFlowSpace ",prompt="passwd:",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
flow_space = main.last_response
flow_space = self.remove_contol_chars( flow_space)
flow_space = re.sub("rule\s(\d+)\:", "\nrule "+r'\1'+":",flow_space)
@@ -153,7 +153,7 @@
def listDevices(self):
#self.execute(cmd="clear",prompt="\$",timeout=10)
#self.execute(cmd="./fvctl.sh listDevices ",prompt="passwd:",timeout=10)
- #self.execute(cmd="\r",prompt="\$",timeout=10)
+ #self.execute(cmd="\n",prompt="\$",timeout=10)
devices_list = ''
last_response = re.findall("(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))", main.last_response)
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 59fae79..34e5841 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -61,11 +61,11 @@
main.log.info("Clearing any residual state or processes")
self.handle.sendline("sudo mn -c")
- i=self.handle.expect(['password\sfor\sadmin','Cleanup\scomplete',pexpect.EOF,pexpect.TIMEOUT],60)
+ i=self.handle.expect(['password\sfor\sadmin','Cleanup\scomplete',pexpect.EOF,pexpect.TIMEOUT],120)
if i==0:
main.log.info("sending sudo password")
- self.handle.sendline('onos_test')
- i=self.handle.expect(['admin:','\$',pexpect.EOF,pexpect.TIMEOUT],60)
+ self.handle.sendline(pwd)
+ i=self.handle.expect(['admin:','\$',pexpect.EOF,pexpect.TIMEOUT],120)
if i==1:
main.log.info("Clean")
@@ -77,7 +77,6 @@
#cmdString = "sudo mn --topo "+self.options['topo']+","+self.options['topocount']+" --mac --switch "+self.options['switch']+" --controller "+self.options['controller']
#cmdString = "sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --controller remote --ip 192.168.56.102 --port 6633 --topo mytopo"
main.log.info("building fresh mininet")
-
#### for reactive/PARP enabled tests
cmdString = "sudo mn " + self.options['arg1'] + " " + self.options['arg2'] + " --mac --controller " + self.options['controller']
#### for proactive flow with static ARP entries
@@ -154,8 +153,9 @@
args = utilities.parse_args(["SRC","TARGET"],**pingParams)
#command = args["SRC"] + " ping -" + args["CONTROLLER"] + " " +args ["TARGET"]
- command = args["SRC"] + " ping "+args ["TARGET"]+" -c 1 -i .2"
+ command = args["SRC"] + " ping "+args ["TARGET"]+" -c 1 -i 1"
response = self.execute(cmd=command,prompt="mininet",timeout=10 )
+ main.log.info("Ping Response: "+ response )
if utilities.assert_matches(expect=',\s0\%\spacket\sloss',actual=response,onpass="No Packet loss",onfail="Host is not reachable"):
main.log.info("NO PACKET LOSS, HOST IS REACHABLE")
main.last_result = main.TRUE
@@ -164,7 +164,6 @@
main.log.error("PACKET LOST, HOST IS NOT REACHABLE")
main.last_result = main.FALSE
return main.FALSE
-
def checkIP(self,host):
'''
@@ -334,40 +333,29 @@
main.log.info(self.execute(cmd=command,prompt="mininet>",timeout=10))
def assign_sw_controller(self,**kwargs):
- args = utilities.parse_args(["SW","IP1","PORT1","IP2","PORT2","IP3","PORT3","IP4","PORT4","IP5","PORT5","IP6","PORT6","IP7","PORT7","IP8","PORT8"],**kwargs)
+ '''
+ count is only needed if there is more than 1 controller
+ '''
+ args = utilities.parse_args(["COUNT"],**kwargs)
+ count = args["COUNT"] if args!={} else 1
+
+ argstring = "SW"
+ for j in range(count):
+ argstring = argstring + ",IP" + str(j+1) + ",PORT" + str(j+1)
+ args = utilities.parse_args(argstring.split(","),**kwargs)
+
sw = args["SW"] if args["SW"] != None else ""
- ip1 = args["IP1"] if args["IP1"] != None else ""
- ip2 = args["IP2"] if args["IP2"] != None else ""
- ip3 = args["IP3"] if args["IP3"] != None else ""
- ip4 = args["IP4"] if args["IP4"] != None else ""
- ip5 = args["IP5"] if args["IP5"] != None else ""
- ip6 = args["IP6"] if args["IP6"] != None else ""
- ip7 = args["IP7"] if args["IP7"] != None else ""
- ip8 = args["IP8"] if args["IP8"] != None else ""
- # master = args["MASTER"] if args["MASTER"] != None else ""
- port1 = args["PORT1"] if args["PORT1"] != None else ""
- port2 = args["PORT2"] if args["PORT2"] != None else ""
- port3 = args["PORT3"] if args["PORT3"] != None else ""
- port4 = args["PORT4"] if args["PORT4"] != None else ""
- port5 = args["PORT5"] if args["PORT5"] != None else ""
- port6 = args["PORT6"] if args["PORT6"] != None else ""
- port7 = args["PORT7"] if args["PORT7"] != None else ""
- port8 = args["PORT8"] if args["PORT8"] != None else ""
ptcpA = int(args["PORT1"])+int(sw) if args["PORT1"] != None else ""
- ptcpB = "ptcp:"+str(ptcpA) if ip1 != "" else ""
- tcp1 = "tcp:"+str(ip1)+":"+str(port1) if ip1 != "" else ""
- tcp2 = "tcp:"+str(ip2)+":"+str(port2) if ip2 != "" else ""
- tcp3 = "tcp:"+str(ip3)+":"+str(port3) if ip3 != "" else ""
- tcp4 = "tcp:"+str(ip4)+":"+str(port4) if ip4 != "" else ""
- tcp5 = "tcp:"+str(ip5)+":"+str(port5) if ip5 != "" else ""
- tcp6 = "tcp:"+str(ip6)+":"+str(port6) if ip6 != "" else ""
- tcp7 = "tcp:"+str(ip7)+":"+str(port7) if ip7 != "" else ""
- tcp8 = "tcp:"+str(ip8)+":"+str(port8) if ip8 != "" else ""
- # master1 = tcp1+" role master " if args["MASTER"] == 1 else ""
- # master2 = tcp2+" role master " if args["MASTER"] == 2 else ""
- # master3 = tcp3+" role master " if args["MASTER"] == 3 else ""
- # master4 = tcp4+" role master " if args["MASTER"] == 4 else ""
- command = "sh ovs-vsctl set-controller s"+str(sw)+" "+ptcpB+" "+tcp1+" "+tcp2+" "+tcp3+" "+tcp4+" "+tcp5+" "+tcp6+" "+tcp7+" "+tcp8
+ ptcpB = "ptcp:"+str(ptcpA) if ptcpA != "" else ""
+
+ command = "sh ovs-vsctl set-controller s" + str(sw) + " " + ptcpB + " "
+ for j in range(count):
+ i=j+1
+ args = utilities.parse_args(["IP"+str(i),"PORT"+str(i)],**kwargs)
+ ip = args["IP"+str(i)] if args["IP"+str(i)] != None else ""
+ port = args["PORT" + str(i)] if args["PORT" + str(i)] != None else ""
+ tcp = "tcp:" + str(ip) + ":" + str(port) + " " if ip != "" else ""
+ command = command + tcp
self.execute(cmd=command,prompt="mininet>",timeout=5)
def disconnect(self):
diff --git a/TestON/drivers/common/cli/onoscli/__init__.py b/TestON/drivers/common/cli/onoscli/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/drivers/common/cli/onoscli/__init__.py
+++ /dev/null
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index dadaf67..b43b9f4 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -22,9 +22,9 @@
import time
import pexpect
import struct, fcntl, os, sys, signal
-import sys
import re
import json
+import traceback
sys.path.append("../")
from drivers.common.clidriver import CLI
@@ -37,110 +37,129 @@
'''
Creates ssh handle for ONOS.
'''
- for key in connectargs:
- vars(self)[key] = connectargs[key]
+ try:
+ for key in connectargs:
+ vars(self)[key] = connectargs[key]
+ self.home = "~/ONOS"
+ for key in self.options:
+ if key == "home":
+ self.home = self.options['home']
+ break
-
- self.name = self.options['name']
- self.handle = super(OnosCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+
+ self.name = self.options['name']
+ 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)
- if self.handle:
- #self.start()
- #self.start_rest()
- return self.handle
- else :
- main.log.info("NO HANDLE")
- return main.FALSE
+ if self.handle:
+ #self.start()
+ #self.start_rest()
+ return self.handle
+ else :
+ main.log.info("NO ONOS HANDLE")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def start(self):
'''
Starts ONOS on remote machine.
Returns false if any errors were encountered.
'''
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.sendline("~/ONOS/start-onos.sh start")
- self.handle.expect("onos.sh start")
- i=self.handle.expect(["Starting\sONOS\scontroller","Cassandra\sis\snot\srunning"])
- if i==0:
- try:
- self.handle.expect("\$", timeout=60)
- main.log.info("ONOS Started ")
- except:
- main.log.info("ONOS NOT Started, stuck while waiting for it to start ")
+ try:
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline(self.home + "/start-onos.sh start")
+ self.handle.expect("onos.sh start")
+ i=self.handle.expect(["Starting\sONOS\scontroller","Cassandra\sis\snot\srunning"])
+ if i==0:
+ try:
+ self.handle.expect("\$", timeout=60)
+ main.log.info(self.name + ": ONOS Started ")
+ except:
+ main.log.info(self.name + ": ONOS NOT Started, stuck while waiting for it to start ")
+ return main.FALSE
+ return main.TRUE
+ elif i==1:
+ main.log.error(self.name + ": ONOS didn't start because cassandra wasn't running.")
return main.FALSE
- return main.TRUE
- elif i==1:
- main.log.error("ONOS didn't start because cassandra wasn't running.")
+ raise
+ main.log.error(self.name + ": ONOS expect script missed something... ")
return main.FALSE
-
- main.log.error("ONOS expect script missed something... ")
- return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def start_embedded(self):
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.sendline("~/ONOS/start-onos-embedded.sh start")
+ '''
+ Starts ONOS on remote machine with cassandra embedded.
+ Returns false if any errors were encountered.
+ '''
try:
- self.handle.expect("start...")
- main.log.info("Embedded ONOS started")
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline("~/ONOS/start-onos-embedded.sh start")
+ try:
+ self.handle.expect("start...")
+ main.log.info(self.name + ": Embedded ONOS started")
+ except:
+ main.log.info(self.name + ": Embedded ONOS failed to start")
+ return main.FALSE
except:
- main.log.info("Embedded ONOS failed to start")
-
- def link_down(self, **linkParams):
- '''
- Specifically used for the ONOS demo on the HW.
- Should be replaced by actual switch drivers in the future.
- '''
- args = utilities.parse_args(["SDPID","SPORT","DDPID","DPORT"], **linkParams)
- sdpid = args["SDPID"] if args["SDPID"] != None else "00:00:00:00:ba:5e:ba:13"
- sport = args["SPORT"] if args["SPORT"] != None else "22"
- ddpid = args["DDPID"] if args["DDPID"] != None else "00:00:20:4e:7f:51:8a:35"
- dport = args["DPORT"] if args["DPORT"] != None else "22"
-
- cmd = "curl -s 10.128.4.11:9000/gui/link/down/" + sdpid + "/" + sport + "/" + ddpid + "/" + dport + " > /tmp/log &"
- os.popen( cmd )
-
- def link_up(self, **linkParams):
- '''
- Specifically used for the ONOS demo on the HW.
- Should be replaced by actual switch drivers in the future.
- '''
- args = utilities.parse_args(["SDPID","SPORT","DDPID","DPORT"], **linkParams)
- sdpid = args["SDPID"] if args["SDPID"] != None else "00:00:00:00:ba:5e:ba:13"
- sport = args["SPORT"] if args["SPORT"] != None else "22"
- ddpid = args["DDPID"] if args["DDPID"] != None else "00:00:20:4e:7f:51:8a:35"
- dport = args["DPORT"] if args["DPORT"] != None else "22"
-
- cmd = "curl -s 10.128.4.11:9000/gui/link/up/" + sdpid + "/" + sport + "/" + ddpid + "/" + dport + " > /tmp/log &"
- os.popen( cmd )
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def start_rest(self):
'''
Starts the rest server on ONOS.
- '''
- response = self.execute(cmd="~/ONOS/start-rest.sh start",prompt="\$",timeout=10)
- if re.search("admin",response):
- main.log.info("Rest Server Started Successfully")
- time.sleep(5)
- return main.TRUE
- else :
- main.log.warn("Failed to start Rest Server")
- return main.FALSE
-
+ '''
+ try:
+ response = self.execute(cmd= self.home + "/start-rest.sh start",prompt="\$",timeout=10)
+ if re.search("admin",response):
+ main.log.info(self.name + ": Rest Server Started Successfully")
+ time.sleep(5)
+ return main.TRUE
+ else :
+ 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() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
def status(self):
'''
Called start-onos.sh status and returns TRUE/FALSE accordingly
'''
- self.execute(cmd="\r",prompt="\$",timeout=10)
- response = self.execute(cmd="~/ONOS/start-onos.sh status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- if re.search("1\sinstance\sof\sonos\srunning",response):
- return main.TRUE
- elif re.search("0\sinstance\sof\sonos\srunning",response):
- return main.FALSE
- else :
- return main.FALSE
+ try:
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ response = self.execute(cmd= self.home + "/start-onos.sh status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ if re.search("1\sinstance\sof\sonos\srunning",response):
+ return main.TRUE
+ elif re.search("0\sinstance\sof\sonos\srunning",response):
+ return main.FALSE
+ else :
+ main.log.info( self.name + " WARNING: status recieved unknown response")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
def isup(self):
'''
@@ -150,77 +169,113 @@
Third, it makes sure the logs are actually moving.
returns TRUE/FALSE accordingly.
'''
- self.execute(cmd="\r",prompt="\$",timeout=10)
- response = self.execute(cmd="~/ONOS/start-onos.sh status ",prompt="running",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- tail1 = self.execute(cmd="tail ~/ONOS/onos-logs/onos.*.log",prompt="\$",timeout=10)
- time.sleep(30)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- tail2 = self.execute(cmd="tail ~/ONOS/onos-logs/onos.*.log",prompt="\$",timeout=10)
- pattern = '(.*)1 instance(.*)'
- pattern2 = '(.*)Exception: Connection refused(.*)'
- if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
- if tail1 == tail2:
- main.log.error("ONOS is frozen...")
- return main.FALSE
- elif re.search( pattern2,tail1 ):
- main.log.info("Connection Refused found in onos log")
- return main.FALSE
- elif re.search( pattern2,tail2 ):
- main.log.info("Connection Refused found in onos log")
- return main.FALSE
+ try:
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ response = self.execute(cmd= self.home + "/start-onos.sh status ",prompt="running",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ tail1 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
+ time.sleep(30)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ tail2 = self.execute(cmd="tail " + self.home + "/onos-logs/onos.*.log",prompt="\$",timeout=10)
+ pattern = '(.*)1 instance(.*)'
+ pattern2 = '(.*)Exception: Connection refused(.*)'
+ # if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
+
+ if re.search(pattern, response):
+ main.log.info(self.name + ": ONOS process is running...")
+ if tail1 == tail2:
+ 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")
+ return main.FALSE
+ elif re.search( pattern2,tail2 ):
+ 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!")
+ return main.TRUE
else:
- main.log.info("Onos log is moving! It's looking good!")
- return main.TRUE
- else:
- return main.FALSE
+ main.log.error(self.name + ": ONOS process not running...")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
-
+
+
def rest_status(self):
'''
Checks if the rest server is running.
'''
- response = self.execute(cmd="~/ONOS/start-rest.sh status ",prompt="running",timeout=10)
- if re.search("rest\sserver\sis\srunning",response):
- main.log.info("Rest Server is running")
- elif re.search("rest\sserver\sis\snot\srunning",response):
- main.log.warn("Rest Server is not Running")
- else :
- main.log.error("No response" +response)
- self.execute(cmd="\r",prompt="\$",timeout=10)
-
- return response
-
+ try:
+ response = self.execute(cmd= self.home + "/start-rest.sh status ",prompt="running",timeout=10)
+ if re.search("rest\sserver\sis\srunning",response):
+ main.log.info(self.name + ": Rest Server is running")
+ elif re.search("rest\sserver\sis\snot\srunning",response):
+ main.log.warn(self.name + ": Rest Server is not Running")
+ else :
+ main.log.error(self.name + ": No response" +response)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+
+ return response
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+
def stop(self):
'''
Runs ./start-onos.sh stop to stop ONOS
'''
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.sendline("~/ONOS/start-onos.sh stop")
- self.handle.expect("stop", 2)
- result = self.handle.before
- self.handle.expect("\$", 60)
- if re.search("Killed", result):
- main.log.info("ONOS Killed Successfully")
- return main.TRUE
- else :
- main.log.warn("ONOS wasn't running")
- return main.FALSE
+ try:
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline(self.home + "/start-onos.sh stop")
+ self.handle.expect("stop", 2)
+ result = self.handle.before
+ self.handle.expect("\$", 60)
+ if re.search("Killed", result):
+ main.log.info(self.name + ": ONOS Killed Successfully")
+ return main.TRUE
+ else :
+ main.log.warn(self.name + ": ONOS wasn't running")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
def rest_stop(self):
'''
Runs ./start-rest.sh stop to stop ONOS rest server
'''
- response = self.execute(cmd="~/ONOS/start-rest.sh stop ",prompt="killing",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- if re.search("killing", response):
- main.log.info("Rest Server Stopped")
- return main.TRUE
- else :
- main.log.error("Failed to Stop, Rest Server is not Running")
- return main.FALSE
-
+ try:
+ response = self.execute(cmd= self.home + "/start-rest.sh stop ",prompt="killing",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ if re.search("killing", response):
+ main.log.info(self.name + ": Rest Server Stopped")
+ return main.TRUE
+ else :
+ main.log.error(self.name + ": Failed to Stop, Rest Server is not Running")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+
def disconnect(self):
'''
Called when Test is complete to disconnect the ONOS handle.
@@ -230,7 +285,7 @@
self.handle.sendline("exit")
self.handle.expect("closed")
except:
- main.log.error("Connection failed to the host")
+ main.log.error(self.name + ": Connection failed to the host")
response = main.FALSE
return response
@@ -238,56 +293,98 @@
'''
Writes the COMMIT number to the report to be parsed by Jenkins data collecter.
'''
- self.handle.sendline("export TERM=xterm-256color")
- self.handle.expect("xterm-256color")
- self.handle.expect("\$")
- self.handle.sendline("cd ONOS; git log -1 | grep -A 3 \"commit\"; cd \.\.")
- self.handle.expect("cd ..")
- self.handle.expect("\$")
- main.log.report( str(self.handle.before + self.handle.after))
+ try:
+ self.handle.sendline("export TERM=xterm-256color")
+ self.handle.expect("xterm-256color")
+ self.handle.expect("\$")
+ self.handle.sendline("cd " + self.home + "; git log -1 --pretty=fuller; cd \.\.")
+ self.handle.expect("cd ..")
+ self.handle.expect("\$")
+ main.log.report(self.name +": \n"+ str(self.handle.before + self.handle.after))
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def add_flow(self, path):
+ 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
'''
- main.log.info("Adding Flows...")
- self.handle.sendline("scp admin@10.128.7.7:%s /tmp/flowtmp" % path)
- self.handle.expect("100%")
- self.handle.expect("\$", 30)
- self.handle.sendline("~/ONOS/web/add_flow.py -m onos -f /tmp/flowtmp")
- self.handle.expect("add_flow")
- self.handle.expect("\$", 1000)
- main.log.info("Flows added")
+ try:
+ main.log.info("Adding Flows...")
+ self.handle.sendline("scp %s@%s:%s /tmp/flowtmp" %(user,testONip,flowDef))
+ i=self.handle.expect(['[pP]assword:', '100%', pexpect.TIMEOUT],30)
+ if(i==0):
+ self.handle.sendline("%s" %(password))
+ self.handle.sendline("")
+ self.handle.expect("100%")
+ self.handle.expect("\$", 30)
+ self.handle.sendline(self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
+ self.handle.expect("\$", 1000)
+ main.log.info("Flows added")
+ return main.TRUE
+
+ elif(i==1):
+ self.handle.sendline("")
+ self.handle.expect("\$", 10)
+ self.handle.sendline( self.home + "/web/add_flow.py -m onos -f /tmp/flowtmp")
+ self.handle.expect("\$", 1000)
+ main.log.info("Flows added")
+ return main.TRUE
+
+ elif(i==2):
+ main.log.error("Flow Def file SCP Timed out...")
+ return main.FALSE
+
+ else:
+ main.log.error("Failed to add flows...")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
def delete_flow(self, *delParams):
'''
Deletes a specific flow, a range of flows, or all flows.
'''
- if len(delParams)==1:
- if str(delParams[0])=="all":
- main.log.info("Deleting ALL flows...")
- #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh all",prompt="done",timeout=150)
- self.handle.sendline("~/ONOS/web/delete_flow.py all")
- self.handle.expect("delete_flow")
- self.handle.expect("\$",1000)
- main.log.info("Flows deleted")
- else:
- main.log.info("Deleting flow "+str(delParams[0])+"...")
- #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0]),prompt="done",timeout=150)
- #self.execute(cmd="\n",prompt="\$",timeout=60)
- self.handle.sendline("~/ONOS/web/delete_flow.py %d" % int(delParams[0]))
- self.handle.expect("delete_flow")
- self.handle.expect("\$",60)
- main.log.info("Flow deleted")
- elif len(delParams)==2:
- main.log.info("Deleting flows "+str(delParams[0])+" through "+str(delParams[1])+"...")
- #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0])+" "+str(delParams[1]),prompt="done",timeout=150)
- #self.execute(cmd="\n",prompt="\$",timeout=60)
- self.handle.sendline("~/ONOS/web/delete_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
- self.handle.expect("delete_flow")
- self.handle.expect("\$",600)
- main.log.info("Flows deleted")
+ try:
+ if len(delParams)==1:
+ if str(delParams[0])=="all":
+ main.log.info(self.name + ": Deleting ALL flows...")
+ #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh all",prompt="done",timeout=150)
+ self.handle.sendline(self.home + "/web/delete_flow.py all")
+ self.handle.expect("delete_flow")
+ self.handle.expect("\$",1000)
+ main.log.info(self.name + ": Flows deleted")
+ else:
+ main.log.info(self.name + ": Deleting flow "+str(delParams[0])+"...")
+ #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0]),prompt="done",timeout=150)
+ #self.execute(cmd="\n",prompt="\$",timeout=60)
+ self.handle.sendline(self.home +"/web/delete_flow.py %d" % int(delParams[0]))
+ self.handle.expect("delete_flow")
+ self.handle.expect("\$",60)
+ main.log.info(self.name + ": Flow deleted")
+ elif len(delParams)==2:
+ main.log.info(self.name + ": Deleting flows "+str(delParams[0])+" through "+str(delParams[1])+"...")
+ #self.execute(cmd="~/ONOS/scripts/TestON_delete_flow.sh "+str(delParams[0])+" "+str(delParams[1]),prompt="done",timeout=150)
+ #self.execute(cmd="\n",prompt="\$",timeout=60)
+ self.handle.sendline(self.home + "/web/delete_flow.py %d %d" % (int(delParams[0]), int(delParams[1])))
+ self.handle.expect("delete_flow")
+ self.handle.expect("\$",600)
+ main.log.info(self.name + ": Flows deleted")
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def check_flow(self):
'''
@@ -296,64 +393,78 @@
- That there are no "NOT"s found
returns TRUE/FALSE
'''
- flowEntryDetect = 1
- count = 0
- self.handle.sendline("clear")
- time.sleep(1)
- self.handle.sendline("~/ONOS/web/get_flow.py all")
- self.handle.expect("get_flow")
- while 1:
- i=self.handle.expect(['FlowPath','FlowEntry','NOT','\$',pexpect.TIMEOUT],timeout=180)
- if i==0:
- count = count + 1
- if flowEntryDetect == 0:
- main.log.info("FlowPath without FlowEntry")
+ try:
+ flowEntryDetect = 1
+ count = 0
+ self.handle.sendline("clear")
+ time.sleep(1)
+ self.handle.sendline(self.home + "/web/get_flow.py all")
+ self.handle.expect("get_flow")
+ while 1:
+ i=self.handle.expect(['FlowPath','FlowEntry','NOT','\$',pexpect.TIMEOUT],timeout=180)
+ if i==0:
+ count = count + 1
+ if flowEntryDetect == 0:
+ main.log.info(self.name + ": FlowPath without FlowEntry")
+ return main.FALSE
+ else:
+ flowEntryDetect = 0
+ elif i==1:
+ flowEntryDetect = 1
+ elif i==2:
+ main.log.error(self.name + ": Found a NOT")
return main.FALSE
- else:
- flowEntryDetect = 0
- elif i==1:
- flowEntryDetect = 1
- elif i==2:
- main.log.error("Found a NOT")
- return main.FALSE
- elif i==3:
- if count == 0:
- main.log.info("There don't seem to be any flows here...")
- return main.FALSE
- else:
- main.log.info("All flows pass")
- main.log.info("Number of FlowPaths: "+str(count))
- return main.TRUE
- elif i==4:
- main.log.error("Command Timeout!")
- return main.FALSE
+ elif i==3:
+ if count == 0:
+ main.log.info(self.name + ": There don't seem to be any flows here...")
+ return main.FALSE
+ else:
+ main.log.info(self.name + ": All flows pass")
+ 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!")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def get_flow(self, *flowParams):
'''
Returns verbose output of ./get_flow.py
'''
- if len(flowParams)==1:
- if str(flowParams[0])=="all":
- self.execute(cmd="\n",prompt="\$",timeout=60)
- main.log.info("Getting all flow data...")
- data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh all",prompt="done",timeout=150)
- self.execute(cmd="\n",prompt="\$",timeout=60)
- return data
- else:
- main.log.info("Retrieving flow "+str(flowParams[0])+" data...")
- data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0]),prompt="done",timeout=150)
- self.execute(cmd="\n",prompt="\$",timeout=60)
- return data
- elif len(flowParams)==5:
- main.log.info("Retrieving flow installer data...")
- data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3])+" "+str(flowParams[4]),prompt="done",timeout=150)
- self.execute(cmd="\n",prompt="\$",timeout=60)
- return data
- elif len(flowParams)==4:
- main.log.info("Retrieving flow endpoints...")
- data = self.execute(cmd="~/ONOS/scripts/TestON_get_flow.sh "+str(flowParams[0])+" "+str(flowParams[1])+" "+str(flowParams[2])+" "+str(flowParams[3]),prompt="done",timeout=150)
- self.execute(cmd="\n",prompt="\$",timeout=60)
- return data
+ try:
+ if len(flowParams)==1:
+ if str(flowParams[0])=="all":
+ self.execute(cmd="\n",prompt="\$",timeout=60)
+ main.log.info(self.name + ": Getting all flow data...")
+ data = self.execute(cmd=self.home + "/scripts/TestON_get_flow.sh all",prompt="done",timeout=150)
+ self.execute(cmd="\n",prompt="\$",timeout=60)
+ return data
+ else:
+ main.log.info(self.name + ": Retrieving flow "+str(flowParams[0])+" data...")
+ data = self.execute(cmd=self.home +"/scripts/TestON_get_flow.sh "+str(flowParams[0]),prompt="done",timeout=150)
+ self.execute(cmd="\n",prompt="\$",timeout=60)
+ return data
+ elif len(flowParams)==5:
+ main.log.info(self.name + ": Retrieving flow installer data...")
+ 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)
+ self.execute(cmd="\n",prompt="\$",timeout=60)
+ return data
+ elif len(flowParams)==4:
+ main.log.info(self.name + ": Retrieving flow endpoints...")
+ 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)
+ self.execute(cmd="\n",prompt="\$",timeout=60)
+ return data
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
# http://localhost:8080/wm/core/topology/switches/all/json
@@ -366,257 +477,351 @@
Helper functions used to parse the json output of a rest call
'''
try:
- command = "curl -s %s" % (url)
- result = os.popen(command).read()
- parsedResult = json.loads(result)
+ try:
+ command = "curl -s %s" % (url)
+ result = os.popen(command).read()
+ parsedResult = json.loads(result)
+ except:
+ print "REST IF %s has issue" % command
+ parsedResult = ""
+
+ if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+ print "REST %s returned code %s" % (command, parsedResult['code'])
+ parsedResult = ""
+ return parsedResult
except:
- print "REST IF %s has issue" % command
- parsedResult = ""
-
- if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
- print "REST %s returned code %s" % (command, parsedResult['code'])
- parsedResult = ""
- return parsedResult
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def check_switch(self,RestIP,correct_nr_switch ):
+ def check_switch(self,RestIP,correct_nr_switch, RestPort ="8080" ):
'''
Used by check_status
'''
- buf = ""
- retcode = 0
- RestPort="8080"
- url="http://%s:%s/wm/onos/topology/switches/all/json" % (RestIP, RestPort)
- parsedResult = self.get_json(url)
- if parsedResult == "":
- retcode = 1
- return (retcode, "Rest API has an issue")
- url = "http://%s:%s/wm/onos/registry/switches/json" % (RestIP, RestPort)
- registry = self.get_json(url)
-
- if registry == "":
- retcode = 1
- return (retcode, "Rest API has an issue")
-
- cnt = 0
- active = 0
+ try:
+ buf = ""
+ retcode = 0
+ #RestPort="8080"
+ url="http://%s:%s/wm/onos/topology/switches/all/json" % (RestIP, RestPort)
+ parsedResult = self.get_json(url)
+ if parsedResult == "":
+ retcode = 1
+ return (retcode, "Rest API has an issue")
+ url = "http://%s:%s/wm/onos/registry/switches/json" % (RestIP, RestPort)
+ registry = self.get_json(url)
+
+ if registry == "":
+ retcode = 1
+ return (retcode, "Rest API has an issue")
+
+ cnt = 0
+ active = 0
- for s in parsedResult:
- cnt += 1
- if s['state'] == "ACTIVE":
- active += 1
+ for s in parsedResult:
+ cnt += 1
+ if s['state'] == "ACTIVE":
+ active += 1
- buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
- if correct_nr_switch != cnt:
- buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
- retcode = 1
+ buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
+ if correct_nr_switch != cnt:
+ buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
+ retcode = 1
- if correct_nr_switch != active:
- buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
- retcode = 1
-
- return (retcode, buf)
+ if correct_nr_switch != active:
+ buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
+ retcode = 1
+
+ return (retcode, buf)
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def check_link(self,RestIP, nr_links):
+ def check_link(self,RestIP, nr_links, RestPort = "8080"):
'''
Used by check_status
'''
- RestPort = "8080"
- buf = ""
- retcode = 0
-
- url = "http://%s:%s/wm/onos/topology/links/json" % (RestIP, RestPort)
- parsedResult = self.get_json(url)
-
- if parsedResult == "":
- retcode = 1
- return (retcode, "Rest API has an issue")
-
- buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
- intra = 0
- interlink=0
-
- for s in parsedResult:
- intra = intra + 1
-
- if intra != nr_links:
- buf += "link fail\n"
- retcode = 1
-
- return (retcode, buf)
+ try:
+ buf = ""
+ retcode = 0
+
+ url = "http://%s:%s/wm/onos/topology/links/json" % (RestIP, RestPort)
+ parsedResult = self.get_json(url)
+
+ if parsedResult == "":
+ retcode = 1
+ return (retcode, "Rest API has an issue")
+
+ buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
+ intra = 0
+ interlink=0
+
+ for s in parsedResult:
+ intra = intra + 1
+
+ if intra != nr_links:
+ buf += "link fail\n"
+ retcode = 1
+
+ return (retcode, buf)
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def check_status_report(self, ip, numoswitch, numolink):
+ 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.
- '''
- main.log.info("Making some rest calls...")
- switch = self.check_switch(ip, int(numoswitch))
- link = self.check_link(ip, int(numolink))
- value = switch[0]
- value += link[0]
- main.log.report( "\n-----\n%s%s-----\n" % ( switch[1], link[1]) )
- if value != 0:
- return 0
- else:
- # "PASS"
- return 1
+ '''
+ try:
+ 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]
+ value += link[0]
+ main.log.report( self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
+ if value != 0:
+ return main.FALSE
+ else:
+ # "PASS"
+ return main.TRUE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def check_status(self, ip, numoswitch, numolink):
+ 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.
'''
- main.log.info("Making some rest calls...")
- switch = self.check_switch(ip, int(numoswitch))
- link = self.check_link(ip, int(numolink))
- value = switch[0]
- value += link[0]
- main.log.info( "\n-----\n%s%s-----\n" % ( switch[1], link[1]) )
- if value != 0:
- return 0
- else:
- # "PASS"
- return 1
+ try:
+ 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]
+ value += link[0]
+ main.log.info(self.name + ": \n-----\n%s%s-----\n" % ( switch[1], link[1]) )
+ if value != 0:
+ return main.FALSE
+ else:
+ # "PASS"
+ return main.TRUE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
def drop_keyspace(self):
'''
Drops the ONOS keyspace
'''
- self.handle.sendline("~/ONOS/scripts/test-drop-keyspace.sh")
- self.handle.expect("keyspace")
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.expect("\$")
- main.log.info("Keyspace dropped")
+ try:
+ self.handle.sendline(self.home + "/scripts/drop-keyspace.sh")
+ self.handle.expect("keyspace")
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.expect("\$")
+ main.log.info(self.name + ": Keyspace dropped")
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def ctrl_none(self):
- '''
- Points all the mininet swithces to no controllers
- *NOTE will only work if CLUSTER is set up on ONOS nodes
- '''
- self.execute(cmd="switch none", prompt="\$",timeout=10)
-
- def ctrl_one(self, ip):
- '''
- Points all the mininet swithces to all controllers
- *NOTE will only work if CLUSTER is set up on ONOS nodes
- '''
- self.execute(cmd="switch one", prompt="\$",timeout=10)
-
+
def check_for_no_exceptions(self):
'''
+ TODO: Rewrite
Used by CassndraCheck.py to scan ONOS logs for Exceptions
'''
- self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
- self.handle.expect("\$ dsh")
- self.handle.expect("\$")
- output = self.handle.before
- main.log.info( output )
- if re.search("Exception",output):
- return main.FALSE
- else :
- return main.TRUE
-
+ try:
+ self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
+ self.handle.expect("\$ dsh")
+ self.handle.expect("\$")
+ output = self.handle.before
+ main.log.info(self.name + ": " + output )
+ if re.search("Exception",output):
+ return main.FALSE
+ else :
+ return main.TRUE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+
def git_pull(self):
'''
Stops the ONOS, pulls the latest code, and builds with mvn.
Assumes that "git pull" works without login
'''
- main.log.info("Stopping onos")
- self.stop()
- self.handle.sendline("cd ~/ONOS")
- self.handle.expect("ONOS\$")
- self.handle.sendline("git pull")
-
- uptodate = 0
- i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting'],timeout=180)
- if i==0:
- main.log.error("Git pull had some issue...")
- return main.FALSE
- elif i==1:
- main.log.error("Asking for username!!! BADD!")
- return false
-
- self.handle.expect('Password\sfor\s(.*):\s')
- j = self.handle.expect(['Unpacking\sobjects','Already up-to-date'])
- if j == 0:
- main.log.info("pulling repository now")
- elif j == 1:
- main.log.info("Up to date!")
+ try:
+ 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
+ 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))
+ if i==0:
+ 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
+ elif i==2:
+ main.log.info(self.name + ": Git Pull - pulling repository now")
+ self.handle.expect("ONOS\$", 120)
+ elif i==3:
+ main.log.error(self.name + ": Git Pull - TIMEOUT")
+ return main.FALSE
+ elif i==4:
+ main.log.info(self.name + ": Git Pull - Already up to date")
+ uptodate = 1
+ elif i==5:
+ main.log.info(self.name + ": Git Pull - Aborting... Are there conflicting git files?")
+ return main.FALSE
else:
- main.log.error("something went wrong")
+ main.log.error(self.name + ": Git Pull - Unexpected response, check for pull errors")
return main.FALSE
- self.handle.expect("ONOS\$", 120)
- elif i==2:
- main.log.info("pulling repository now")
- self.handle.expect("ONOS\$", 120)
- elif i==3:
- main.log.error("TIMEOUT")
- return main.FALSE
- elif i==4:
- main.log.info("Already up to date")
- uptodate = 1
- elif i==5:
- main.log.info("Aborting... Are there conflicting git files?")
- return main.FALSE
-
- '''
- main.log.info("./setup-local-maven.sh")
- self.handle.sendline("./setup-local-maven.sh")
- self.handle.expect("local-maven.sh")
- while 1:
- i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=90)
- if i == 0:
- main.log.error("Build failure!")
- return main.FALSE
- elif i == 1:
- main.log.info("Build success!")
- elif i == 2:
- main.log.info("Build complete")
- break;
- elif i == 3:
- main.log.error("TIMEOUT!")
- return main.FALSE
- '''
- if uptodate == 0:
- main.log.info("mvn clean")
- self.handle.sendline("mvn clean")
- while 1:
- i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
- if i == 0:
- main.log.error("Build failure!")
- return main.FALSE
- elif i == 1:
- main.log.info("Build success!")
- elif i == 2:
- main.log.info("Build complete")
- break;
- elif i == 3:
- main.log.error("TIMEOUT!")
- return main.FALSE
-
- main.log.info("mvn compile")
- self.handle.sendline("mvn compile")
- while 1:
- i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
- if i == 0:
- main.log.error("Build failure!")
- return main.FALSE
- elif i == 1:
- main.log.info("Build success!")
- elif i == 2:
- main.log.info("Build complete")
- break;
- elif i == 3:
- main.log.error("TIMEOUT!")
- return main.FALSE
+
+ if uptodate == 0:
+ main.log.info(self.name + ": mvn clean")
+ self.handle.sendline("mvn clean")
+ 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!")
+ return main.FALSE
+ elif i == 1:
+ main.log.info(self.name + ": Build success!")
+ elif i == 2:
+ 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")
+ self.handle.sendline("mvn compile")
+ 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!")
+ return main.FALSE
+ elif i == 1:
+ main.log.info(self.name + ": Build success!")
+ return main.TRUE
+ elif i == 2:
+ main.log.info(self.name + ": Build complete")
+ return main.TRUE
+ elif i == 3:
+ main.log.error(self.name + ": mvn compile TIMEOUT!")
+ return main.FALSE
+ else:
+ pass
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
- def tcpdump(self):
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.sendline("sudo tcpdump -n -i eth0 -s0 -w onos-logs/tcpdump &")
-
+
+ def tcpdump(self, intf = "eth0"):
+ try:
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline("sudo tcpdump -n -i "+ intf + " -s0 -w onos-logs/tcpdump &")
+ i=self.handle.expect(['No\ssuch\device','listening\son',pexpect.TIMEOUT],timeout=10)
+ if i == 0:
+ main.log.error(self.name + ": tcpdump - No such device exists. tcpdump attempted on: " + intf)
+ return main.FALSE
+ elif i == 1:
+ main.log.info(self.name + ": tcpdump started on " + intf)
+ return main.TRUE
+ elif i == 2:
+ main.log.error(self.name + ": tcpdump command timed out! Check interface name, given interface was: " + intf)
+ return main.FALSE
+ else:
+ main.log.error(self.name + ": tcpdump - unexpected response")
+ return main.FALSE
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
def kill_tcpdump(self):
- self.handle.sendline("")
- self.handle.expect("\$")
- self.handle.sendline("sudo kill -9 `ps -ef | grep \"tcpdump -n\" | grep -v grep | awk '{print $2}'`")
+ try:
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline("sudo kill -9 `ps -ef | grep \"tcpdump -n\" | grep -v grep | awk '{print $2}'`")
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+ def find_host(self,RestIP,RestPort,RestAPI,hostIP):
+ retcode = 0
+ retswitch = []
+ retport = []
+ retmac = []
+ foundIP = []
+ try:
+ ##### device rest API is: 'host:8080/wm/core/topology/switches/all/json' ###
+ url ="http://%s:%s%s" %(RestIP,RestPort,RestAPI)
+
+ try:
+ command = "curl -s %s" % (url)
+ result = os.popen(command).read()
+ parsedResult = json.loads(result)
+ # print parsedResult
+ except:
+ print "REST IF %s has issue" % command
+ parsedResult = ""
+
+ if parsedResult == "":
+ return (retcode, "Rest API has an error")
+ else:
+ for switch in enumerate(parsedResult):
+ for port in enumerate(switch[1]['ports']):
+ if ( port[1]['devices'] != [] ):
+ try:
+ foundIP = port[1]['devices'][0]['ipv4addresses'][0]['ipv4']
+ except:
+ print "Error in detecting IP address."
+ if foundIP == hostIP:
+ retswitch.append(switch[1]['dpid'])
+ retport.append(port[1]['desc'])
+ retmac.append(port[1]['devices'][0]['mac'])
+ retcode = retcode +1
+ foundIP =''
+ return(retcode, retswitch, retport, retmac)
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
diff --git a/TestON/drivers/common/cli/remotesysdriver.py b/TestON/drivers/common/cli/remotesysdriver.py
index ab11f6a..374e502 100644
--- a/TestON/drivers/common/cli/remotesysdriver.py
+++ b/TestON/drivers/common/cli/remotesysdriver.py
@@ -40,13 +40,13 @@
self.handle = super(RemoteSysDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
'''
if self.handle:
- self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+ self.execute(cmd= "\n",prompt= "\$|>|#",timeout= 10)
self.execute(cmd= "ssh -l paxterra 10.128.4.1",prompt= "paxterra@10.128.4.1's password:",timeout= 10)
- self.execute(cmd= "\r",prompt= "paxterra@10.128.4.1's password:",timeout= 10)
+ self.execute(cmd= "\n",prompt= "paxterra@10.128.4.1's password:",timeout= 10)
self.execute(cmd = "0nLab_gu3st",prompt = "\$",timeout = 10)
self.execute(cmd = "cd TestON/bin/",prompt = "\$",timeout = 10)
self.execute(cmd = "./cli.py run Assert example 1",prompt = "\$",timeout = 10)
- self.execute(cmd= "\r",prompt= "$",timeout= 10)
+ self.execute(cmd= "\n",prompt= "$",timeout= 10)
#self.execute(cmd = "help",prompt = ">",timeout = 10)
#self.execute(cmd = "~.",prompt= ".*",timeout= 10)
diff --git a/TestON/drivers/common/cli/remotetestbeddriver.py b/TestON/drivers/common/cli/remotetestbeddriver.py
index 5ade2ec..79fbf1c 100644
--- a/TestON/drivers/common/cli/remotetestbeddriver.py
+++ b/TestON/drivers/common/cli/remotetestbeddriver.py
@@ -45,12 +45,12 @@
port = remote_port, pwd = remote_pwd)
if self.handle:
- self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+ self.execute(cmd= "\n",prompt= "\$|>|#",timeout= 10)
self.execute(cmd= "SET CYGWIN=notty",prompt= "\$|>|#",timeout= 10)
- self.execute(cmd= "\r",prompt= "\$|>|#",timeout= 10)
+ self.execute(cmd= "\n",prompt= "\$|>|#",timeout= 10)
main.log.info("ssh "+self.vm_user_name+'@'+self.vm_ip_address)
self.execute(cmd= "ssh "+self.vm_user_name+'@'+self.vm_ip_address,prompt= "(.*)",timeout= 10)
- self.execute(cmd= "\r",prompt= "assword:",timeout= 10)
+ self.execute(cmd= "\n",prompt= "assword:",timeout= 10)
self.execute(cmd = self.vm_pwd,prompt = "\$",timeout = 10)
return self.handle
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
index 2a575ae..b7fe4ba 100644
--- a/TestON/drivers/common/cli/zookeeperclidriver.py
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -49,17 +49,21 @@
self.port = None
for key in connectargs:
vars(self)[key] = connectargs[key]
+ self.home = "~/zookeeper-3.4.5"
+ for key in self.options:
+ if key == "home":
+ self.home = self.options['home']
+ break
self.name = self.options['name']
- self.handle = super(ZookeeperCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+ self.handle = super(ZookeeperCliDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd, home = self.home)
self.ssh_handle = self.handle
if self.handle :
- self.start()
return main.TRUE
else :
main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
- main.log.error("Failed to connect to the Onos system")
+ main.log.error(self.name + ": Failed to connect to Zookeeper")
return main.FALSE
@@ -67,20 +71,21 @@
'''
This Function will start the Zookeeper
'''
- main.log.info( "Starting Zookeeper" )
+ main.log.info(self.name + ": Starting Zookeeper" )
self.handle.sendline("")
self.handle.expect("\$")
- self.handle.sendline("~/zookeeper-3.4.5/bin/zkServer.sh start")
+ self.handle.sendline(self.home + "/bin/zkServer.sh start")
self.handle.expect("zkServer.sh start")
self.handle.expect("\$")
response = self.handle.before + self.handle.after
if re.search("STARTED", response):
- main.log.info("Zookeeper Started ")
+ main.log.info(self.name + ": Zookeeper Started ")
return main.TRUE
elif re.search("running", response):
- main.log.warn("zookeeper ... already running")
+ main.log.warn(self.name +": zookeeper ... already running")
+ return main.TRUE
else:
- main.log.error("Failed to start Zookeeper"+ response)
+ main.log.error(self.name + ": Failed to start Zookeeper"+ response)
return main.FALSE
def status(self):
@@ -88,25 +93,25 @@
This Function will return the Status of the Zookeeper
'''
time.sleep(5)
- self.execute(cmd="\r",prompt="\$",timeout=10)
- response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh status ",prompt="JMX",timeout=10)
-
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
+ response = self.execute(cmd=self.home + "/bin/zkServer.sh status ",prompt="JMX",timeout=10)
+
+ self.execute(cmd="\n",prompt="\$",timeout=10)
return response
def stop(self):
'''
This Function will stop the Zookeeper if it is Running
'''
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
time.sleep(5)
- response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh stop ",prompt="STOPPED",timeout=10)
- self.execute(cmd="\r",prompt="\$",timeout=10)
+ response = self.execute(cmd=self.home + "/bin/zkServer.sh stop ",prompt="STOPPED",timeout=10)
+ self.execute(cmd="\n",prompt="\$",timeout=10)
if re.search("STOPPED",response):
- main.log.info("Zookeeper Stopped")
+ main.log.info(self.name + ": Zookeeper Stopped")
return main.TRUE
else:
- main.log.warn("No zookeeper to stop")
+ main.log.warn(self.name + ": No zookeeper to stop")
return main.FALSE
def disconnect(self):
@@ -118,7 +123,7 @@
self.handle.sendline("exit")
self.handle.expect("closed")
else :
- main.log.error("Connection failed to the host")
+ main.log.error(self.name + ": Connection failed to the host")
response = main.FALSE
return response
@@ -127,11 +132,13 @@
Calls the zookeeper status and returns TRUE if it has an assigned Mode to it.
'''
self.execute(cmd="\n",prompt="\$",timeout=10)
- response = self.execute(cmd="~/zookeeper-3.4.5/bin/zkServer.sh status ",prompt="Mode",timeout=10)
+ response = self.execute(cmd=self.home + "/bin/zkServer.sh status ",prompt="Mode",timeout=10)
pattern = '(.*)Mode(.*)'
- if re.search(pattern, response):
+ if re.search(pattern, response):
+ main.log.info(self.name + ": Zookeeper is up.")
return main.TRUE
else:
+ main.log.info(self.name + ": Zookeeper is down.")
return main.FALSE