X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2FT070-insert.sh;h=48165caae5a718c56c846d25834ca9c45b979d46;hp=187dfd377b1560e95d3c4eb165bfd95fc8210ac5;hb=996ef5710cd5b9a5de6394018f21955a775f7511;hpb=cd8551d53a69c43aed5276abc1e492d3d6553979 diff --git a/test/T070-insert.sh b/test/T070-insert.sh index 187dfd37..48165caa 100755 --- a/test/T070-insert.sh +++ b/test/T070-insert.sh @@ -1,9 +1,13 @@ #!/usr/bin/env bash test_description='"notmuch insert"' -. ./test-lib.sh || exit 1 +. $(dirname "$0")/test-lib.sh || exit 1 test_require_external_prereq gdb +# subtests about file permissions assume that we're working with umask +# 022 by default. +umask 022 + # Create directories and database before inserting. mkdir -p "$MAIL_DIR"/{cur,new,tmp} mkdir -p "$MAIL_DIR"/Drafts/{cur,new,tmp} @@ -37,10 +41,14 @@ notmuch insert < "$gen_msg_filename" cur_msg_filename=$(notmuch search --output=files "subject:insert-subject") test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename" +test_begin_subtest "Permissions on inserted message should be 0600" +test_expect_equal "600" "$(stat -c %a "$cur_msg_filename")" + test_begin_subtest "Insert message adds default tags" output=$(notmuch show --format=json "subject:insert-subject") expected='[[[{ "id": "'"${gen_msg_id}"'", + "crypto": {}, "match": true, "excluded": false, "filename": ["'"${cur_msg_filename}"'"], @@ -73,6 +81,27 @@ notmuch insert +custom < "$gen_msg_filename" output=$(notmuch search --output=messages tag:custom) test_expect_equal "$output" "id:$gen_msg_id" +test_begin_subtest "Insert tagged world-readable message" +gen_insert_msg +notmuch insert --world-readable +world-readable-test < "$gen_msg_filename" +cur_msg_filename=$(notmuch search --output=files "tag:world-readable-test") +test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename" + +test_begin_subtest "Permissions on inserted world-readable message should be 0644" +test_expect_equal "644" "$(stat -c %a "$cur_msg_filename")" + +test_begin_subtest "Insert tagged world-readable message with group-only umask" +oldumask=$(umask) +umask 027 +gen_insert_msg +notmuch insert --world-readable +world-readable-umask-test < "$gen_msg_filename" +cur_msg_filename=$(notmuch search --output=files "tag:world-readable-umask-test") +umask "$oldumask" +test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename" + +test_begin_subtest "Permissions on inserted world-readable message with funny umask should be 0640" +test_expect_equal "640" "$(stat -c %a "$cur_msg_filename")" + test_begin_subtest "Insert message, add/remove tags" gen_insert_msg notmuch insert +custom -unread < "$gen_msg_filename" @@ -132,8 +161,14 @@ output=$(notmuch search --output=files path:Drafts/new) dirname=$(dirname "$output") test_expect_equal "$dirname" "$MAIL_DIR/Drafts/new" +test_begin_subtest "Insert message into top level folder" +gen_insert_msg +notmuch insert --folder="" < "$gen_msg_filename" +output=$(notmuch search --output=files id:${gen_msg_id}) +dirname=$(dirname "$output") +test_expect_equal "$dirname" "$MAIL_DIR/new" + test_begin_subtest "Insert message into folder with trailing /" -test_subtest_known_broken gen_insert_msg notmuch insert --folder=Drafts/ < "$gen_msg_filename" output=$(notmuch search --output=files id:${gen_msg_id}) @@ -164,6 +199,23 @@ output=$(notmuch search --output=files path:F/G/H/I/J/new tag:folder) basename=$(basename "$output") test_expect_equal_file "$gen_msg_filename" "${MAIL_DIR}/F/G/H/I/J/new/${basename}" +test_begin_subtest "Created subfolder should have permissions 0700" +test_expect_equal "700" "$(stat -c %a "${MAIL_DIR}/F/G/H/I/J")" +test_begin_subtest "Created subfolder new/ should also have permissions 0700" +test_expect_equal "700" "$(stat -c %a "${MAIL_DIR}/F/G/H/I/J/new")" + +test_begin_subtest "Insert message, create world-readable subfolder" +gen_insert_msg +notmuch insert --folder=F/G/H/I/J/K --create-folder --world-readable +folder-world-readable < "$gen_msg_filename" +output=$(notmuch search --output=files path:F/G/H/I/J/K/new tag:folder-world-readable) +basename=$(basename "$output") +test_expect_equal_file "$gen_msg_filename" "${MAIL_DIR}/F/G/H/I/J/K/new/${basename}" + +test_begin_subtest "Created world-readable subfolder should have permissions 0755" +test_expect_equal "755" "$(stat -c %a "${MAIL_DIR}/F/G/H/I/J/K")" +test_begin_subtest "Created world-readable subfolder new/ should also have permissions 0755" +test_expect_equal "755" "$(stat -c %a "${MAIL_DIR}/F/G/H/I/J/K/new")" + test_begin_subtest "Insert message, create existing subfolder" gen_insert_msg notmuch insert --folder=F/G/H/I/J --create-folder +folder < "$gen_msg_filename" @@ -201,7 +253,7 @@ cat < index-file-$code.gdb set breakpoint pending on set logging file index-file-$code.log set logging on -break notmuch_database_add_message +break notmuch_database_index_file commands return NOTMUCH_STATUS_$code continue @@ -213,13 +265,13 @@ done gen_insert_msg for code in FILE_NOT_EMAIL READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do - test_begin_subtest "EXIT_FAILURE when add_message returns $code" + test_begin_subtest "EXIT_FAILURE when index_file returns $code" test_expect_code 1 \ "${TEST_GDB} --batch-silent --return-child-result \ -ex 'set args insert < $gen_msg_filename' \ -x index-file-$code.gdb notmuch" - test_begin_subtest "success exit with --keep when add_message returns $code" + test_begin_subtest "success exit with --keep when index_file returns $code" test_expect_code 0 \ "${TEST_GDB} --batch-silent --return-child-result \ -ex 'set args insert --keep < $gen_msg_filename' \ @@ -227,13 +279,13 @@ for code in FILE_NOT_EMAIL READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do done for code in OUT_OF_MEMORY XAPIAN_EXCEPTION ; do - test_begin_subtest "EX_TEMPFAIL when add_message returns $code" + test_begin_subtest "EX_TEMPFAIL when index_file returns $code" test_expect_code 75 \ "${TEST_GDB} --batch-silent --return-child-result \ -ex 'set args insert < $gen_msg_filename' \ -x index-file-$code.gdb notmuch" - test_begin_subtest "success exit with --keep when add_message returns $code" + test_begin_subtest "success exit with --keep when index_file returns $code" test_expect_code 0 \ "${TEST_GDB} --batch-silent --return-child-result \ -ex 'set args insert --keep < $gen_msg_filename' \