Merge pull request #6677 from mjstapp/fix_topo_daemons

tests: wait longer when shutting down in topotests
This commit is contained in:
Donald Sharp 2020-07-03 19:10:50 -04:00 committed by GitHub
commit a596d47a27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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