From: Daan De Meyer Date: Thu, 19 Sep 2024 09:38:47 +0000 (+0200) Subject: Add ASSERT_OK_ZERO_ERRNO() and ASSERT_OK_EQ_ERRNO() X-Git-Tag: v257-rc1~396^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1d8a81eb4ea8e8c1fc82e839cb9f2a65da5346ad;p=thirdparty%2Fsystemd.git Add ASSERT_OK_ZERO_ERRNO() and ASSERT_OK_EQ_ERRNO() --- diff --git a/src/shared/tests.h b/src/shared/tests.h index 0c1b8cfa780..33180e7b371 100644 --- a/src/shared/tests.h +++ b/src/shared/tests.h @@ -281,6 +281,44 @@ static inline int run_test_table(void) { } \ }) +#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 the following 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_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 the following 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_FAIL(expr) \ ({ \ typeof(expr) _result = (expr); \ diff --git a/src/test/test-macro.c b/src/test/test-macro.c index 69df6bc5674..c4c533777dc 100644 --- a/src/test/test-macro.c +++ b/src/test/test-macro.c @@ -1141,6 +1141,18 @@ TEST(ASSERT) { ASSERT_SIGNAL(ASSERT_OK_ERRNO(-1), SIGABRT); ASSERT_SIGNAL(ASSERT_OK_ERRNO(-ENOANO), SIGABRT); + ASSERT_OK_ZERO_ERRNO(0); + ASSERT_SIGNAL(ASSERT_OK_ZERO_ERRNO(1), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_ZERO_ERRNO(255), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_ZERO_ERRNO(-1), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_ZERO_ERRNO(-ENOANO), SIGABRT); + + ASSERT_OK_EQ_ERRNO(0, 0); + ASSERT_SIGNAL(ASSERT_OK_EQ_ERRNO(1, 0), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_EQ_ERRNO(255, 5), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_EQ_ERRNO(-1, 0), SIGABRT); + ASSERT_SIGNAL(ASSERT_OK_EQ_ERRNO(-ENOANO, 0), SIGABRT); + ASSERT_FAIL(-ENOENT); ASSERT_FAIL(-EPERM); ASSERT_SIGNAL(ASSERT_FAIL(0), SIGABRT);