X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2Fmaildir-sync;h=3186e70f56e4c03a3eb45dc85d1fd955f8e59a89;hp=23d612e76ac15c5a068532b1668a83412b951511;hb=84719b08f757a6079f4c3331d0c476d19b265948;hpb=736ac42c45f62103e99ef18ef06b201d0bcd546f diff --git a/test/maildir-sync b/test/maildir-sync index 23d612e7..3186e70f 100755 --- a/test/maildir-sync +++ b/test/maildir-sync @@ -1,231 +1,189 @@ -#!/bin/bash +#!/usr/bin/env bash -test_description="Test maildir synchronization" +test_description="maildir synchronization" . ./test-lib.sh -filter_show() { - sed -e 's/, /,\n/g'|sed -e "s|${MAIL_DIR}/||" -e '/^"tags"/d' - echo -} +# Create the expected maildir structure +mkdir $MAIL_DIR/cur +mkdir $MAIL_DIR/new +mkdir $MAIL_DIR/tmp -cat >> "$NOTMUCH_CONFIG" < expected < actual && -test_cmp expected actual -#emacs --eval "(gdb \"gdb --annotate=3 --args $(which notmuch) new\")" -' -cat > expected < actual && -test_cmp expected actual -' -cat > expected < actual && -test_cmp expected actual -' -cat > expected < actual && -test_cmp expected actual -' -cat > expected < actual && -test_cmp expected actual -' -cat > expected < actual && -test_cmp expected actual -' -test_expect_success 'Tag the seen messages as replied' ' -notmuch tag +replied -inbox tag:inbox and not tag:unread -' - -cat > expected < actual && -test_cmp expected actual -' -cat < show-expected -[[[{"id": "msg-001@notmuch-test-suite", +test_begin_subtest "Adding 'replied' tag adds 'R' flag to filename" +add_message [subject]='"Adding replied tag"' [filename]='adding-replied-tag:2,S' [dir]=cur +notmuch tag +replied subject:"Adding replied tag" +output=$(cd ${MAIL_DIR}/cur; ls -1 adding-replied*) +test_expect_equal "$output" "adding-replied-tag:2,RS" + +test_begin_subtest "notmuch show works with renamed file (without notmuch new)" +output=$(notmuch show --format=json id:${gen_msg_id} | notmuch_json_show_sanitize) +test_expect_equal_json "$output" '[[[{"id": "XXXXX", "match": true, -"filename": "msg-001:2,RS", -"timestamp": 946728000, -"date_relative": "2000-01-01", -"headers": {"Subject": "test message", +"excluded": false, +"filename": "YYYYY", +"timestamp": 42, +"date_relative": "2001-01-05", +"tags": ["inbox","replied"], +"headers": {"Subject": "Adding replied tag", "From": "Notmuch Test Suite ", "To": "Notmuch Test Suite ", -"Cc": "", -"Bcc": "", -"Date": "Sat, -01 Jan 2000 12:00:00 -0000"}, +"Date": "GENERATED_DATE"}, "body": [{"id": 1, "content-type": "text/plain", -"content": "This is just a test message (#1)\n"}]}, -[]]]] -EOF - -test_expect_success 'Message renamed due to changed flags can be shown without running notmuch new' ' -notmuch show --format=json id:msg-001@notmuch-test-suite | filter_show > show-actual && -test_cmp show-expected show-actual -' - -test_expect_success 'Test that we can reply to the renamed message' ' -notmuch reply id:msg-001@notmuch-test-suite -' - -echo "No new mail." > expected -test_expect_success 'No rename should be detected by notmuch new' ' -increment_mtime "$(dirname "${gen_msg_filename}")" && -notmuch new > actual && -test_cmp expected actual -' -test_expect_success "Add a message to new/ without info" ' -generate_message [subject]="\"test message 3\"" [date]="\"Sat, 01 Jan 2000 12:00:00 -0000\"" [dir]=new && -NOTMUCH_NEW > actual && -test_cmp - actual < actual && -test_cmp - actual < expected && -notmuch show id:$gen_msg_id|grep -o "filename:.*$" > actual && -test_cmp expected actual && -test -f "$gen_msg_filename" -' -test_expect_success "Check that the message was not renamed" ' -ls "${MAIL_DIR}/new" > actual && -test_cmp - actual < actual && -test_cmp - actual < actual && -test_cmp - actual < actual && -test_cmp - actual <flag synchronization" +output=$(NOTMUCH_NEW) +test_expect_equal "$output" "No new mail." + +test_begin_subtest "When read, message moved from new to cur" +add_message [subject]='"Message to move to cur"' [date]='"Sat, 01 Jan 2000 12:00:00 -0000"' [filename]='message-to-move-to-cur' [dir]=new +notmuch tag -unread subject:"Message to move to cur" +output=$(cd "$MAIL_DIR/cur"; ls message-to-move*) +test_expect_equal "$output" "message-to-move-to-cur:2,S" + +test_begin_subtest "No rename should be detected by notmuch new" +output=$(NOTMUCH_NEW) +test_expect_equal "$output" "No new mail." # (*) If notmuch new was not run we've got "Processed 1 file in almost # no time" here. The reason is that removing unread tag in a previous # test created directory document in the database but this document # was not linked as subdirectory of $MAIL_DIR. Therefore notmuch new # could not reach the cur/ directory and its files in it during -# recurive traversal. -test_expect_success 'Remove info from file name' ' -mv "$MAIL_DIR/cur/msg-003:2,S" "$MAIL_DIR/cur/msg-003" && -increment_mtime "$MAIL_DIR/cur" && -NOTMUCH_NEW > actual -test_cmp - actual < actual && -test_cmp - actual < actual && -test_cmp - actual < actual && -test_cmp - actual < actual && -test_cmp - actual < expected && -mv $MAIL_DIR/msg-001:2,RS $MAIL_DIR/msg-001:2, && -mv $MAIL_DIR/msg-002:2,RS $MAIL_DIR/msg-002:2, && -increment_mtime $MAIL_DIR -' - -test_expect_success 'Test whether dump/new/restore synchronizes the maildir flags with the database' ' -notmuch dump dump.txt && -notmuch new && -notmuch restore dump.txt && -ls $MAIL_DIR > actual && -test_cmp expected actual -' +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Removing S flag (inbox unread)" + +test_begin_subtest "Removing info from filename leaves tags unchanged" +add_message [subject]='"Message to lose maildir info"' [filename]='message-to-lose-maildir-info' [dir]=cur +notmuch tag -unread subject:"Message to lose maildir info" +mv "$MAIL_DIR/cur/message-to-lose-maildir-info:2,S" "$MAIL_DIR/cur/message-without-maildir-info" +output=$(NOTMUCH_NEW) +output+=" +" +output+=$(notmuch search subject:"Message to lose maildir info" | notmuch_search_sanitize) +test_expect_equal "$output" "No new mail. Detected 1 file rename. +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Message to lose maildir info (inbox)" + +add_message [subject]='"Non-maildir message"' [dir]=notmaildir [filename]='non-maildir-message' +expected=$(notmuch search --output=files subject:"Non-maildir message") +test_expect_success "Can remove unread tag from message in non-maildir directory" 'notmuch tag -unread subject:"Non-maildir message"' + +test_begin_subtest "Message in non-maildir directory does not get renamed" +output=$(notmuch search --output=files subject:"Non-maildir message") +test_expect_equal "$output" "$expected" + +test_begin_subtest "notmuch dump/restore re-synchronizes maildir tags with flags" +# Capture current filename state +expected=$(ls $MAIL_DIR/cur) +# Add/remove some flags from filenames +mv $MAIL_DIR/cur/adding-replied-tag:2,RS $MAIL_DIR/cur/adding-replied-tag:2,S +mv $MAIL_DIR/cur/adding-s-flag:2,S $MAIL_DIR/cur/adding-s-flag:2, +mv $MAIL_DIR/cur/adding-with-s-flag:2,S $MAIL_DIR/cur/adding-with-s-flag:2,RS +mv $MAIL_DIR/cur/message-to-move-to-cur:2,S $MAIL_DIR/cur/message-to-move-to-cur:2,DS +notmuch dump --output=dump.txt +NOTMUCH_NEW >/dev/null +notmuch restore --input=dump.txt +output=$(ls $MAIL_DIR/cur) +test_expect_equal "$output" "$expected" + +test_begin_subtest 'Adding flags to duplicate message tags the mail' +add_message [subject]='"Duplicated message"' [dir]=cur [filename]='duplicated-message:2,' +cp "$MAIL_DIR/cur/duplicated-message:2," "$MAIL_DIR/cur/duplicated-message-copy:2,RS" +NOTMUCH_NEW > output +notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output +test_expect_equal "$(< output)" "No new mail. +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Duplicated message (inbox replied)" + +test_begin_subtest "Adding duplicate message without flags does not remove tags" +cp "$MAIL_DIR/cur/duplicated-message-copy:2,RS" "$MAIL_DIR/cur/duplicated-message-another-copy:2," +NOTMUCH_NEW > output +notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output +test_expect_equal "$(< output)" "No new mail. +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Duplicated message (inbox replied)" + +test_begin_subtest "Tag changes modify flags of multiple files" +notmuch tag -replied subject:"Duplicated message" +(cd $MAIL_DIR/cur/; ls duplicated*) > actual +test_expect_equal "$(< actual)" "duplicated-message-another-copy:2,S +duplicated-message-copy:2,S +duplicated-message:2,S" + +test_begin_subtest "Synchronizing tag changes preserves unsupported maildir flags" +add_message [subject]='"Unsupported maildir flags"' [dir]=cur [filename]='unsupported-maildir-flags:2,FSZxyz' +notmuch tag +unread +draft -flagged subject:"Unsupported maildir flags" +test_expect_equal "$(cd $MAIL_DIR/cur/; ls unsupported*)" "unsupported-maildir-flags:2,DZxyz" + +test_begin_subtest "A file with non-compliant maildir info will not be renamed" +add_message [subject]='"Non-compliant maildir info"' [dir]=cur [filename]='non-compliant-maildir-info:2,These-are-not-flags-in-ASCII-order-donottouch' +notmuch tag +unread +draft -flagged subject:"Non-compliant maildir info" +test_expect_equal "$(cd $MAIL_DIR/cur/; ls non-compliant*)" "non-compliant-maildir-info:2,These-are-not-flags-in-ASCII-order-donottouch" + +test_begin_subtest "Files in new/ get default synchronized tags" +OLDCONFIG=$(notmuch config get new.tags) +notmuch config set new.tags test +add_message [subject]='"File in new/"' [dir]=new [filename]='file-in-new' +notmuch config set new.tags $OLDCONFIG +notmuch search 'subject:"File in new"' | notmuch_search_sanitize > output +test_expect_equal "$(< output)" \ +"thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; File in new/ (test unread)" test_done