]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: fix hang during topology shutdown when CLI connection fails
authorMartin Winter <mwinter@opensourcerouting.org>
Mon, 3 May 2021 20:50:45 +0000 (22:50 +0200)
committerMartin Winter <mwinter@opensourcerouting.org>
Mon, 5 Jul 2021 23:44:36 +0000 (01:44 +0200)
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
tests/topotests/lib/topotest.py

index d1f60bfe0dbc1ce938ac0299ecfd40131956fa8b..4c0c6ab54a0a38028bba00fb4c762733fdc9954b 100644 (file)
@@ -1223,25 +1223,28 @@ class Router(Node):
             dmns = rundaemons.split("\n")
             # Exclude empty string at end of list
             for d in dmns[:-1]:
-                daemonpid = self.cmd("cat %s" % d.rstrip()).rstrip()
-                if daemonpid.isdigit() and pid_exists(int(daemonpid)):
-                    daemonname = os.path.basename(d.rstrip().rsplit(".", 1)[0])
-                    logger.info("{}: stopping {}".format(self.name, daemonname))
-                    try:
-                        os.kill(int(daemonpid), signal.SIGTERM)
-                    except OSError as err:
-                        if err.errno == errno.ESRCH:
-                            logger.error(
-                                "{}: {} left a dead pidfile (pid={})".format(
-                                    self.name, daemonname, daemonpid
+                # Only check if daemonfilepath starts with /
+                # Avoids hang on "-> Connection closed" in above self.cmd()
+                if d[0] == '/':
+                    daemonpid = self.cmd("cat %s" % d.rstrip()).rstrip()
+                    if daemonpid.isdigit() and pid_exists(int(daemonpid)):
+                        daemonname = os.path.basename(d.rstrip().rsplit(".", 1)[0])
+                        logger.info("{}: stopping {}".format(self.name, daemonname))
+                        try:
+                            os.kill(int(daemonpid), signal.SIGTERM)
+                        except OSError as err:
+                            if err.errno == errno.ESRCH:
+                                logger.error(
+                                    "{}: {} left a dead pidfile (pid={})".format(
+                                        self.name, daemonname, daemonpid
+                                    )
                                 )
-                            )
-                        else:
-                            logger.info(
-                                "{}: {} could not kill pid {}: {}".format(
-                                    self.name, daemonname, daemonpid, str(err)
+                            else:
+                                logger.info(
+                                    "{}: {} could not kill pid {}: {}".format(
+                                        self.name, daemonname, daemonpid, str(err)
+                                    )
                                 )
-                            )
 
             if not wait:
                 return errors