#define TEST_LOG_FUNC() \
log_info("/* %s() */", __func__)
-static inline int run_test_table(void) {
- _cleanup_strv_free_ char **tests = NULL;
- int r = EXIT_SUCCESS;
- bool ran = false;
- const char *e;
-
- if (!__start_SYSTEMD_TEST_TABLE)
- return r;
-
- e = getenv("TESTFUNCS");
- if (e) {
- r = strv_split_full(&tests, e, ":", EXTRACT_DONT_COALESCE_SEPARATORS);
- if (r < 0)
- return log_error_errno(r, "Failed to parse $TESTFUNCS: %m");
- }
-
- for (const TestFunc *t = ALIGN_PTR(__start_SYSTEMD_TEST_TABLE);
- t + 1 <= __stop_SYSTEMD_TEST_TABLE;
- t = ALIGN_PTR(t + 1)) {
-
- if (tests && !strv_contains(tests, t->name))
- continue;
-
- 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();
- }
-
- ran = true;
- }
-
- if (!ran)
- return log_error_errno(SYNTHETIC_ERRNO(ENXIO), "No matching tests found.");
+int run_test_table(const TestFunc *start, const TestFunc *end);
- return r;
-}
+void test_prepare(int argc, char *argv[], int log_level);
#define DEFINE_TEST_MAIN_FULL(log_level, intro, outro) \
int main(int argc, char *argv[]) { \
int (*_intro)(void) = intro; \
int (*_outro)(void) = outro; \
int _r, _q; \
- test_setup_logging(log_level); \
- save_argc_argv(argc, argv); \
+ test_prepare(argc, argv, log_level); \
_r = _intro ? _intro() : EXIT_SUCCESS; \
if (_r == EXIT_SUCCESS) \
- _r = run_test_table(); \
+ _r = run_test_table(__start_SYSTEMD_TEST_TABLE, __stop_SYSTEMD_TEST_TABLE); \
_q = _outro ? _outro() : EXIT_SUCCESS; \
static_destruct(); \
if (_r < 0) \
#define DEFINE_TEST_MAIN(log_level) \
DEFINE_TEST_MAIN_FULL(log_level, NULL, NULL)
+_noreturn_ void log_test_failed_internal(const char *file, int line, const char *func, const char *format, ...) _printf_(4,5);
+
+#define log_test_failed(format, ...) \
+ log_test_failed_internal(PROJECT_FILE, __LINE__, __func__, "%s:%i: Assertion failed: " format, PROJECT_FILE, __LINE__, ##__VA_ARGS__)
+
#define DECIMAL_STR_FMT(x) _Generic((x), \
char: "%c", \
bool: "%d", \
#ifdef __COVERITY__
#define ASSERT_OK(expr) __coverity_check__((expr) >= 0)
#else
-#define ASSERT_OK(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result < 0) { \
- log_error_errno(_result, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_OK(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(_result)); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_POSITIVE(expr) __coverity_check__((expr) > 0)
#else
-#define ASSERT_OK_POSITIVE(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result < 0) { \
- log_error_errno(_result, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
- if (_result == 0) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be positive, but it is zero.", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_OK_POSITIVE(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(_result)); \
+ if (_result == 0) \
+ log_test_failed("Expected \"%s\" to be positive, but it is zero.", #expr); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_ZERO(expr) __coverity_check__((expr) == 0)
#else
-#define ASSERT_OK_ZERO(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result < 0) { \
- log_error_errno(_result, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
- if (_result != 0) { \
- char _sexpr[DECIMAL_STR_MAX(typeof(expr))]; \
- xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result); \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be zero, but it is %s.", \
- PROJECT_FILE, __LINE__, #expr, _sexpr); \
- abort(); \
- } \
+#define ASSERT_OK_ZERO(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(_result)); \
+ if (_result != 0) { \
+ char _sexpr[DECIMAL_STR_MAX(typeof(expr))]; \
+ xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result); \
+ log_test_failed("Expected \"%s\" to be zero, but it is %s.", #expr, _sexpr); \
+ } \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_EQ(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
-#define ASSERT_OK_EQ(expr1, expr2) \
- ({ \
- typeof(expr1) _expr1 = (expr1); \
- typeof(expr2) _expr2 = (expr2); \
- if (_expr1 < 0) { \
- log_error_errno(_expr1, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr1); \
- abort(); \
- } \
- if (_expr1 != _expr2) { \
- char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))]; \
- char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
- xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
- xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", got %s != %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
- } \
+#define ASSERT_OK_EQ(expr1, expr2) \
+ ({ \
+ typeof(expr1) _expr1 = (expr1); \
+ typeof(expr2) _expr2 = (expr2); \
+ if (_expr1 < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr1, STRERROR(_expr1)); \
+ if (_expr1 != _expr2) { \
+ char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))]; \
+ char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
+ xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
+ xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
+ log_test_failed("Expected \"%s == %s\", got %s != %s", #expr1, #expr2, _sexpr1, _sexpr2); \
+ } \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_ERRNO(expr) __coverity_check__((expr) >= 0)
#else
-#define ASSERT_OK_ERRNO(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result < 0) { \
- log_error_errno(errno, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_OK_ERRNO(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(errno)); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_ZERO_ERRNO(expr) __coverity_check__((expr) == 0)
#else
-#define ASSERT_OK_ZERO_ERRNO(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result < 0) { \
- log_error_errno(errno, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
- if (_result != 0) { \
- char _sexpr[DECIMAL_STR_MAX(typeof(expr))]; \
- xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result); \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be zero, but it is %s.", \
- PROJECT_FILE, __LINE__, #expr, _sexpr); \
- abort(); \
- } \
+#define ASSERT_OK_ZERO_ERRNO(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr, STRERROR(errno)); \
+ if (_result != 0) { \
+ char _sexpr[DECIMAL_STR_MAX(typeof(expr))]; \
+ xsprintf(_sexpr, DECIMAL_STR_FMT(_result), _result); \
+ log_test_failed("Expected \"%s\" to be zero, but it is %s.", #expr, _sexpr); \
+ } \
})
#endif
#ifdef __COVERITY__
#define ASSERT_OK_EQ_ERRNO(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
-#define ASSERT_OK_EQ_ERRNO(expr1, expr2) \
- ({ \
- typeof(expr1) _expr1 = (expr1); \
- typeof(expr2) _expr2 = (expr2); \
- if (_expr1 < 0) { \
- log_error_errno(errno, "%s:%i: Assertion failed: expected \"%s\" to succeed, but got error: %m", \
- PROJECT_FILE, __LINE__, #expr1); \
- abort(); \
- } \
- if (_expr1 != _expr2) { \
- char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))]; \
- char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
- xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
- xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", but %s != %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
- } \
+#define ASSERT_OK_EQ_ERRNO(expr1, expr2) \
+ ({ \
+ typeof(expr1) _expr1 = (expr1); \
+ typeof(expr2) _expr2 = (expr2); \
+ if (_expr1 < 0) \
+ log_test_failed("Expected \"%s\" to succeed, but got error: %s", #expr1, STRERROR(errno)); \
+ if (_expr1 != _expr2) { \
+ char _sexpr1[DECIMAL_STR_MAX(typeof(expr1))]; \
+ char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
+ xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
+ xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
+ log_test_failed("Expected \"%s == %s\", but %s != %s", #expr1, #expr2, _sexpr1, _sexpr2); \
+ } \
})
#endif
#ifdef __COVERITY__
#define ASSERT_FAIL(expr) __coverity_check__((expr) < 0)
#else
-#define ASSERT_FAIL(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result >= 0) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to fail, but it succeeded.", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_FAIL(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result >= 0) \
+ log_test_failed("Expected \"%s\" to fail, but it succeeded.", #expr); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_ERROR(expr1, expr2) __coverity_check__((expr1) == -(expr2))
#else
-#define ASSERT_ERROR(expr1, expr2) \
- ({ \
- int _expr1 = (expr1); \
- int _expr2 = (expr2); \
- if (_expr1 >= 0) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to fail with error \"%s\", but it succeeded", \
- PROJECT_FILE, __LINE__, #expr1, STRERROR(_expr2)); \
- abort(); \
- } else if (-_expr1 != _expr2) { \
- log_error_errno(_expr1, "%s:%i: Assertion failed: expected \"%s\" to fail with error \"%s\", but got the following error: %m", \
- PROJECT_FILE, __LINE__, #expr1, STRERROR(_expr2)); \
- abort(); \
- } \
+#define ASSERT_ERROR(expr1, expr2) \
+ ({ \
+ int _expr1 = (expr1); \
+ int _expr2 = (expr2); \
+ if (_expr1 >= 0) \
+ log_test_failed("Expected \"%s\" to fail with error \"%s\", but it succeeded", \
+ #expr1, STRERROR(_expr2)); \
+ else if (-_expr1 != _expr2) \
+ log_test_failed("Expected \"%s\" to fail with error \"%s\", but got the following error: %s", \
+ #expr1, STRERROR(_expr2), STRERROR(_expr1)); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_ERROR_ERRNO(expr1, expr2) __coverity_check__((expr1) < 0 && errno == (expr2))
#else
-#define ASSERT_ERROR_ERRNO(expr1, expr2) \
- ({ \
- int _expr1 = (expr1); \
- int _expr2 = (expr2); \
- if (_expr1 >= 0) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to fail with error \"%s\", but it succeeded", \
- PROJECT_FILE, __LINE__, #expr1, STRERROR(_expr2)); \
- abort(); \
- } else if (errno != _expr2) { \
- log_error_errno(errno, "%s:%i: Assertion failed: expected \"%s\" to fail with error \"%s\", but got the following error: %m", \
- PROJECT_FILE, __LINE__, #expr1, STRERROR(errno)); \
- abort(); \
- } \
+#define ASSERT_ERROR_ERRNO(expr1, expr2) \
+ ({ \
+ int _expr1 = (expr1); \
+ int _expr2 = (expr2); \
+ if (_expr1 >= 0) \
+ log_test_failed("Expected \"%s\" to fail with error \"%s\", but it succeeded", \
+ #expr1, STRERROR(_expr2)); \
+ else if (errno != _expr2) \
+ log_test_failed("Expected \"%s\" to fail with error \"%s\", but got the following error: %s", \
+ #expr1, STRERROR(_expr2), STRERROR(errno)); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_TRUE(expr) __coverity_check__(!!(expr))
#else
-#define ASSERT_TRUE(expr) \
- ({ \
- if (!(expr)) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be true", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_TRUE(expr) \
+ ({ \
+ if (!(expr)) \
+ log_test_failed("Expected \"%s\" to be true", #expr); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_FALSE(expr) __coverity_check__(!(expr))
#else
-#define ASSERT_FALSE(expr) \
- ({ \
- if ((expr)) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be false", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
+#define ASSERT_FALSE(expr) \
+ ({ \
+ if ((expr)) \
+ log_test_failed("Expected \"%s\" to be false", #expr); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_NULL(expr) __coverity_check__((expr) == NULL)
#else
-#define ASSERT_NULL(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result != NULL) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be NULL, got \"%p\" != NULL", \
- PROJECT_FILE, __LINE__, #expr, _result); \
- abort(); \
- } \
+#define ASSERT_NULL(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result != NULL) \
+ log_test_failed("Expected \"%s\" to be NULL, got \"%p\" != NULL", #expr, _result); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_NOT_NULL(expr) __coverity_check__((expr) != NULL)
#else
-#define ASSERT_NOT_NULL(expr) \
- ({ \
- typeof(expr) _result = (expr); \
- if (_result == NULL) { \
- log_error("%s:%i: Assertion failed: expected \"%s\" to be not NULL", \
- PROJECT_FILE, __LINE__, #expr); \
- abort(); \
- } \
- \
- _result; \
+#define ASSERT_NOT_NULL(expr) \
+ ({ \
+ typeof(expr) _result = (expr); \
+ if (_result == NULL) \
+ log_test_failed("Expected \"%s\" to be not NULL", #expr); \
+ _result; \
})
#endif
#ifdef __COVERITY__
#define ASSERT_STREQ(expr1, expr2) __coverity_check__(streq_ptr((expr1), (expr2)))
#else
-#define ASSERT_STREQ(expr1, expr2) \
- ({ \
- const char *_expr1 = (expr1), *_expr2 = (expr2); \
- if (!streq_ptr(_expr1, _expr2)) { \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", got \"%s != %s\"", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, strnull(_expr1), strnull(_expr2)); \
- abort(); \
- } \
+#define ASSERT_STREQ(expr1, expr2) \
+ ({ \
+ const char *_expr1 = (expr1), *_expr2 = (expr2); \
+ if (!streq_ptr(_expr1, _expr2)) \
+ log_test_failed("Expected \"%s == %s\", got \"%s != %s\"", \
+ #expr1, #expr2, strnull(_expr1), strnull(_expr2)); \
})
#endif
#ifdef __COVERITY__
#define ASSERT_PTR_EQ(expr1, expr2) __coverity_check__((expr1) == (expr2))
#else
-#define ASSERT_PTR_EQ(expr1, expr2) \
- ({ \
- const void *_expr1 = (expr1), *_expr2 = (expr2); \
- if (_expr1 != _expr2) { \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", got \"0x%p != 0x%p\"", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _expr1, _expr2); \
- abort(); \
- } \
+#define ASSERT_PTR_EQ(expr1, expr2) \
+ ({ \
+ const void *_expr1 = (expr1), *_expr2 = (expr2); \
+ if (_expr1 != _expr2) \
+ log_test_failed("Expected \"%s == %s\", got \"0x%p != 0x%p\"", \
+ #expr1, #expr2, _expr1, _expr2); \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", but %s != %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s == %s\", but %s != %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s >= %s\", but %s < %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s >= %s\", but %s < %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s <= %s\", but %s > %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s <= %s\", but %s > %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s != %s\", but %s == %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s != %s\", but %s == %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s > %s\", but %s <= %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s > %s\", but %s <= %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
char _sexpr2[DECIMAL_STR_MAX(typeof(expr2))]; \
xsprintf(_sexpr1, DECIMAL_STR_FMT(_expr1), _expr1); \
xsprintf(_sexpr2, DECIMAL_STR_FMT(_expr2), _expr2); \
- log_error("%s:%i: Assertion failed: expected \"%s < %s\", but %s >= %s", \
- PROJECT_FILE, __LINE__, #expr1, #expr2, _sexpr1, _sexpr2); \
- abort(); \
+ log_test_failed("Expected \"%s < %s\", but %s >= %s", \
+ #expr1, #expr2, _sexpr1, _sexpr2); \
} \
})
#endif
+int assert_signal_internal(void);
+
#ifdef __COVERITY__
#define ASSERT_SIGNAL(expr, signal) __coverity_check__(((expr), false))
#else
#define ASSERT_SIGNAL(expr, signal) \
({ \
ASSERT_TRUE(SIGNAL_VALID(signal)); \
- siginfo_t _siginfo = {}; \
- int _pid = fork(); \
- ASSERT_OK(_pid); \
- if (_pid == 0) { \
- /* Speed things up by never even attempting to generate a coredump */ \
- (void) prctl(PR_SET_DUMPABLE, 0); \
- /* But still set an rlimit just in case */ \
- (void) setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(0)); \
+ int _r = assert_signal_internal(); \
+ ASSERT_OK_ERRNO(_r); \
+ if (_r == 0) { \
expr; \
_exit(EXIT_SUCCESS); \
} \
- (void) wait_for_terminate(_pid, &_siginfo); \
- if (_siginfo.si_status != signal) { \
- log_error("%s:%i: Assertion failed: \"%s\" died with signal %s, but %s was expected", \
- PROJECT_FILE, __LINE__, #expr, signal_to_string(_siginfo.si_status), \
- signal_to_string(signal)); \
- abort(); \
- } \
+ if (_r != signal) \
+ log_test_failed("\"%s\" died with signal %s, but %s was expected", \
+ #expr, signal_to_string(_r), signal_to_string(signal)); \
})
#endif
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
- if (!sd_id128_equal(_expr1, _expr2)) { \
- log_error("%s:%i: Assertion failed: \"%s == %s\", but %s != %s", \
- PROJECT_FILE, __LINE__, \
- #expr1, #expr2, \
- SD_ID128_TO_STRING(_expr1), SD_ID128_TO_STRING(_expr2)); \
- abort(); \
- } \
+ if (!sd_id128_equal(_expr1, _expr2)) \
+ log_test_failed("\"%s == %s\", but %s != %s", \
+ #expr1, #expr2, \
+ SD_ID128_TO_STRING(_expr1), SD_ID128_TO_STRING(_expr2)); \
})
#endif
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
- if (sd_id128_equal(_expr1, _expr2)) { \
- log_error("%s:%i: Assertion failed: \"%s != %s\", but %s == %s", \
- PROJECT_FILE, __LINE__, \
- #expr1, #expr2, \
- SD_ID128_TO_STRING(_expr1), SD_ID128_TO_STRING(_expr2)); \
- abort(); \
- } \
+ if (sd_id128_equal(_expr1, _expr2)) \
+ log_test_failed("\"%s != %s\", but %s == %s", \
+ #expr1, #expr2, \
+ SD_ID128_TO_STRING(_expr1), SD_ID128_TO_STRING(_expr2)); \
})
#endif
({ \
typeof(expr1) _expr1 = (expr1); \
typeof(expr2) _expr2 = (expr2); \
- if (!efi_guid_equal(_expr1, _expr2)) { \
- log_error("%s:%i: Assertion failed: expected \"%s == %s\", but " EFI_GUID_Fmt \
- " != " EFI_GUID_Fmt, \
- PROJECT_FILE, __LINE__, \
- #expr1, #expr2, \
- EFI_GUID_Arg(*_expr1), EFI_GUID_Arg(*_expr2)); \
- abort(); \
- } \
+ if (!efi_guid_equal(_expr1, _expr2)) \
+ log_test_failed("Expected \"%s == %s\", but " EFI_GUID_Fmt \
+ " != " EFI_GUID_Fmt, \
+ #expr1, #expr2, \
+ EFI_GUID_Arg(*_expr1), EFI_GUID_Arg(*_expr2)); \
})
#endif