From 8ade833ec2714c6f4fb2fcba0bc28b9c421907d5 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Wed, 25 May 2022 07:51:12 -0300 Subject: [PATCH] test: error handling for n_m_tags_to_maildir_flags The closed database case should fail gracefully, but currently it segfaults. --- test/T566-lib-message.sh | 54 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/test/T566-lib-message.sh b/test/T566-lib-message.sh index 5894e67d..a98224c9 100755 --- a/test/T566-lib-message.sh +++ b/test/T566-lib-message.sh @@ -27,7 +27,7 @@ int main (int argc, char** argv) notmuch_status_t stat; char *msg = NULL; notmuch_message_t *message = NULL; - const char *id = "1258471718-6781-1-git-send-email-dottedmag@dottedmag.net"; + const char *id = "87pr7gqidx.fsf@yoom.home.cworth.org"; stat = notmuch_database_open_with_config (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, @@ -84,7 +84,7 @@ cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} EOF cat < EXPECTED == stdout == -1258471718-6781-1-git-send-email-dottedmag@dottedmag.net +87pr7gqidx.fsf@yoom.home.cworth.org 1 == stderr == EOF @@ -156,7 +156,7 @@ cat c_head0 - c_tail <<'EOF' | test_C ${MAIL_DIR} EOF cat < EXPECTED == stdout == -MAIL_DIR/01:2, +MAIL_DIR/cur/40:2, SUCCESS == stderr == EOF @@ -374,6 +374,54 @@ cat < EXPECTED EOF test_expect_equal_file EXPECTED OUTPUT +test_begin_subtest "Handle converting tags to maildir flags with closed db" +test_subtest_known_broken +cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} + { + notmuch_status_t status; + status = notmuch_message_tags_to_maildir_flags (message); + printf("%d\n%d\n", message != NULL, status != NOTMUCH_STATUS_SUCCESS); + } +EOF +cat < EXPECTED +== stdout == +1 +1 +== stderr == +EOF +test_expect_equal_file EXPECTED OUTPUT + +POSTLIST_PATH=(${MAIL_DIR}/.notmuch/xapian/postlist.*) +test_begin_subtest "Handle converting tags to maildir flags with corrupted db" +backup_database +cat c_head0 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${POSTLIST_PATH} + { + notmuch_status_t status; + + status = notmuch_message_add_tag (message, "draft"); + if (status) exit(1); + + int fd = open(argv[2],O_WRONLY|O_TRUNC); + if (fd < 0) { + fprintf (stderr, "error opening %s\n", argv[1]); + exit (1); + } + + status = notmuch_message_tags_to_maildir_flags (message); + printf("%d\n%d\n", message != NULL, status != NOTMUCH_STATUS_SUCCESS); + } +EOF +cat < EXPECTED +== stdout == +1 +1 +== stderr == +EOF +restore_database +notmuch new +notmuch tag -draft id:87pr7gqidx.fsf@yoom.home.cworth.org +test_expect_equal_file EXPECTED OUTPUT + test_begin_subtest "Handle removing all tags with closed db" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} {