]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add ASSERT_OK_POSITIVE() and ASSERT_OK_ZERO()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 7 Aug 2024 08:48:42 +0000 (17:48 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Aug 2024 19:43:20 +0000 (04:43 +0900)
src/shared/tests.h
src/test/test-macro.c

index 121d4f0edd584126d7c30859f78b155cbe962aa5..d4d9aa998bd8a94ae68252426dcdec5199f3d01a 100644 (file)
@@ -217,6 +217,39 @@ static inline int run_test_table(void) {
                 }                                                                                               \
          })
 
+/* For funtions that return a boolean on success and a negative errno on failure. */
+#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 the following 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_ZERO(expr)                                                                                    \
+        ({                                                                                                      \
+                typeof(expr) _result = (expr);                                                                  \
+                if (_result < 0) {                                                                              \
+                        log_error_errno(_result, "%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_ERRNO(expr)                                                                                   \
         ({                                                                                                      \
                 typeof(expr) _result = (expr);                                                                  \
index 3d5b0cfeedfe5ef8fb44d0a22778746463989e0b..b56f5b86e4764df12b37f2967bb977170aa47e88 100644 (file)
@@ -1117,6 +1117,18 @@ TEST(ASSERT) {
         ASSERT_SIGNAL(ASSERT_OK(-1), SIGABRT);
         ASSERT_SIGNAL(ASSERT_OK(-ENOANO), SIGABRT);
 
+        ASSERT_OK_POSITIVE(1);
+        ASSERT_OK_POSITIVE(255);
+        ASSERT_SIGNAL(ASSERT_OK_POSITIVE(0), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_OK_POSITIVE(-1), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_OK_POSITIVE(-ENOANO), SIGABRT);
+
+        ASSERT_OK_ZERO(0);
+        ASSERT_SIGNAL(ASSERT_OK_ZERO(1), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_OK_ZERO(255), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_OK_ZERO(-1), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_OK_ZERO(-ENOANO), SIGABRT);
+
         ASSERT_OK_ERRNO(0 >= 0);
         ASSERT_OK_ERRNO(255 >= 0);
         ASSERT_OK_ERRNO(printf("Hello world\n"));