diff options
author | Jan Janssen <medhefgo@web.de> | 2021-11-25 10:45:15 +0100 |
---|---|---|
committer | Jan Janssen <medhefgo@web.de> | 2021-11-28 11:42:28 +0100 |
commit | 0578dfe3eb2ceb8571b62a904dec0ddf410f6352 (patch) | |
tree | fd423c166f14e008095bfd2914075abb3c583c63 /src/shared/tests.h | |
parent | 4c0acc0761aae0370e20e118b9db3b704e9045cd (diff) | |
download | systemd-0578dfe3eb2ceb8571b62a904dec0ddf410f6352.tar.gz |
test: Add sd_booted condition test to TEST macro
Note that this will only report test skips if they use TEST_RET macro.
Regular TEST macros can still be skipped, but this will not be reported
back to main();
Diffstat (limited to 'src/shared/tests.h')
-rw-r--r-- | src/shared/tests.h | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/shared/tests.h b/src/shared/tests.h index d1c96ef35b..95283e2829 100644 --- a/src/shared/tests.h +++ b/src/shared/tests.h @@ -39,7 +39,7 @@ bool can_memlock(void); if (sd_booted() > 0) { \ x; \ } else { \ - printf("systemd not booted skipping '%s'\n", #x); \ + printf("systemd not booted, skipping '%s'\n", #x); \ } /* Provide a convenient way to check if we're running in CI. */ @@ -51,29 +51,31 @@ typedef struct TestFunc { int (*int_func)(void); } f; const char * const name; - bool has_ret; + bool has_ret:1; + bool sd_booted:1; } TestFunc; /* See static-destruct.h for an explanation of how this works. */ -#define REGISTER_TEST(func) \ +#define REGISTER_TEST(func, ...) \ _section_("SYSTEMD_TEST_TABLE") _alignptr_ _used_ _variable_no_sanitize_address_ \ static const TestFunc UNIQ_T(static_test_table_entry, UNIQ) = { \ .f = (union f) &(func), \ .name = STRINGIFY(func), \ .has_ret = __builtin_types_compatible_p(typeof((union f){}.int_func), typeof(&(func))), \ + ##__VA_ARGS__ \ } extern const TestFunc _weak_ __start_SYSTEMD_TEST_TABLE[]; extern const TestFunc _weak_ __stop_SYSTEMD_TEST_TABLE[]; -#define TEST(name) \ - static void test_##name(void); \ - REGISTER_TEST(test_##name); \ +#define TEST(name, ...) \ + static void test_##name(void); \ + REGISTER_TEST(test_##name, ##__VA_ARGS__); \ static void test_##name(void) -#define TEST_RET(name) \ - static int test_##name(void); \ - REGISTER_TEST(test_##name); \ +#define TEST_RET(name, ...) \ + static int test_##name(void); \ + REGISTER_TEST(test_##name, ##__VA_ARGS__); \ static int test_##name(void) static inline int run_test_table(void) { @@ -84,14 +86,21 @@ static inline int run_test_table(void) { const TestFunc *t = ALIGN_TO_PTR(__start_SYSTEMD_TEST_TABLE, sizeof(TestFunc*)); while (t < __stop_SYSTEMD_TEST_TABLE) { - log_info("/* %s */", t->name); - - if (t->has_ret) { - int r2 = t->f.int_func(); - if (r == EXIT_SUCCESS) - r = r2; - } else - t->f.void_func(); + + if (t->sd_booted && sd_booted() <= 0) { + log_info("/* systemd not booted, skipping %s */", t->name); + if (t->has_ret && r == EXIT_SUCCESS) + r = EXIT_TEST_SKIP; + } else { + log_info("/* %s */", t->name); + + if (t->has_ret) { + int r2 = t->f.int_func(); + if (r == EXIT_SUCCESS) + r = r2; + } else + t->f.void_func(); + } t = ALIGN_TO_PTR(t + 1, sizeof(TestFunc*)); } |