]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: add --logd option
authorChristian Hopps <chopps@labn.net>
Wed, 19 Apr 2023 04:48:11 +0000 (00:48 -0400)
committerChristian Hopps <chopps@labn.net>
Sat, 22 Apr 2023 02:10:54 +0000 (22:10 -0400)
Signed-off-by: Christian Hopps <chopps@labn.net>
tests/topotests/conftest.py
tests/topotests/lib/topotest.py

index 87eee2e9f4d37bd8f40091aff227501879557ca3..8e4d13df7d14826d2e6f71696e269474365eb670 100755 (executable)
@@ -61,6 +61,16 @@ def pytest_addoption(parser):
         help="Comma-separated list of routers to spawn gdb on, or 'all'",
     )
 
+    parser.addoption(
+        "--logd",
+        action="append",
+        metavar="DAEMON[,ROUTER[,...]",
+        help=(
+            "Tail-F of DAEMON log file. Specify routers in comma-separated list after "
+            "daemon to limit to a subset of routers"
+        ),
+    )
+
     parser.addoption(
         "--pause",
         action="store_true",
index c3d5f05f40bbad36a455b5843543293fa3beef37..b034852de558d672c0c054514f6b24571f7a0493 100644 (file)
@@ -1747,6 +1747,16 @@ class Router(Node):
                 os.path.join(self.daemondir, "bgpd") + " -v"
             ).split()[2]
             logger.info("{}: running version: {}".format(self.name, self.version))
+
+        logd_options = {}
+        for logd in g_pytest_config.get_option("--logd", []):
+            if "," in logd:
+                daemon, routers = logd.split(",", 1)
+                logd_options[daemon] = routers.split(",")
+            else:
+                daemon = logd
+                logd_options[daemon] = ["all"]
+
         # If `daemons` was specified then some upper API called us with
         # specific daemons, otherwise just use our own configuration.
         daemons_list = []
@@ -1758,6 +1768,8 @@ class Router(Node):
                 if self.daemons[daemon] == 1:
                     daemons_list.append(daemon)
 
+        tail_log_files = []
+
         def start_daemon(daemon, extra_opts=None):
             daemon_opts = self.daemons_options.get(daemon, "")
             rediropt = " > {0}.out 2> {0}.err".format(daemon)
@@ -1796,9 +1808,16 @@ class Router(Node):
                         daemon, self.logdir, self.name
                     )
 
-                cmdopt = "{} --command-log-always --log file:{}.log --log-level debug".format(
-                    daemon_opts, daemon
-                )
+                cmdopt = "{} --command-log-always ".format(daemon_opts)
+                cmdopt += "--log file:{}.log --log-level debug".format(daemon)
+
+                if daemon in logd_options:
+                    logdopt = logd_options[daemon]
+                    if "all" in logdopt or self.name in logdopt:
+                        tail_log_files.append(
+                            "{}/{}/{}.log".format(self.logdir, self.name, daemon)
+                        )
+
             if extra_opts:
                 cmdopt += " " + extra_opts
 
@@ -1893,6 +1912,14 @@ class Router(Node):
         self.cmd("chown frr:frr -R {}/{}".format(self.logdir, self.name))
         self.cmd("chmod ug+rwX,o+r -R {}/{}".format(self.logdir, self.name))
 
+        if "frr" in logd_options:
+            logdopt = logd_options["frr"]
+            if "all" in logdopt or self.name in logdopt:
+                tail_log_files.append("{}/{}/frr.log".format(self.logdir, self.name))
+
+        for tailf in tail_log_files:
+            self.run_in_window("tail -f " + tailf, title=tailf, background=True)
+
         return ""
 
     def killRouterDaemons(