]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Add sd_booted condition test to TEST macro
authorJan Janssen <medhefgo@web.de>
Thu, 25 Nov 2021 09:45:15 +0000 (10:45 +0100)
committerJan Janssen <medhefgo@web.de>
Sun, 28 Nov 2021 10:42:28 +0000 (11:42 +0100)
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();

src/shared/tests.h

index d1c96ef35b2cb99d2995821d150e40f552719ec3..95283e28297947ef9438b3bcb22f2384fb6cee3b 100644 (file)
@@ -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*));
         }