notmuch/test/T670-duplicate-mid.sh
Daniel Kahn Gillmor 4cb789aa09 cli/show: emit new whole-message crypto status output
This allows MUAs that don't want to think about per-mime-part
cryptographic status to have a simple high-level overview of the
message's cryptographic state.

Sensibly structured encrypted and/or signed messages will work fine
with this.  The only requirement for the simplest encryption + signing
is that the message have all of its encryption and signing protection
(the "cryptographic envelope") in a contiguous set of MIME layers at
the very outside of the message itself.

This is because messages with some subparts signed or encrypted, but
with other subparts with no cryptographic protection is very difficult
to reason about, and even harder for the user to make sense of or work
with.

For further characterization of the Cryptographic Envelope and some of
the usability tradeoffs, see here:

   https://dkg.fifthhorseman.net/blog/e-mail-cryptography.html#cryptographic-envelope
2019-05-26 08:20:23 -03:00

117 lines
3.6 KiB
Bash
Executable file

#!/usr/bin/env bash
test_description="duplicate message ids"
. $(dirname "$0")/test-lib.sh || exit 1
add_message '[id]="duplicate"' '[subject]="message 1" [filename]=copy1'
add_message '[id]="duplicate"' '[subject]="message 2" [filename]=copy2'
add_message '[id]="duplicate"' '[subject]="message 0" [filename]=copy0'
test_begin_subtest 'search: first indexed subject preserved'
cat <<EOF > EXPECTED
thread:XXX 2001-01-05 [1/1(3)] Notmuch Test Suite; message 1 (inbox unread)
EOF
notmuch search id:duplicate | notmuch_search_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest 'First subject preserved in notmuch-show (json)'
test_subtest_known_broken
output=$(notmuch show --body=false --format=json id:duplicate | notmuch_json_show_sanitize)
expected='[[[{
"id": "XXXXX",
"match": true,
"excluded": false,
"filename": [
"'"${MAIL_DIR}"/copy0'",
"'"${MAIL_DIR}"/copy1'",
"'"${MAIL_DIR}"/copy2'"
],
"timestamp": 42,
"date_relative": "2001-01-05",
"tags": ["inbox","unread"],
"headers": {
"Subject": "message 1",
"From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"To": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"Date": "GENERATED_DATE"
}
},
[]]]]'
test_expect_equal_json "$output" "$expected"
test_begin_subtest 'Search for second subject'
cat <<EOF >EXPECTED
MAIL_DIR/copy0
MAIL_DIR/copy1
MAIL_DIR/copy2
EOF
notmuch search --output=files subject:'"message 2"' | notmuch_dir_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest 'Regexp search for second subject'
# Note that missing field processor support really means the test
# doesn't make sense, but it happens to pass.
if [ $NOTMUCH_HAVE_XAPIAN_FIELD_PROCESSOR -eq 1 ]; then
test_subtest_known_broken
fi
cat <<EOF >EXPECTED
MAIL_DIR/copy0
MAIL_DIR/copy1
MAIL_DIR/copy2
EOF
notmuch search --output=files 'subject:"/message 2/"' | notmuch_dir_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
add_message '[id]="duplicate"' '[body]="sekrit" [filename]=copy3'
test_begin_subtest 'search for body in duplicate file'
cat <<EOF >EXPECTED
MAIL_DIR/copy0
MAIL_DIR/copy1
MAIL_DIR/copy2
MAIL_DIR/copy3
EOF
notmuch search --output=files "sekrit" | notmuch_dir_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
rm ${MAIL_DIR}/copy3
test_begin_subtest 'reindex drops terms in duplicate file'
cp /dev/null EXPECTED
notmuch reindex '*'
notmuch search --output=files "sekrit" | notmuch_dir_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest 'reindex choses subject from first filename'
cat <<EOF > EXPECTED
thread:XXX 2001-01-05 [1/1(3)] Notmuch Test Suite; message 0 (inbox unread)
EOF
notmuch search id:duplicate | notmuch_search_sanitize > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
rm ${MAIL_DIR}/copy0
test_begin_subtest 'Deleted first duplicate file does not stop notmuch show from working'
output=$(notmuch show --body=false --format=json id:duplicate |
notmuch_json_show_sanitize | sed 's/message [0-9]/A_SUBJECT/')
expected='[[[{
"id": "XXXXX",
"crypto": {},
"match": true,
"excluded": false,
"filename": [
"'"${MAIL_DIR}"/copy0'",
"'"${MAIL_DIR}"/copy1'",
"'"${MAIL_DIR}"/copy2'"
],
"timestamp": 42,
"date_relative": "2001-01-05",
"tags": ["inbox","unread"],
"headers": {
"Subject": "A_SUBJECT",
"From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"To": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"Date": "GENERATED_DATE"
}
},
[]]]]'
test_expect_equal_json "$output" "$expected"
test_done