[PATCH 3/3] testutils: Document and enforce @func callback retvals for virTestMain()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sometimes a test has a wrapper over main() (e.g. because it's
preloading some mock libraries). In such case, the main() is
renamed to something else (usually mymain()), and main() is
generated by calling one of VIR_TEST_MAIN() or
VIR_TEST_MAIN_PRELOAD() macros.

This has a neat side effect - if mymain() returns an error a
short summary is printed, e.g.:

  Some tests failed. Run them using:
  VIR_TEST_DEBUG=1 VIR_TEST_RANGE=5-6 ./virtest

However, this detection only works if EXIT_FAILURE is returned by
mymain(). Document and enforce this limitation.

Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
---
 tests/testutils.c | 13 +++++++++++++
 tests/testutils.h |  4 ++++
 2 files changed, 17 insertions(+)

diff --git a/tests/testutils.c b/tests/testutils.c
index 870a3b081a..b57b44fab5 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -838,6 +838,19 @@ int virTestMain(int argc,
             fprintf(stderr, "%*s", 40 - (int)(testCounter % 40), "");
         fprintf(stderr, " %-3zu %s\n", testCounter, ret == 0 ? "OK" : "FAIL");
     }
+
+    switch (ret) {
+    case EXIT_FAILURE:
+    case EXIT_SUCCESS:
+    case EXIT_AM_SKIP:
+    case EXIT_AM_HARDFAIL:
+        break;
+    default:
+        fprintf(stderr, "Test callback did returned invalid value: %d\n", ret);
+        ret = EXIT_AM_HARDFAIL;
+        break;
+    }
+
     if (ret == EXIT_FAILURE && !virBitmapIsAllClear(failedTests)) {
         g_autofree char *failed = virBitmapFormat(failedTests);
         fprintf(stderr, "Some tests failed. Run them using:\n");
diff --git a/tests/testutils.h b/tests/testutils.h
index e268a95612..6848323586 100644
--- a/tests/testutils.h
+++ b/tests/testutils.h
@@ -98,6 +98,10 @@ void virTestQuiesceLibvirtErrors(bool always);
 void virTestCounterReset(const char *prefix);
 const char *virTestCounterNext(void);
 
+/**
+ * The @func shall return  EXIT_FAILURE or EXIT_SUCCESS or
+ * EXIT_AM_SKIP or EXIT_AM_HARDFAIL.
+ */
 int virTestMain(int argc,
                 char **argv,
                 int (*func)(void),
-- 
2.26.3




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux