]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Add ASSERT_FAIL()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 24 Jul 2024 07:55:21 +0000 (09:55 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 24 Jul 2024 16:58:40 +0000 (18:58 +0200)
src/shared/tests.h
src/test/test-macro.c

index 820c3f70b747c701ab0b8d5269ea48916608fa5b..ced403483cc68ee1cc684cc7bb7ff92b31eb12b5 100644 (file)
@@ -227,6 +227,16 @@ static inline int run_test_table(void) {
                 }                                                                                               \
         })
 
+#define ASSERT_FAIL(expr)                                                                                       \
+        ({                                                                                                      \
+                typeof(expr) _result = (expr);                                                                  \
+                if (_result >= 0) {                                                                             \
+                        log_error_errno(_result, "%s:%i: Assertion failed: expected \"%s\" to fail, but it succeeded", \
+                                        PROJECT_FILE, __LINE__, #expr);                                         \
+                        abort();                                                                                \
+                }                                                                                               \
+        })
+
 #define ASSERT_ERROR(expr1, expr2)                                                                              \
         ({                                                                                                      \
                 int _expr1 = (expr1);                                                                           \
index 9e2875d8a71ffae55e3df5fc990afea92c5e8b80..1d2993a3ae4afb9fc6d1a6bb867285bb5a3b663c 100644 (file)
@@ -1122,6 +1122,11 @@ TEST(ASSERT) {
         ASSERT_SIGNAL(ASSERT_OK_ERRNO(-1), SIGABRT);
         ASSERT_SIGNAL(ASSERT_OK_ERRNO(-ENOANO), SIGABRT);
 
+        ASSERT_FAIL(-ENOENT);
+        ASSERT_FAIL(-EPERM);
+        ASSERT_SIGNAL(ASSERT_FAIL(0), SIGABRT);
+        ASSERT_SIGNAL(ASSERT_FAIL(255), SIGABRT);
+
         ASSERT_ERROR(-ENOENT, ENOENT);
         ASSERT_ERROR(RET_NERRNO(mkdir("/i/will/fail/with/enoent", 666)), ENOENT);
         ASSERT_SIGNAL(ASSERT_ERROR(0, ENOENT), SIGABRT);