Share fail/verify macros, and the handling or nr_failures. The tests will no longer have a `main` function, but instead have a `test_main`. This ensures that `nr_failures` is handled consistently.
This'll make it easier to write new tests that are consistent with the existing ones, without having to copy/paste. Signed-off-by: Edwin Török <[email protected]> --- tools/tests/Rules.mk | 3 +++ tools/tests/common/tests.c | 15 +++++++++++++++ tools/tests/common/tests.h | 18 ++++++++++++++++++ tools/tests/cpu-policy/test-cpu-policy.c | 7 +------ tools/tests/domid/test-domid.c | 11 ++--------- tools/tests/mem-claim/test-mem-claim.c | 9 ++------- .../tests/paging-mempool/test-paging-mempool.c | 9 ++------- tools/tests/pdx/test-pdx.c | 3 ++- tools/tests/rangeset/test-rangeset.c | 3 ++- tools/tests/resource/test-resource.c | 9 ++------- tools/tests/tsx/test-tsx.c | 10 ++-------- tools/tests/vpci/main.c | 4 ++-- tools/tests/xenstore/test-xenstore.c | 4 +++- 13 files changed, 56 insertions(+), 49 deletions(-) create mode 100644 tools/tests/common/tests.c create mode 100644 tools/tests/common/tests.h diff --git a/tools/tests/Rules.mk b/tools/tests/Rules.mk index 2de9e94546..9e03e1e0b8 100644 --- a/tools/tests/Rules.mk +++ b/tools/tests/Rules.mk @@ -47,11 +47,14 @@ uninstall: CFLAGS += -D__XEN_TOOLS__ CFLAGS += $(CFLAGS_xeninclude) +CFLAGS += -I../common/ %.o: Makefile $(TARGET): $(TARGET).o $(CC) $^ -o $@ $(LDFLAGS) $(APPEND_LDFLAGS) +$(TARGETS): $(XEN_ROOT)/tools/tests/common/tests.o + -include $(DEPS_INCLUDE) diff --git a/tools/tests/common/tests.c b/tools/tests/common/tests.c new file mode 100644 index 0000000000..43d9ea5442 --- /dev/null +++ b/tools/tests/common/tests.c @@ -0,0 +1,15 @@ +#include "tests.h" + +unsigned int nr_failures; + +int main(int argc, char *argv[argc+1]) +{ + int rc = test_main(argc, argv); + + if ( nr_failures ) + printf("Done: %u failures\n", nr_failures); + else + printf("Done: all ok\n"); + + return rc ? rc : !!nr_failures; +} diff --git a/tools/tests/common/tests.h b/tools/tests/common/tests.h new file mode 100644 index 0000000000..f0df616e3e --- /dev/null +++ b/tools/tests/common/tests.h @@ -0,0 +1,18 @@ +#include <stdio.h> +#include <sysexits.h> + +extern unsigned int nr_failures; + +#define fail(fmt, ...) \ +({ \ + nr_failures++; \ + (void)printf(fmt, ##__VA_ARGS__); \ +}) + +#define verify(exp, fmt, args...) \ +while (!(exp)) { \ + printf(fmt, ## args); \ + exit(EX_SOFTWARE); \ +} + +extern int test_main(int argc, char *argv[argc+1]); diff --git a/tools/tests/cpu-policy/test-cpu-policy.c b/tools/tests/cpu-policy/test-cpu-policy.c index 301df2c002..67a36c80d5 100644 --- a/tools/tests/cpu-policy/test-cpu-policy.c +++ b/tools/tests/cpu-policy/test-cpu-policy.c @@ -650,7 +650,7 @@ static void test_is_compatible_failure(void) } } -int main(int argc, char **argv) +int test_main(int argc, char **argv) { printf("CPU Policy unit tests\n"); @@ -667,10 +667,5 @@ int main(int argc, char **argv) test_is_compatible_success(); test_is_compatible_failure(); - if ( nr_failures ) - printf("Done: %u failures\n", nr_failures); - else - printf("Done: all ok\n"); - return !!nr_failures; } diff --git a/tools/tests/domid/test-domid.c b/tools/tests/domid/test-domid.c index 5915c4699a..de39bae8b0 100644 --- a/tools/tests/domid/test-domid.c +++ b/tools/tests/domid/test-domid.c @@ -5,20 +5,13 @@ * Copyright 2025 Ford Motor Company */ -#include <sysexits.h> - +#include "tests.h" #include "harness.h" -#define verify(exp, fmt, args...) \ -while (!(exp)) { \ - printf(fmt, ## args); \ - exit(EX_SOFTWARE); \ -} - /* * Fail on the first error, since tests are dependent on each other. */ -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { domid_t expected, allocated; diff --git a/tools/tests/mem-claim/test-mem-claim.c b/tools/tests/mem-claim/test-mem-claim.c index ad038e45d1..1f3c70aace 100644 --- a/tools/tests/mem-claim/test-mem-claim.c +++ b/tools/tests/mem-claim/test-mem-claim.c @@ -11,12 +11,7 @@ #include <xengnttab.h> #include <xen-tools/common-macros.h> -static unsigned int nr_failures; -#define fail(fmt, ...) \ -({ \ - nr_failures++; \ - (void)printf(fmt, ##__VA_ARGS__); \ -}) +#include "tests.h" #define MB_PAGES(x) (MB(x) / XC_PAGE_SIZE) @@ -158,7 +153,7 @@ static void run_tests(void) physinfo.outstanding_pages); } -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { int rc; diff --git a/tools/tests/paging-mempool/test-paging-mempool.c b/tools/tests/paging-mempool/test-paging-mempool.c index 1ebc13455a..27fd109031 100644 --- a/tools/tests/paging-mempool/test-paging-mempool.c +++ b/tools/tests/paging-mempool/test-paging-mempool.c @@ -10,12 +10,7 @@ #include <xengnttab.h> #include <xen-tools/common-macros.h> -static unsigned int nr_failures; -#define fail(fmt, ...) \ -({ \ - nr_failures++; \ - (void)printf(fmt, ##__VA_ARGS__); \ -}) +#include "tests.h" static xc_interface *xch; static uint32_t domid; @@ -136,7 +131,7 @@ static void run_tests(void) 64 << 20, size_bytes); } -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { int rc; diff --git a/tools/tests/pdx/test-pdx.c b/tools/tests/pdx/test-pdx.c index eefd54c768..d2d143ec76 100644 --- a/tools/tests/pdx/test-pdx.c +++ b/tools/tests/pdx/test-pdx.c @@ -5,6 +5,7 @@ * Copyright (C) 2025 Cloud Software Group */ +#include "tests.h" #include "harness.h" #include "../../xen/common/pdx.c" @@ -29,7 +30,7 @@ static void print_ranges(const struct range *r) } } -int main(int argc, char **argv) +int main(int argc, char *argv[argc+1]) { static const struct { struct range ranges[MAX_RANGES]; diff --git a/tools/tests/rangeset/test-rangeset.c b/tools/tests/rangeset/test-rangeset.c index c14a908b4f..3f8ac95097 100644 --- a/tools/tests/rangeset/test-rangeset.c +++ b/tools/tests/rangeset/test-rangeset.c @@ -5,6 +5,7 @@ * Copyright (C) 2025 Cloud Software Group */ +#include "tests.h" #include "harness.h" struct range { @@ -140,7 +141,7 @@ static void print_both(struct rangeset *r, const struct range *expected, printf("[%ld, %ld]\n", expected[i].start, expected[i].end); } -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { struct rangeset *r = rangeset_new(NULL, NULL, 0); unsigned int i; diff --git a/tools/tests/resource/test-resource.c b/tools/tests/resource/test-resource.c index a7f2d04643..4155b62507 100644 --- a/tools/tests/resource/test-resource.c +++ b/tools/tests/resource/test-resource.c @@ -9,12 +9,7 @@ #include <xengnttab.h> #include <xen-tools/common-macros.h> -static unsigned int nr_failures; -#define fail(fmt, ...) \ -({ \ - nr_failures++; \ - (void)printf(fmt, ##__VA_ARGS__); \ -}) +#include "tests.h" static xc_interface *xch; static xenforeignmemory_handle *fh; @@ -255,7 +250,7 @@ static void test_domain_configurations(void) } } -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { int rc; diff --git a/tools/tests/tsx/test-tsx.c b/tools/tests/tsx/test-tsx.c index 5af04953f3..ab099e9038 100644 --- a/tools/tests/tsx/test-tsx.c +++ b/tools/tests/tsx/test-tsx.c @@ -30,6 +30,7 @@ #include <xenguest.h> #include <xen-tools/common-macros.h> +#include "tests.h" #include "xg_private.h" enum { @@ -44,13 +45,6 @@ enum { #define MSR_TSX_CTRL 0x00000122 #define MSR_MCU_OPT_CTRL 0x00000123 -static unsigned int nr_failures; -#define fail(fmt, ...) \ -({ \ - nr_failures++; \ - (void)printf(fmt, ##__VA_ARGS__); \ -}) - static xc_interface *xch; /* @@ -540,7 +534,7 @@ static void test_tsx(void) test_guests(); } -int main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { printf("TSX tests\n"); diff --git a/tools/tests/vpci/main.c b/tools/tests/vpci/main.c index 3753417e86..0e4f24aace 100644 --- a/tools/tests/vpci/main.c +++ b/tools/tests/vpci/main.c @@ -16,6 +16,7 @@ * License along with this program; If not, see <http://www.gnu.org/licenses/>. */ +#include "tests.h" #include "emul.h" /* Single vcpu (current), and single domain with a single PCI device. */ @@ -175,8 +176,7 @@ void multiwrite4_check(unsigned int reg) multiread4_check(reg, val); } -int -main(int argc, char **argv) +int test_main(int argc, char *argv[argc+1]) { /* Index storage by offset. */ uint32_t r0 = 0xdeadbeef; diff --git a/tools/tests/xenstore/test-xenstore.c b/tools/tests/xenstore/test-xenstore.c index 7a9bd9afb3..470cbeed30 100644 --- a/tools/tests/xenstore/test-xenstore.c +++ b/tools/tests/xenstore/test-xenstore.c @@ -33,6 +33,8 @@ #include <xen-tools/common-macros.h> +#include "tests.h" + #define TEST_PATH "xenstore-test" #define WRITE_BUFFERS_N 10 #define WRITE_BUFFERS_SIZE 4000 @@ -445,7 +447,7 @@ static void cleanup(void) } } -int main(int argc, char *argv[]) +int test_main(int argc, char *argv[argc+1]) { int opt, t, iters = 1, ret = 0, randtime = 0; char *test = NULL; -- 2.47.3
