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();
This commit is contained in:
+25
-16
@@ -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*));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user