From: Eric Blake Date: Fri, 22 Feb 2013 22:42:39 +0000 (-0700) Subject: tests: uniformly report test failures X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=dce95297e384497d4c342316dd23a4986133881c;p=libvirt.git tests: uniformly report test failures testutils.c likes to print summaries after a test completes, including if it failed. But if the test outright exit()s, this summary is skipped. Enforce that we return instead of exit. * cfg.mk (sc_prohibit_exit_in_tests): New syntax check. * tests/commandhelper.c (main): Fix offenders. * tests/qemumonitorjsontest.c (mymain): Likewise. * tests/seclabeltest.c (main): Likewise. * tests/securityselinuxlabeltest.c (mymain): Likewise. * tests/securityselinuxtest.c (mymain): Likewise. * tests/testutils.h (VIRT_TEST_MAIN_PRELOAD): Likewise. * tests/testutils.c (virtTestMain): Likewise. (virtTestCaptureProgramOutput): Use symbolic name. --- diff --git a/cfg.mk b/cfg.mk index d56f7e37c5..b95a90b1ec 100644 --- a/cfg.mk +++ b/cfg.mk @@ -709,6 +709,13 @@ sc_prohibit_semicolon_at_eol_in_python: halt="Don't use semicolon at eol in python files" \ $(_sc_search_regexp) +# mymain() in test files should use return, not exit, for nicer output +sc_prohibit_exit_in_tests: + @prohibit='\code == VIR_ERR_CONFIG_UNSUPPORTED) - exit(EXIT_AM_SKIP); + return EXIT_AM_SKIP; fprintf(stderr, "Unable to initialize security driver: %s\n", err->message); - exit(EXIT_FAILURE); + return EXIT_FAILURE; } if ((caps = testQemuCapsInit()) == NULL) - exit(EXIT_FAILURE); + return EXIT_FAILURE; #define DO_TEST_LABELING(name) \ if (virtTestRun("Labelling " # name, 1, testSELinuxLabeling, name) < 0) \ diff --git a/tests/securityselinuxtest.c b/tests/securityselinuxtest.c index 0dff8721e7..ba00010490 100644 --- a/tests/securityselinuxtest.c +++ b/tests/securityselinuxtest.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2012 Red Hat, Inc. + * Copyright (C) 2011-2013 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -274,11 +274,11 @@ mymain(void) if (!(mgr = virSecurityManagerNew("selinux", "QEMU", false, true, false))) { virErrorPtr err = virGetLastError(); if (err->code == VIR_ERR_CONFIG_UNSUPPORTED) - exit(EXIT_AM_SKIP); + return EXIT_AM_SKIP; fprintf(stderr, "Unable to initialize security driver: %s\n", err->message); - exit(EXIT_FAILURE); + return EXIT_FAILURE; } #define DO_TEST_GEN_LABEL(desc, pidcon, \ diff --git a/tests/testutils.c b/tests/testutils.c index 7b2ea5122e..ea46c095cb 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -317,7 +317,7 @@ virtTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen) virtTestCaptureProgramExecChild(argv, pipefd[1]); VIR_FORCE_CLOSE(pipefd[1]); - _exit(1); + _exit(EXIT_FAILURE); case -1: return -1; @@ -586,7 +586,7 @@ int virtTestMain(int argc, abs_srcdir_cleanup = true; } if (!abs_srcdir) - exit(EXIT_AM_HARDFAIL); + return EXIT_AM_HARDFAIL; progname = last_component(argv[0]); if (STRPREFIX(progname, "lt-")) @@ -603,13 +603,13 @@ int virtTestMain(int argc, if (virThreadInitialize() < 0 || virErrorInitialize() < 0) - return 1; + return EXIT_FAILURE; virLogSetFromEnv(); if (!getenv("LIBVIRT_DEBUG") && !virLogGetNbOutputs()) { if (virLogDefineOutput(virtTestLogOutput, virtTestLogClose, &testLog, VIR_LOG_DEBUG, VIR_LOG_TO_STDERR, NULL, 0) < 0) - return 1; + return EXIT_FAILURE; } #if TEST_OOM diff --git a/tests/testutils.h b/tests/testutils.h index 581bd3e3ca..546c9aed43 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -1,7 +1,7 @@ /* * utils.c: test utils * - * Copyright (C) 2005, 2008-2012 Red Hat, Inc. + * Copyright (C) 2005, 2008-2013 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -78,7 +78,7 @@ int virtTestMain(int argc, if (virAsprintf(&newenv, "%s%s%s", preload ? preload : "", \ preload ? ":" : "", lib) < 0) { \ perror("virAsprintf"); \ - exit(EXIT_FAILURE); \ + return EXIT_FAILURE; \ } \ setenv("LD_PRELOAD", newenv, 1); \ execv(argv[0], argv); \