]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-tool: help verifying BUG() code paths
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 2 May 2018 09:38:28 +0000 (11:38 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 6 May 2018 10:06:13 +0000 (19:06 +0900)
When we call BUG(), we signal via SIGABRT that something bad happened,
dumping cores if so configured. In some setups these coredumps are
redirected to some central place such as /proc/sys/kernel/core_pattern,
which is a good thing.

However, when we try to verify in our test suite that bugs are caught in
certain code paths, we do *not* want to clutter such a central place
with unnecessary coredumps.

So let's special-case the test helpers (which we use to verify such code
paths) so that the BUG() calls will *not* call abort() but exit with a
special-purpose exit code instead.

Helped-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-tool.c
usage.c

index 87066ced62aca5641daafb83b696e01e12b436d5..5176f9f20ae6ff3e09c3793844d6482d94116f70 100644 (file)
@@ -47,7 +47,9 @@ static struct test_cmd cmds[] = {
 int cmd_main(int argc, const char **argv)
 {
        int i;
+       extern int BUG_exit_code;
 
+       BUG_exit_code = 99;
        if (argc < 2)
                die("I need a test name!");
 
diff --git a/usage.c b/usage.c
index cdd534c9dfc4bd38ce112da62643ab2dc7b4fbe9..9c84dccfa9719d925b23eb63247d79d5dfe4b817 100644 (file)
--- a/usage.c
+++ b/usage.c
@@ -210,6 +210,9 @@ void warning(const char *warn, ...)
        va_end(params);
 }
 
+/* Only set this, ever, from t/helper/, when verifying that bugs are caught. */
+int BUG_exit_code;
+
 static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_list params)
 {
        char prefix[256];
@@ -221,6 +224,8 @@ static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_lis
                snprintf(prefix, sizeof(prefix), "BUG: ");
 
        vreportf(prefix, fmt, params);
+       if (BUG_exit_code)
+               exit(BUG_exit_code);
        abort();
 }