From: Yu Watanabe Date: Wed, 7 Aug 2024 02:01:49 +0000 (+0900) Subject: test: modernize test-journal-interleaving X-Git-Tag: v257-rc1~702^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2e4b8d866e57fbcb345510761825a172362f05f;p=thirdparty%2Fsystemd.git test: modernize test-journal-interleaving --- diff --git a/src/libsystemd/sd-journal/test-journal-interleaving.c b/src/libsystemd/sd-journal/test-journal-interleaving.c index c1b7e23de5f..101ca5396fa 100644 --- a/src/libsystemd/sd-journal/test-journal-interleaving.c +++ b/src/libsystemd/sd-journal/test-journal-interleaving.c @@ -16,6 +16,7 @@ #include "parse-util.h" #include "random-util.h" #include "rm-rf.h" +#include "tmpfile-util.h" #include "tests.h" /* This program tests skipping around in a multi-file journal. */ @@ -23,43 +24,27 @@ static bool arg_keep = false; static dual_timestamp previous_ts = {}; -_noreturn_ static void log_assert_errno(const char *text, int error, const char *file, unsigned line, const char *func) { - log_internal(LOG_CRIT, error, file, line, func, - "'%s' failed at %s:%u (%s): %m", text, file, line, func); - abort(); -} - -#define assert_ret(expr) \ - do { \ - int _r_ = (expr); \ - if (_unlikely_(_r_ < 0)) \ - log_assert_errno(#expr, -_r_, PROJECT_FILE, __LINE__, __func__); \ - } while (false) - -static JournalFile *test_open_internal(const char *name, JournalFileFlags flags) { +static JournalFile* test_open_internal(const char *name, JournalFileFlags flags) { _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL; JournalFile *f; - m = mmap_cache_new(); - assert_se(m != NULL); - - assert_ret(journal_file_open(-EBADF, name, O_RDWR|O_CREAT, flags, 0644, UINT64_MAX, NULL, m, NULL, &f)); + ASSERT_NOT_NULL(m = mmap_cache_new()); + ASSERT_OK(journal_file_open(-EBADF, name, O_RDWR|O_CREAT, flags, 0644, UINT64_MAX, NULL, m, NULL, &f)); return f; } -static JournalFile *test_open(const char *name) { +static JournalFile* test_open(const char *name) { return test_open_internal(name, JOURNAL_COMPRESS); } -static JournalFile *test_open_strict(const char *name) { +static JournalFile* test_open_strict(const char *name) { return test_open_internal(name, JOURNAL_COMPRESS | JOURNAL_STRICT_ORDER); } -static void test_close(JournalFile *f) { - (void) journal_file_offline_close(f); -} +static char* test_done(char *t) { + if (!t) + return NULL; -static void test_done(const char *t) { log_info("Done..."); if (arg_keep) @@ -67,13 +52,16 @@ static void test_done(const char *t) { else { journal_directory_vacuum(".", 3000000, 0, 0, NULL, true); - assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0); + ASSERT_OK(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL)); } log_info("------------------------------------------------------------"); + return mfree(t); } -static void append_number(JournalFile *f, int n, const sd_id128_t *boot_id, uint64_t *seqnum, uint64_t *ret_offset) { +DEFINE_TRIVIAL_CLEANUP_FUNC(char*, test_done); + +static void append_number(JournalFile *f, unsigned n, const sd_id128_t *boot_id, uint64_t *seqnum, uint64_t *ret_offset) { _cleanup_free_ char *p = NULL, *q = NULL, *s = NULL; dual_timestamp ts; struct iovec iovec[3]; @@ -89,18 +77,18 @@ static void append_number(JournalFile *f, int n, const sd_id128_t *boot_id, uint previous_ts = ts; - assert_se(asprintf(&p, "NUMBER=%d", n) >= 0); + ASSERT_OK(asprintf(&p, "NUMBER=%u", n)); iovec[n_iov++] = IOVEC_MAKE_STRING(p); - assert_se(s = strjoin("LESS_THAN_FIVE=%d", yes_no(n < 5))); + ASSERT_NOT_NULL(s = strjoin("LESS_THAN_FIVE=", yes_no(n < 5))); iovec[n_iov++] = IOVEC_MAKE_STRING(s); if (boot_id) { - assert_se(q = strjoin("_BOOT_ID=", SD_ID128_TO_STRING(*boot_id))); + ASSERT_NOT_NULL(q = strjoin("_BOOT_ID=", SD_ID128_TO_STRING(*boot_id))); iovec[n_iov++] = IOVEC_MAKE_STRING(q); } - assert_ret(journal_file_append_entry(f, &ts, boot_id, iovec, n_iov, seqnum, NULL, NULL, ret_offset)); + ASSERT_OK(journal_file_append_entry(f, &ts, boot_id, iovec, n_iov, seqnum, NULL, NULL, ret_offset)); } static void append_unreferenced_data(JournalFile *f, const sd_id128_t *boot_id) { @@ -113,91 +101,82 @@ static void append_unreferenced_data(JournalFile *f, const sd_id128_t *boot_id) ts.monotonic = usec_sub_unsigned(previous_ts.monotonic, 10); ts.realtime = usec_sub_unsigned(previous_ts.realtime, 10); - assert_se(q = strjoin("_BOOT_ID=", SD_ID128_TO_STRING(*boot_id))); + ASSERT_NOT_NULL(q = strjoin("_BOOT_ID=", SD_ID128_TO_STRING(*boot_id))); iovec = IOVEC_MAKE_STRING(q); - assert_se(journal_file_append_entry(f, &ts, boot_id, &iovec, 1, NULL, NULL, NULL, NULL) == -EREMCHG); + ASSERT_ERROR(journal_file_append_entry(f, &ts, boot_id, &iovec, 1, NULL, NULL, NULL, NULL), EREMCHG); } -static void test_check_number(sd_journal *j, int n) { +static void test_check_number(sd_journal *j, unsigned expected) { sd_id128_t boot_id; const void *d; - _cleanup_free_ char *k = NULL; size_t l; - int x; - assert_se(sd_journal_get_monotonic_usec(j, NULL, &boot_id) >= 0); - assert_ret(sd_journal_get_data(j, "NUMBER", &d, &l)); - assert_se(k = strndup(d, l)); - printf("%s %s (expected=%i)\n", SD_ID128_TO_STRING(boot_id), k, n); + ASSERT_OK(sd_journal_get_monotonic_usec(j, NULL, &boot_id)); + ASSERT_OK(sd_journal_get_data(j, "NUMBER", &d, &l)); - assert_se(safe_atoi(k + STRLEN("NUMBER="), &x) >= 0); - assert_se(n == x); -} + _cleanup_free_ char *k = NULL; + ASSERT_NOT_NULL(k = strndup(d, l)); + printf("%s %s (expected=%u)\n", SD_ID128_TO_STRING(boot_id), k, expected); -static void test_check_numbers_down(sd_journal *j, int count) { - int i; + unsigned x; + ASSERT_OK(safe_atou(k + STRLEN("NUMBER="), &x)); + ASSERT_EQ(x, expected); +} - for (i = 1; i <= count; i++) { - int r; +static void test_check_numbers_down(sd_journal *j, unsigned count) { + for (unsigned i = 1; i <= count; i++) { test_check_number(j, i); - assert_ret(r = sd_journal_next(j)); if (i == count) - assert_se(r == 0); + ASSERT_OK_ZERO(sd_journal_next(j)); else - assert_se(r == 1); + ASSERT_OK_POSITIVE(sd_journal_next(j)); } - } -static void test_check_numbers_up(sd_journal *j, int count) { - for (int i = count; i >= 1; i--) { - int r; +static void test_check_numbers_up(sd_journal *j, unsigned count) { + for (unsigned i = count; i >= 1; i--) { test_check_number(j, i); - assert_ret(r = sd_journal_previous(j)); if (i == 1) - assert_se(r == 0); + ASSERT_OK_ZERO(sd_journal_previous(j)); else - assert_se(r == 1); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); } } static void setup_sequential(void) { - JournalFile *f1, *f2, *f3; + _cleanup_(journal_file_offline_closep) JournalFile *f1 = NULL, *f2 = NULL, *f3 = NULL; sd_id128_t id; f1 = test_open("one.journal"); f2 = test_open("two.journal"); f3 = test_open("three.journal"); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_number(f1, 1, &id, NULL, NULL); append_number(f1, 2, &id, NULL, NULL); append_number(f1, 3, &id, NULL, NULL); append_number(f2, 4, &id, NULL, NULL); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_number(f2, 5, &id, NULL, NULL); append_number(f2, 6, &id, NULL, NULL); append_number(f3, 7, &id, NULL, NULL); append_number(f3, 8, &id, NULL, NULL); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_number(f3, 9, &id, NULL, NULL); - test_close(f1); - test_close(f2); - test_close(f3); } static void setup_interleaved(void) { - JournalFile *f1, *f2, *f3; + _cleanup_(journal_file_offline_closep) JournalFile *f1 = NULL, *f2 = NULL, *f3 = NULL; sd_id128_t id; f1 = test_open("one.journal"); f2 = test_open("two.journal"); f3 = test_open("three.journal"); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_number(f1, 1, &id, NULL, NULL); append_number(f2, 2, &id, NULL, NULL); @@ -208,13 +187,10 @@ static void setup_interleaved(void) { append_number(f1, 7, &id, NULL, NULL); append_number(f2, 8, &id, NULL, NULL); append_number(f3, 9, &id, NULL, NULL); - test_close(f1); - test_close(f2); - test_close(f3); } static void setup_unreferenced_data(void) { - JournalFile *f1, *f2, *f3; + _cleanup_(journal_file_offline_closep) JournalFile *f1 = NULL, *f2 = NULL, *f3 = NULL; sd_id128_t id; /* For issue #29275. */ @@ -222,234 +198,232 @@ static void setup_unreferenced_data(void) { f1 = test_open_strict("one.journal"); f2 = test_open_strict("two.journal"); f3 = test_open_strict("three.journal"); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_number(f1, 1, &id, NULL, NULL); append_number(f1, 2, &id, NULL, NULL); append_number(f1, 3, &id, NULL, NULL); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_unreferenced_data(f1, &id); append_number(f2, 4, &id, NULL, NULL); append_number(f2, 5, &id, NULL, NULL); append_number(f2, 6, &id, NULL, NULL); - assert_se(sd_id128_randomize(&id) >= 0); + ASSERT_OK(sd_id128_randomize(&id)); log_info("boot_id: %s", SD_ID128_TO_STRING(id)); append_unreferenced_data(f2, &id); append_number(f3, 7, &id, NULL, NULL); append_number(f3, 8, &id, NULL, NULL); append_number(f3, 9, &id, NULL, NULL); - test_close(f1); - test_close(f2); - test_close(f3); } -static void mkdtemp_chdir_chattr(char *path) { - assert_se(mkdtemp(path)); - assert_se(chdir(path) >= 0); +static void mkdtemp_chdir_chattr(const char *template, char **ret) { + _cleanup_(rm_rf_physical_and_freep) char *path = NULL; + + ASSERT_OK(mkdtemp_malloc(template, &path)); + ASSERT_OK_ERRNO(chdir(path)); /* Speed up things a bit on btrfs, ensuring that CoW is turned off for all files created in our * directory during the test run */ (void) chattr_path(path, FS_NOCOW_FL, FS_NOCOW_FL, NULL); + + *ret = TAKE_PTR(path); } static void test_cursor(sd_journal *j) { _cleanup_strv_free_ char **cursors = NULL; int r; - assert_se(sd_journal_seek_head(j) >= 0); + ASSERT_OK(sd_journal_seek_head(j)); for (;;) { - r = sd_journal_next(j); - assert_se(r >= 0); + ASSERT_OK(r = sd_journal_next(j)); if (r == 0) break; _cleanup_free_ char *cursor = NULL; - assert_se(sd_journal_get_cursor(j, &cursor) >= 0); - assert_se(sd_journal_test_cursor(j, cursor) > 0); - assert_se(strv_consume(&cursors, TAKE_PTR(cursor)) >= 0); + ASSERT_OK(sd_journal_get_cursor(j, &cursor)); + ASSERT_OK_POSITIVE(sd_journal_test_cursor(j, cursor)); + ASSERT_OK(strv_consume(&cursors, TAKE_PTR(cursor))); } STRV_FOREACH(c, cursors) { - assert_se(sd_journal_seek_cursor(j, *c) >= 0); - assert_se(sd_journal_next(j) >= 0); - assert_se(sd_journal_test_cursor(j, *c) > 0); + ASSERT_OK(sd_journal_seek_cursor(j, *c)); + ASSERT_OK(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_test_cursor(j, *c)); } - assert_se(sd_journal_seek_head(j) >= 0); + ASSERT_OK(sd_journal_seek_head(j)); STRV_FOREACH(c, cursors) { - assert_se(sd_journal_next(j) >= 0); - assert_se(sd_journal_test_cursor(j, *c) > 0); + ASSERT_OK(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_test_cursor(j, *c)); } } static void test_skip_one(void (*setup)(void)) { - char t[] = "/var/tmp/journal-skip-XXXXXX"; + _cleanup_(test_donep) char *t = NULL; sd_journal *j; - int r; - mkdtemp_chdir_chattr(t); + mkdtemp_chdir_chattr("/var/tmp/journal-skip-XXXXXX", &t); setup(); /* Seek to head, iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to head, iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ - assert_se(sd_journal_previous(j) == 0); /* no-op */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to head twice, iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to head, move to previous, then iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_previous(j) == 0); /* no-op */ - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to head, walk several steps, then iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_previous(j) == 0); /* no-op */ - assert_se(sd_journal_previous(j) == 0); /* no-op */ - assert_se(sd_journal_previous(j) == 0); /* no-op */ - assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */ - assert_se(sd_journal_previous(j) == 0); /* no-op */ - assert_se(sd_journal_previous(j) == 0); /* no-op */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ + ASSERT_OK_POSITIVE(sd_journal_next(j)); /* pointing to the first entry */ + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_previous(j)); /* no-op */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to tail, iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); /* pointing to the last entry */ test_check_numbers_up(j, 9); sd_journal_close(j); /* Seek to tail twice, iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */ - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); /* pointing to the last entry */ + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); /* pointing to the last entry */ test_check_numbers_up(j, 9); sd_journal_close(j); /* Seek to tail, move to next, then iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_next(j) == 0); /* no-op */ - assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ + ASSERT_OK_POSITIVE(sd_journal_previous(j)); /* pointing to the last entry */ test_check_numbers_up(j, 9); sd_journal_close(j); /* Seek to tail, walk several steps, then iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_next(j) == 0); /* no-op */ - assert_se(sd_journal_next(j) == 0); /* no-op */ - assert_se(sd_journal_next(j) == 0); /* no-op */ - assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry. */ - assert_se(sd_journal_next(j) == 0); /* no-op */ - assert_se(sd_journal_next(j) == 0); /* no-op */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ + ASSERT_OK_POSITIVE(sd_journal_previous(j)); /* pointing to the last entry. */ + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ + ASSERT_OK_ZERO(sd_journal_next(j)); /* no-op */ test_check_numbers_up(j, 9); sd_journal_close(j); /* Seek to tail, skip to head, iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_previous_skip(j, 9) == 9); /* pointing to the first entry. */ + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_EQ(sd_journal_previous_skip(j, 9), 9); /* pointing to the first entry. */ test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to tail, skip to head in a more complex way, then iterate down. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_tail(j)); - assert_se(sd_journal_next(j) == 0); - assert_se(sd_journal_previous_skip(j, 4) == 4); - assert_se(sd_journal_previous_skip(j, 5) == 5); - assert_se(sd_journal_previous(j) == 0); - assert_se(sd_journal_previous_skip(j, 5) == 0); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_previous_skip(j, 5) == 1); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_previous(j) == 1); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_previous_skip(j, 5) == 3); + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_tail(j)); + ASSERT_OK_ZERO(sd_journal_next(j)); + ASSERT_EQ(sd_journal_previous_skip(j, 4), 4); + ASSERT_EQ(sd_journal_previous_skip(j, 5), 5); + ASSERT_OK_ZERO(sd_journal_previous(j)); + ASSERT_OK_ZERO(sd_journal_previous_skip(j, 5)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_previous_skip(j, 5)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_EQ(sd_journal_previous_skip(j, 5), 3); test_check_numbers_down(j, 9); sd_journal_close(j); /* Seek to head, skip to tail, iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_next_skip(j, 9) == 9); + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_EQ(sd_journal_next_skip(j, 9), 9); test_check_numbers_up(j, 9); sd_journal_close(j); /* Seek to head, skip to tail in a more complex way, then iterate up. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_ret(sd_journal_seek_head(j)); - assert_se(sd_journal_previous(j) == 0); - assert_se(sd_journal_next_skip(j, 4) == 4); - assert_se(sd_journal_next_skip(j, 5) == 5); - assert_se(sd_journal_next(j) == 0); - assert_se(sd_journal_next_skip(j, 5) == 0); - assert_se(sd_journal_previous(j) == 1); - assert_se(sd_journal_next_skip(j, 5) == 1); - assert_se(sd_journal_previous(j) == 1); - assert_se(sd_journal_previous(j) == 1); - assert_se(sd_journal_next(j) == 1); - assert_se(sd_journal_previous(j) == 1); - assert_se(sd_journal_previous(j) == 1); - assert_se(r = sd_journal_next_skip(j, 5) == 3); + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_seek_head(j)); + ASSERT_OK_ZERO(sd_journal_previous(j)); + ASSERT_EQ(sd_journal_next_skip(j, 4), 4); + ASSERT_EQ(sd_journal_next_skip(j, 5), 5); + ASSERT_OK_ZERO(sd_journal_next(j)); + ASSERT_OK_ZERO(sd_journal_next_skip(j, 5)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_OK_POSITIVE(sd_journal_next_skip(j, 5)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_OK_POSITIVE(sd_journal_next(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_OK_POSITIVE(sd_journal_previous(j)); + ASSERT_EQ(sd_journal_next_skip(j, 5), 3); test_check_numbers_up(j, 9); sd_journal_close(j); /* For issue #31516. */ - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); test_cursor(j); sd_journal_flush_matches(j); - assert_se(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX) >= 0); + ASSERT_OK(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX)); test_cursor(j); sd_journal_flush_matches(j); - assert_se(sd_journal_add_match(j, "LESS_THAN_FIVE=no", SIZE_MAX) >= 0); + ASSERT_OK(sd_journal_add_match(j, "LESS_THAN_FIVE=no", SIZE_MAX)); test_cursor(j); sd_journal_flush_matches(j); - assert_se(sd_journal_add_match(j, "LESS_THAN_FIVE=hoge", SIZE_MAX) >= 0); + ASSERT_OK(sd_journal_add_match(j, "LESS_THAN_FIVE=hoge", SIZE_MAX)); test_cursor(j); sd_journal_flush_matches(j); - assert_se(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX) >= 0); - assert_se(sd_journal_add_match(j, "NUMBER=3", SIZE_MAX) >= 0); + ASSERT_OK(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX)); + ASSERT_OK(sd_journal_add_match(j, "NUMBER=3", SIZE_MAX)); test_cursor(j); sd_journal_flush_matches(j); - assert_se(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX) >= 0); - assert_se(sd_journal_add_match(j, "NUMBER=3", SIZE_MAX) >= 0); - assert_se(sd_journal_add_match(j, "NUMBER=4", SIZE_MAX) >= 0); - assert_se(sd_journal_add_match(j, "NUMBER=5", SIZE_MAX) >= 0); - assert_se(sd_journal_add_match(j, "NUMBER=6", SIZE_MAX) >= 0); + ASSERT_OK(sd_journal_add_match(j, "LESS_THAN_FIVE=yes", SIZE_MAX)); + ASSERT_OK(sd_journal_add_match(j, "NUMBER=3", SIZE_MAX)); + ASSERT_OK(sd_journal_add_match(j, "NUMBER=4", SIZE_MAX)); + ASSERT_OK(sd_journal_add_match(j, "NUMBER=5", SIZE_MAX)); + ASSERT_OK(sd_journal_add_match(j, "NUMBER=6", SIZE_MAX)); test_cursor(j); - - test_done(t); + sd_journal_close(j); } TEST(skip) { @@ -458,40 +432,40 @@ TEST(skip) { } static void test_boot_id_one(void (*setup)(void), size_t n_ids_expected) { - char t[] = "/var/tmp/journal-boot-id-XXXXXX"; + _cleanup_(test_donep) char *t = NULL; _cleanup_(sd_journal_closep) sd_journal *j = NULL; _cleanup_free_ LogId *ids = NULL; size_t n_ids; - mkdtemp_chdir_chattr(t); + mkdtemp_chdir_chattr("/var/tmp/journal-boot-id-XXXXXX", &t); setup(); - assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); - assert_se(journal_get_boots( + ASSERT_OK(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE)); + ASSERT_OK(journal_get_boots( j, /* advance_older = */ false, /* max_ids = */ SIZE_MAX, - &ids, &n_ids) >= 0); - assert_se(ids); - assert_se(n_ids == n_ids_expected); + &ids, &n_ids)); + ASSERT_NOT_NULL(ids); + ASSERT_EQ(n_ids, n_ids_expected); for (size_t i = 0; i < n_ids; i++) { sd_id128_t id; /* positive offset */ - assert_se(journal_find_boot(j, SD_ID128_NULL, (int) (i + 1), &id) == 1); - assert_se(sd_id128_equal(id, ids[i].id)); + ASSERT_OK_POSITIVE(journal_find_boot(j, SD_ID128_NULL, (int) (i + 1), &id)); + ASSERT_TRUE(sd_id128_equal(id, ids[i].id)); /* negative offset */ - assert_se(journal_find_boot(j, SD_ID128_NULL, (int) (i + 1) - (int) n_ids, &id) == 1); - assert_se(sd_id128_equal(id, ids[i].id)); + ASSERT_OK_POSITIVE(journal_find_boot(j, SD_ID128_NULL, (int) (i + 1) - (int) n_ids, &id)); + ASSERT_TRUE(sd_id128_equal(id, ids[i].id)); for (size_t k = 0; k < n_ids; k++) { int offset = (int) k - (int) i; /* relative offset */ - assert_se(journal_find_boot(j, ids[i].id, offset, &id) == 1); - assert_se(sd_id128_equal(id, ids[k].id)); + ASSERT_OK_POSITIVE(journal_find_boot(j, ids[i].id, offset, &id)); + ASSERT_TRUE(sd_id128_equal(id, ids[k].id)); } } @@ -499,30 +473,28 @@ static void test_boot_id_one(void (*setup)(void), size_t n_ids_expected) { _cleanup_free_ LogId *ids_limited = NULL; size_t n_ids_limited; - assert_se(journal_get_boots( + ASSERT_OK(journal_get_boots( j, /* advance_older = */ false, /* max_ids = */ i, - &ids_limited, &n_ids_limited) >= 0); - assert_se(ids_limited || i == 0); - assert_se(n_ids_limited == MIN(i, n_ids_expected)); - assert_se(memcmp_safe(ids, ids_limited, n_ids_limited * sizeof(LogId)) == 0); + &ids_limited, &n_ids_limited)); + ASSERT_TRUE(ids_limited || i == 0); + ASSERT_EQ(n_ids_limited, MIN(i, n_ids_expected)); + ASSERT_EQ(memcmp_safe(ids, ids_limited, n_ids_limited * sizeof(LogId)), 0); } for (size_t i = 0; i <= n_ids_expected + 1; i++) { _cleanup_free_ LogId *ids_limited = NULL; size_t n_ids_limited; - assert_se(journal_get_boots( + ASSERT_OK(journal_get_boots( j, /* advance_older = */ true, /* max_ids = */ i, - &ids_limited, &n_ids_limited) >= 0); - assert_se(ids_limited || i == 0); - assert_se(n_ids_limited == MIN(i, n_ids_expected)); + &ids_limited, &n_ids_limited)); + ASSERT_TRUE(ids_limited || i == 0); + ASSERT_EQ(n_ids_limited, MIN(i, n_ids_expected)); for (size_t k = 0; k < n_ids_limited; k++) - assert_se(memcmp(&ids[n_ids - k - 1], &ids_limited[k], sizeof(LogId)) == 0); + ASSERT_EQ(memcmp(&ids[n_ids - k - 1], &ids_limited[k], sizeof(LogId)), 0); } - - test_done(t); } TEST(boot_id) { @@ -531,95 +503,89 @@ TEST(boot_id) { } static void test_sequence_numbers_one(void) { + _cleanup_(test_donep) char *t = NULL; + _cleanup_(journal_file_offline_closep) JournalFile *one = NULL, *two = NULL; _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL; - char t[] = "/var/tmp/journal-seq-XXXXXX"; - JournalFile *one, *two; uint64_t seqnum = 0; sd_id128_t seqnum_id; - m = mmap_cache_new(); - assert_se(m != NULL); + ASSERT_NOT_NULL(m = mmap_cache_new()); - mkdtemp_chdir_chattr(t); + mkdtemp_chdir_chattr("/var/tmp/journal-seq-XXXXXX", &t); - assert_se(journal_file_open(-EBADF, "one.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, - UINT64_MAX, NULL, m, NULL, &one) == 0); + ASSERT_OK(journal_file_open(-EBADF, "one.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, + UINT64_MAX, NULL, m, NULL, &one)); append_number(one, 1, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 1); + ASSERT_EQ(seqnum, UINT64_C(1)); append_number(one, 2, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 2); + ASSERT_EQ(seqnum, UINT64_C(2)); - assert_se(one->header->state == STATE_ONLINE); - assert_se(!sd_id128_equal(one->header->file_id, one->header->machine_id)); - assert_se(!sd_id128_equal(one->header->file_id, one->header->tail_entry_boot_id)); - assert_se(sd_id128_equal(one->header->file_id, one->header->seqnum_id)); + ASSERT_EQ(one->header->state, STATE_ONLINE); + ASSERT_FALSE(sd_id128_equal(one->header->file_id, one->header->machine_id)); + ASSERT_FALSE(sd_id128_equal(one->header->file_id, one->header->tail_entry_boot_id)); + ASSERT_TRUE(sd_id128_equal(one->header->file_id, one->header->seqnum_id)); memcpy(&seqnum_id, &one->header->seqnum_id, sizeof(sd_id128_t)); - assert_se(journal_file_open(-EBADF, "two.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, - UINT64_MAX, NULL, m, one, &two) == 0); + ASSERT_OK(journal_file_open(-EBADF, "two.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, + UINT64_MAX, NULL, m, one, &two)); - assert_se(two->header->state == STATE_ONLINE); - assert_se(!sd_id128_equal(two->header->file_id, one->header->file_id)); - assert_se(sd_id128_equal(two->header->machine_id, one->header->machine_id)); - assert_se(sd_id128_is_null(two->header->tail_entry_boot_id)); /* Not written yet. */ - assert_se(sd_id128_equal(two->header->seqnum_id, one->header->seqnum_id)); + ASSERT_EQ(two->header->state, STATE_ONLINE); + ASSERT_FALSE(sd_id128_equal(two->header->file_id, one->header->file_id)); + ASSERT_TRUE(sd_id128_equal(two->header->machine_id, one->header->machine_id)); + ASSERT_TRUE(sd_id128_is_null(two->header->tail_entry_boot_id)); /* Not written yet. */ + ASSERT_TRUE(sd_id128_equal(two->header->seqnum_id, one->header->seqnum_id)); append_number(two, 3, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 3); + ASSERT_EQ(seqnum, UINT64_C(3)); append_number(two, 4, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 4); + ASSERT_EQ(seqnum, UINT64_C(4)); /* Verify tail_entry_boot_id. */ - assert_se(sd_id128_equal(two->header->tail_entry_boot_id, one->header->tail_entry_boot_id)); - - test_close(two); + ASSERT_TRUE(sd_id128_equal(two->header->tail_entry_boot_id, one->header->tail_entry_boot_id)); append_number(one, 5, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 5); + ASSERT_EQ(seqnum, UINT64_C(5)); append_number(one, 6, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 6); - - test_close(one); + ASSERT_EQ(seqnum, UINT64_C(6)); /* If the machine-id is not initialized, the header file verification * (which happens when reopening a journal file) will fail. */ if (sd_id128_get_machine(NULL) >= 0) { + two = journal_file_offline_close(two); + /* restart server */ seqnum = 0; - assert_se(journal_file_open(-EBADF, "two.journal", O_RDWR, JOURNAL_COMPRESS, 0, - UINT64_MAX, NULL, m, NULL, &two) == 0); + ASSERT_OK(journal_file_open(-EBADF, "two.journal", O_RDWR, JOURNAL_COMPRESS, 0, + UINT64_MAX, NULL, m, NULL, &two)); - assert_se(sd_id128_equal(two->header->seqnum_id, seqnum_id)); + ASSERT_TRUE(sd_id128_equal(two->header->seqnum_id, seqnum_id)); append_number(two, 7, NULL, &seqnum, NULL); printf("seqnum=%"PRIu64"\n", seqnum); - assert_se(seqnum == 5); + ASSERT_EQ(seqnum, UINT64_C(5)); - /* So..., here we have the same seqnum in two files with the - * same seqnum_id. */ - - test_close(two); + /* So..., here we have the same seqnum in two files with the same seqnum_id. */ } - - test_done(t); } TEST(sequence_numbers) { - assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1) >= 0); + ASSERT_OK_ERRNO(setenv("SYSTEMD_JOURNAL_COMPACT", "0", 1)); test_sequence_numbers_one(); - assert_se(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1) >= 0); + ASSERT_OK_ERRNO(setenv("SYSTEMD_JOURNAL_COMPACT", "1", 1)); test_sequence_numbers_one(); + + ASSERT_OK_ERRNO(unsetenv("SYSTEMD_JOURNAL_COMPACT")); } static int expected_result(uint64_t needle, const uint64_t *candidates, const uint64_t *offset, size_t n, direction_t direction, uint64_t *ret) { @@ -699,14 +665,14 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_seqnum(f, i, DIRECTION_DOWN, NULL, &p); e = expected_result(i, seqnum, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_seqnum(f, i, DIRECTION_UP, NULL, &p); e = expected_result(i, seqnum, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } /* by seqnum (random) */ @@ -716,8 +682,8 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_seqnum(f, i, DIRECTION_DOWN, NULL, &p); e = expected_result(i, seqnum, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } for (size_t trial = 0; trial < 3 * n; trial++) { uint64_t i = random_u64_range(n + 2); @@ -725,8 +691,8 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_seqnum(f, i, DIRECTION_UP, NULL, &p); e = expected_result(i, seqnum, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } /* by offset (sequential) */ @@ -734,38 +700,38 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i] - 1, DIRECTION_DOWN, NULL, &p); e = expected_result(offset[i] - 1, offset, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i], DIRECTION_DOWN, NULL, &p); e = expected_result(offset[i], offset, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i] + 1, DIRECTION_DOWN, NULL, &p); e = expected_result(offset[i] + 1, offset, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i] - 1, DIRECTION_UP, NULL, &p); e = expected_result(offset[i] - 1, offset, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i], DIRECTION_UP, NULL, &p); e = expected_result(offset[i], offset, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); p = 0; r = journal_file_move_to_entry_by_offset(f, offset[i] + 1, DIRECTION_UP, NULL, &p); e = expected_result(offset[i] + 1, offset, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } /* by offset (random) */ @@ -775,8 +741,8 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_offset(f, i, DIRECTION_DOWN, NULL, &p); e = expected_result(i, offset, offset, n, DIRECTION_DOWN, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } for (size_t trial = 0; trial < 3 * n; trial++) { uint64_t i = offset[0] - 1 + random_u64_range(offset[n-1] - offset[0] + 2); @@ -784,8 +750,8 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_move_to_entry_by_offset(f, i, DIRECTION_UP, NULL, &p); e = expected_result(i, offset, offset, n, DIRECTION_UP, &q); - assert_se(r == e); - assert_se(p == q); + ASSERT_EQ(r, e); + ASSERT_EQ(p, q); } /* by journal_file_next_entry() */ @@ -793,50 +759,50 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_next_entry(f, offset[i] - 2, DIRECTION_DOWN, NULL, &p); e = expected_result_next(offset[i] - 2, offset_candidates, offset, n, DIRECTION_DOWN, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i] - 1, DIRECTION_DOWN, NULL, &p); e = expected_result_next(offset[i] - 1, offset_candidates, offset, n, DIRECTION_DOWN, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i], DIRECTION_DOWN, NULL, &p); e = expected_result_next(offset[i], offset_candidates, offset, n, DIRECTION_DOWN, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i] + 1, DIRECTION_DOWN, NULL, &p); e = expected_result_next(offset[i] + 1, offset_candidates, offset, n, DIRECTION_DOWN, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i] - 1, DIRECTION_UP, NULL, &p); e = expected_result_next(offset[i] - 1, offset_candidates, offset, n, DIRECTION_UP, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i], DIRECTION_UP, NULL, &p); e = expected_result_next(offset[i], offset_candidates, offset, n, DIRECTION_UP, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i] + 1, DIRECTION_UP, NULL, &p); e = expected_result_next(offset[i] + 1, offset_candidates, offset, n, DIRECTION_UP, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); p = 0; r = journal_file_next_entry(f, offset[i] + 2, DIRECTION_UP, NULL, &p); e = expected_result_next(offset[i] + 2, offset_candidates, offset, n, DIRECTION_UP, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); } for (size_t trial = 0; trial < 3 * n; trial++) { uint64_t i = offset[0] - 1 + random_u64_range(offset[n-1] - offset[0] + 2); @@ -844,8 +810,8 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_next_entry(f, i, DIRECTION_DOWN, NULL, &p); e = expected_result_next(i, offset_candidates, offset, n, DIRECTION_DOWN, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); } for (size_t trial = 0; trial < 3 * n; trial++) { uint64_t i = offset[0] - 1 + random_u64_range(offset[n-1] - offset[0] + 2); @@ -853,62 +819,54 @@ static void verify(JournalFile *f, const uint64_t *seqnum, const uint64_t *offse p = 0; r = journal_file_next_entry(f, i, DIRECTION_UP, NULL, &p); e = expected_result_next(i, offset_candidates, offset, n, DIRECTION_UP, &q); - assert_se(e == 0 ? r <= 0 : r > 0); - assert_se(p == q); + ASSERT_EQ(e == 0, r <= 0); + ASSERT_EQ(p, q); } } static void test_generic_array_bisect_one(size_t n, size_t num_corrupted) { + _cleanup_(test_donep) char *t = NULL; _cleanup_(mmap_cache_unrefp) MMapCache *m = NULL; - char t[] = "/var/tmp/journal-seq-XXXXXX"; _cleanup_free_ uint64_t *seqnum = NULL, *offset = NULL, *offset_candidates = NULL; - JournalFile *f; + _cleanup_(journal_file_offline_closep) JournalFile *f = NULL; log_info("/* %s(%zu, %zu) */", __func__, n, num_corrupted); - assert_se(m = mmap_cache_new()); + ASSERT_NOT_NULL(m = mmap_cache_new()); - mkdtemp_chdir_chattr(t); + mkdtemp_chdir_chattr("/var/tmp/journal-seq-XXXXXX", &t); - assert_se(journal_file_open(-EBADF, "test.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, - UINT64_MAX, NULL, m, NULL, &f) == 0); + ASSERT_OK(journal_file_open(-EBADF, "test.journal", O_RDWR|O_CREAT, JOURNAL_COMPRESS, 0644, + UINT64_MAX, NULL, m, NULL, &f)); - assert_se(seqnum = new0(uint64_t, n)); - assert_se(offset = new0(uint64_t, n)); + ASSERT_NOT_NULL(seqnum = new0(uint64_t, n)); + ASSERT_NOT_NULL(offset = new0(uint64_t, n)); for (size_t i = 0; i < n; i++) { append_number(f, i, NULL, seqnum + i, offset + i); - if (i == 0) { - assert_se(seqnum[i] > 0); - assert_se(offset[i] > 0); - } else { - assert_se(seqnum[i] > seqnum[i-1]); - assert_se(offset[i] > offset[i-1]); - } + ASSERT_GT(seqnum[i], i == 0 ? 0 : seqnum[i-1]); + ASSERT_GT(offset[i], i == 0 ? 0 : offset[i-1]); } - assert_se(offset_candidates = newdup(uint64_t, offset, n)); + ASSERT_NOT_NULL(offset_candidates = newdup(uint64_t, offset, n)); verify(f, seqnum, offset_candidates, offset, n); /* Reset chain cache. */ - assert_se(journal_file_move_to_entry_by_offset(f, offset[0], DIRECTION_DOWN, NULL, NULL) > 0); + ASSERT_OK_POSITIVE(journal_file_move_to_entry_by_offset(f, offset[0], DIRECTION_DOWN, NULL, NULL)); /* make journal corrupted by clearing seqnum. */ for (size_t i = n - num_corrupted; i < n; i++) { Object *o; - assert_se(journal_file_move_to_object(f, OBJECT_ENTRY, offset[i], &o) >= 0); - assert_se(o); + ASSERT_OK(journal_file_move_to_object(f, OBJECT_ENTRY, offset[i], &o)); + ASSERT_NOT_NULL(o); o->entry.seqnum = 0; seqnum[i] = 0; offset_candidates[i] = 0; } verify(f, seqnum, offset_candidates, offset, n); - - test_close(f); - test_done(t); } TEST(generic_array_bisect) {