From 57612ebcf3b5414c6a2f6153a3338803ac94d759 Mon Sep 17 00:00:00 2001 From: Andrew Yourtchenko Date: Wed, 28 Mar 2018 15:32:10 +0200 Subject: [PATCH] make test: print a warning in case a core_pattern contains a filter program The default config on Ubuntu 16.04.4 desktop results in truncated cores when running make test which coredumps. Uninstalling the filter program (apport) makes the corefiles normal size. Print a warning about that fact, so the others potentially affected didn't have to wonder. Change-Id: Iba4b0a2765a25100d6e24fd7f4de0e0339efd835 Signed-off-by: Andrew Yourtchenko --- test/hook.py | 2 ++ test/run_tests.py | 2 ++ test/util.py | 15 +++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/test/hook.py b/test/hook.py index f4bafa16f19..0e94dcde135 100644 --- a/test/hook.py +++ b/test/hook.py @@ -5,6 +5,7 @@ import traceback from log import RED, single_line_delim, double_line_delim from debug import spawn_gdb from subprocess import check_output, CalledProcessError +from util import check_core_path class Hook(object): @@ -70,6 +71,7 @@ class PollHook(Hook): else: self.logger.error("Core file present, debug with: gdb %s %s" % (self.testcase.vpp_bin, core_path)) + check_core_path(self.logger, core_path) self.logger.error("Running `file %s':" % core_path) try: info = check_output(["file", core_path]) diff --git a/test/run_tests.py b/test/run_tests.py index 158494acd9e..3476ef04668 100644 --- a/test/run_tests.py +++ b/test/run_tests.py @@ -13,6 +13,7 @@ from debug import spawn_gdb from log import global_logger from discover_tests import discover_tests from subprocess import check_output, CalledProcessError +from util import check_core_path # timeout which controls how long the child has to finish after seeing # a core dump in test temporary directory. If this is exceeded, parent assumes @@ -136,6 +137,7 @@ def run_forked(suite): if os.path.isfile(core_path): global_logger.error("Core-file exists in test temporary " "directory: %s!" % core_path) + check_core_path(global_logger, core_path) global_logger.debug("Running `file %s':" % core_path) try: info = check_output(["file", core_path]) diff --git a/test/util.py b/test/util.py index 7d973bde237..65e25f77f0c 100644 --- a/test/util.py +++ b/test/util.py @@ -70,6 +70,21 @@ def ip6_normalize(ip6): socket.inet_pton(socket.AF_INET6, ip6)) +def check_core_path(logger, core_path): + with open("/proc/sys/kernel/core_pattern", "r") as f: + corefmt = f.read() + if corefmt.startswith("|"): + logger.error( + "WARNING: redirecting the core dump through a" + " filter may result in truncated dumps.") + logger.error( + " You may want to check the filter settings" + " or uninstall it and edit the" + " /proc/sys/kernel/core_pattern accordingly.") + logger.error( + " current core pattern is: %s" % corefmt) + + class NumericConstant(object): __metaclass__ = ABCMeta -- 2.16.6