summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-07-03 19:10:50 -0400
committerGitHub <noreply@github.com>2020-07-03 19:10:50 -0400
commita596d47a276a07f145d01cd644aaceb06bed2616 (patch)
treeb1d4b64ab2224bcbb35f088325cbbb9fd0dd7138
parentcdfa68e1b88a74f844c705e07581550040cb55b6 (diff)
parentcf865d1b7c607c4abe6c0bec444618d4eff9b3cf (diff)
Merge pull request #6677 from mjstapp/fix_topo_daemons
tests: wait longer when shutting down in topotests
-rw-r--r--tests/topotests/lib/topotest.py34
1 files changed, 29 insertions, 5 deletions
diff --git a/tests/topotests/lib/topotest.py b/tests/topotests/lib/topotest.py
index f8f62f9d50..b19c9063e3 100644
--- a/tests/topotests/lib/topotest.py
+++ b/tests/topotests/lib/topotest.py
@@ -991,14 +991,28 @@ class Router(Node):
super(Router, self).terminate()
os.system("chmod -R go+rw /tmp/topotests")
+ # Return count of running daemons
+ def countDaemons(self):
+ numRunning = 0
+ rundaemons = self.cmd("ls -1 /var/run/%s/*.pid" % self.routertype)
+ errors = ""
+ if re.search(r"No such file or directory", rundaemons):
+ return 0
+ if rundaemons is not None:
+ for d in StringIO.StringIO(rundaemons):
+ daemonpid = self.cmd("cat %s" % d.rstrip()).rstrip()
+ if daemonpid.isdigit() and pid_exists(int(daemonpid)):
+ numRunning += 1
+ return numRunning
+
def stopRouter(self, wait=True, assertOnError=True, minErrorVersion="5.1"):
- # Stop Running Quagga or FRR Daemons
+ # Stop Running FRR Daemons
+ numRunning = 0
rundaemons = self.cmd("ls -1 /var/run/%s/*.pid" % self.routertype)
errors = ""
if re.search(r"No such file or directory", rundaemons):
return errors
if rundaemons is not None:
- numRunning = 0
for d in StringIO.StringIO(rundaemons):
daemonpid = self.cmd("cat %s" % d.rstrip()).rstrip()
if daemonpid.isdigit() and pid_exists(int(daemonpid)):
@@ -1011,8 +1025,15 @@ class Router(Node):
self.waitOutput()
if pid_exists(int(daemonpid)):
numRunning += 1
+
+ if wait and numRunning > 0:
+ counter = 5
+ while counter > 0 and numRunning > 0:
+ sleep(2, "{}: waiting for daemons stopping".format(self.name))
+ numRunning = self.countDaemons()
+ counter -= 1
+
if wait and numRunning > 0:
- sleep(2, "{}: waiting for daemons stopping".format(self.name))
# 2nd round of kill if daemons didn't exit
for d in StringIO.StringIO(rundaemons):
daemonpid = self.cmd("cat %s" % d.rstrip()).rstrip()
@@ -1026,6 +1047,7 @@ class Router(Node):
self.cmd("kill -7 %s" % daemonpid)
self.waitOutput()
self.cmd("rm -- {}".format(d.rstrip()))
+
if wait:
errors = self.checkRouterCores(reportOnce=True)
if self.checkRouterVersion("<", minErrorVersion):
@@ -1195,7 +1217,8 @@ class Router(Node):
logger.debug("{}: {} zebra started".format(self, self.routertype))
# Remove `zebra` so we don't attempt to start it again.
- daemons_list.remove('zebra')
+ while 'zebra' in daemons_list:
+ daemons_list.remove('zebra')
# Start staticd next if required
if 'staticd' in daemons_list:
@@ -1209,7 +1232,8 @@ class Router(Node):
logger.debug("{}: {} staticd started".format(self, self.routertype))
# Remove `staticd` so we don't attempt to start it again.
- daemons_list.remove('staticd')
+ while 'staticd' in daemons_list:
+ daemons_list.remove('staticd')
# Fix Link-Local Addresses
# Somehow (on Mininet only), Zebra removes the IPv6 Link-Local addresses on start. Fix this