]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
testutils: print a helpful summary of failed tests
authorJán Tomko <jtomko@redhat.com>
Thu, 6 Feb 2020 16:31:04 +0000 (17:31 +0100)
committerJán Tomko <jtomko@redhat.com>
Sun, 9 Feb 2020 01:11:07 +0000 (02:11 +0100)
When debugging test failures in seven independent test
cases, it might be helpful to only gather the debug output
of the failing cases.

Record the indexes of the tests that fail and print them
in the VIR_TEST_RANGE of the command line that will result
in only those tests being run.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
tests/testutils.c

index 7b9a5ea05b0adb6a106bc7591298803eeb3a8a71..0cf0ac7e5cd50279c49de53b968ac1a77bef3383 100644 (file)
@@ -54,6 +54,7 @@ static unsigned int testRegenerate = -1;
 
 static size_t testCounter;
 static virBitmapPtr testBitmap;
+static virBitmapPtr failedTests;
 
 virArch virTestHostArch = VIR_ARCH_X86_64;
 
@@ -172,6 +173,9 @@ virTestRun(const char *title,
             fprintf(stderr, "!");
     }
 
+    if (ret != 0)
+        ignore_value(virBitmapSetBitExpand(failedTests, testCounter));
+
     g_unsetenv("VIR_TEST_MOCK_TESTNAME");
     return ret;
 }
@@ -930,6 +934,9 @@ int virTestMain(int argc,
         }
     }
 
+    if (!(failedTests = virBitmapNew(1)))
+        return EXIT_FAILURE;
+
     ret = (func)();
 
     virResetLastError();
@@ -938,6 +945,11 @@ int virTestMain(int argc,
             fprintf(stderr, "%*s", 40 - (int)(testCounter % 40), "");
         fprintf(stderr, " %-3zu %s\n", testCounter, ret == 0 ? "OK" : "FAIL");
     }
+    if (ret == EXIT_FAILURE && !virBitmapIsAllClear(failedTests)) {
+        g_autofree char *failed = virBitmapFormat(failedTests);
+        fprintf(stderr, "Some tests failed. Run them using:\n");
+        fprintf(stderr, "VIR_TEST_DEBUG=1 VIR_TEST_RANGE=%s %s\n", failed, argv[0]);
+    }
     virLogReset();
     return ret;
 }