notmuch/test/notmuch-test
Dirk Hohndel a35a9a77af Add tests for author name reordering in search results
This should be required for all patches :-)

Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
2010-04-26 11:45:17 -07:00

1012 lines
40 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# Messages contain time/date values with time zone and notmuch
# displays them converted to the local time zone. We need to set fixed
# timezone here so that the output of the tests is always the same
# without regard to the time zone of where the test suite is run.
export TZ=UTC+8
find_notmuch_binary ()
{
dir=$1
while [ -n "$dir" ]; do
bin=$dir/notmuch
if [ -x $bin ]; then
echo $bin
return
fi
dir=$(dirname $dir)
if [ "$dir" = "/" ]; then
break
fi
done
echo notmuch
}
increment_mtime_amount=0
increment_mtime ()
{
dir=$1
increment_mtime_amount=$((increment_mtime_amount + 1))
touch -d "+${increment_mtime_amount} seconds" $dir
}
# Generate a new message in the mail directory, with a unique message
# ID and subject. The message is not added to the index.
#
# After this function returns, the filename of the generated message
# is available as $gen_msg_filename and the message ID is available as
# $gen_msg_id .
#
# This function supports named parameters with the bash syntax for
# assigning a value to an associative array ([name]=value). The
# supported parameters are:
#
# [dir]=directory/of/choice
#
# Generate the message in directory 'directory/of/choice' within
# the mail store. The directory will be created if necessary.
#
# [body]=text
#
# Text to use as the body of the email message
#
# '[from]="Some User <user@example.com>"'
# '[to]="Some User <user@example.com>"'
# '[subject]="Subject of email message"'
# '[date]="RFC 822 Date"'
#
# Values for email headers. If not provided, default values will
# be generated instead.
#
# '[cc]="Some User <user@example.com>"'
# [reply-to]=some-address
# [in-reply-to]=<message-id>
# '[header]=full header line, including keyword'
#
# Additional values for email headers. If these are not provided
# then the relevant headers will simply not appear in the
# message.
#
# '[id]=<message-id>'
#
# Controls the message-id of the created message.
gen_msg_cnt=0
gen_msg_filename=""
gen_msg_id=""
generate_message ()
{
# This is our (bash-specific) magic for doing named parameters
local -A template="($@)"
local additional_headers
if [ -z "${template[id]}" ]; then
gen_msg_cnt=$((gen_msg_cnt + 1))
gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt)
gen_msg_id="${gen_msg_name}@notmuch-test-suite"
else
gen_msg_name="msg-${template[id]}"
gen_msg_id="${template[id]}"
fi
if [ -z "${template[dir]}" ]; then
gen_msg_filename="${MAIL_DIR}/$gen_msg_name"
else
gen_msg_filename="${MAIL_DIR}/${template[dir]}/$gen_msg_name"
mkdir -p $(dirname $gen_msg_filename)
fi
if [ -z "${template[body]}" ]; then
template[body]="This is just a test message (#${gen_msg_cnt})"
fi
if [ -z "${template[from]}" ]; then
template[from]="Notmuch Test Suite <test_suite@notmuchmail.org>"
fi
if [ -z "${template[to]}" ]; then
template[to]="Notmuch Test Suite <test_suite@notmuchmail.org>"
fi
if [ -z "${template[subject]}" ]; then
template[subject]="Test message #${gen_msg_cnt}"
fi
if [ -z "${template[date]}" ]; then
template[date]="Tue, 05 Jan 2001 15:43:57 -0800"
fi
additional_headers=""
if [ ! -z "${template[header]}" ]; then
additional_headers="${template[header]}
${additional_headers}"
fi
if [ ! -z "${template[reply-to]}" ]; then
additional_headers="Reply-To: ${template[reply-to]}
${additional_headers}"
fi
if [ ! -z "${template[in-reply-to]}" ]; then
additional_headers="In-Reply-To: ${template[in-reply-to]}
${additional_headers}"
fi
if [ ! -z "${template[cc]}" ]; then
additional_headers="Cc: ${template[cc]}
${additional_headers}"
fi
cat <<EOF >$gen_msg_filename
From: ${template[from]}
To: ${template[to]}
Message-Id: <${gen_msg_id}>
Subject: ${template[subject]}
Date: ${template[date]}
${additional_headers}
${template[body]}
EOF
# Ensure that the mtime of the containing directory is updated
increment_mtime $(dirname ${gen_msg_filename})
}
# Generate a new message and add it to the index.
#
# All of the arguments and return values supported by generate_message
# are also supported here, so see that function for details.
add_message ()
{
generate_message "$@"
$NOTMUCH new > /dev/null
}
tests=0
test_failures=0
pass_if_equal ()
{
output=$1
expected=$2
tests=$((tests + 1))
if [ "$output" = "$expected" ]; then
echo " PASS"
else
echo " FAIL"
testname=test-$(printf "%03d" $tests)
echo "$expected" > $testname.expected
echo "$output" > $testname.output
diff -u $testname.expected $testname.output || true
test_failures=$((test_failures + 1))
fi
}
TEST_DIR=$(pwd)/test.$$
MAIL_DIR=${TEST_DIR}/mail
export NOTMUCH_CONFIG=${TEST_DIR}/notmuch-config
NOTMUCH=$(find_notmuch_binary $(pwd))
NOTMUCH_NEW ()
{
$NOTMUCH new | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'
}
notmuch_search_sanitize ()
{
sed -r -e 's/("?thread"?: ?)("?)................("?)/\1\2XXX\3/'
}
NOTMUCH_SHOW_FILENAME_SQUELCH='s,filename:.*/mail,filename:/XXX/mail,'
notmuch_show_sanitize ()
{
sed -e "$NOTMUCH_SHOW_FILENAME_SQUELCH"
}
rm -rf ${TEST_DIR}
mkdir ${TEST_DIR}
cd ${TEST_DIR}
mkdir ${MAIL_DIR}
cat <<EOF > ${NOTMUCH_CONFIG}
[database]
path=${MAIL_DIR}
[user]
name=Notmuch Test Suite
primary_email=test_suite@notmuchmail.org
other_email=test_suite_other@notmuchmail.org;test_suite@otherdomain.org
EOF
printf "Testing \"notmuch new\" in several variations:\n"
printf " No new messages...\t\t\t\t"
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail."
printf " Single new message...\t\t\t\t"
generate_message
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Multiple new messages...\t\t\t"
generate_message
generate_message
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 2 new messages to the database."
printf " No new messages (non-empty DB)...\t\t"
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail."
printf " New directories...\t\t\t\t"
rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
mkdir ${MAIL_DIR}/def
mkdir ${MAIL_DIR}/ghi
generate_message [dir]=def
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Alternate inode order...\t\t\t"
rm -rf ${MAIL_DIR}/.notmuch
mv ${MAIL_DIR}/ghi ${MAIL_DIR}/abc
rm ${MAIL_DIR}/def/*
generate_message [dir]=abc
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Message moved in...\t\t\t\t"
rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
generate_message
tmp_msg_filename=tmp/$gen_msg_filename
mkdir -p $(dirname $tmp_msg_filename)
mv $gen_msg_filename $tmp_msg_filename
increment_mtime ${MAIL_DIR}
$NOTMUCH new > /dev/null
mv $tmp_msg_filename $gen_msg_filename
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Renamed message...\t\t\t\t"
generate_message
$NOTMUCH new > /dev/null
mv $gen_msg_filename ${gen_msg_filename}-renamed
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Detected 1 file rename."
printf " Deleted message...\t\t\t\t"
rm ${gen_msg_filename}-renamed
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Removed 1 message."
printf " Renamed directory...\t\t\t\t"
generate_message [dir]=dir
generate_message [dir]=dir
generate_message [dir]=dir
$NOTMUCH new > /dev/null
mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Detected 3 file renames."
printf " Deleted directory...\t\t\t\t"
rm -rf ${MAIL_DIR}/dir-renamed
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Removed 3 messages."
printf " New directory (at end of list)...\t\t"
generate_message [dir]=zzz
generate_message [dir]=zzz
generate_message [dir]=zzz
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 3 new messages to the database."
printf " Deleted directory (end of list)...\t\t"
rm -rf ${MAIL_DIR}/zzz
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Removed 3 messages."
printf " New symlink to directory...\t\t\t"
rm -rf ${MAIL_DIR}/.notmuch
mv ${MAIL_DIR} ${TEST_DIR}/actual_maildir
mkdir ${MAIL_DIR}
ln -s ${TEST_DIR}/actual_maildir ${MAIL_DIR}/symlink
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " New symlink to a file...\t\t\t"
generate_message
external_msg_filename=${TEST_DIR}/external/$(basename $gen_msg_filename)
mkdir -p $(dirname $external_msg_filename)
mv $gen_msg_filename $external_msg_filename
ln -s $external_msg_filename $gen_msg_filename
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " New two-level directory...\t\t\t"
generate_message [dir]=two/levels
generate_message [dir]=two/levels
generate_message [dir]=two/levels
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 3 new messages to the database."
printf " Deleted two-level directory...\t\t\t"
rm -rf ${MAIL_DIR}/two
increment_mtime ${MAIL_DIR}
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "No new mail. Removed 3 messages."
printf "\nTesting \"notmuch search\" in several variations:\n"
printf " Search body...\t\t\t\t\t"
add_message '[subject]="body search"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [body]=bodysearchtest
output=$($NOTMUCH search bodysearchtest | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)"
printf " Search by from:...\t\t\t\t"
add_message '[subject]="search by from"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom
output=$($NOTMUCH search from:searchbyfrom | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)"
printf " Search by to:...\t\t\t\t"
add_message '[subject]="search by to"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto
output=$($NOTMUCH search to:searchbyto | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)"
printf " Search by subject:...\t\t\t\t"
add_message [subject]=subjectsearchtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$($NOTMUCH search subject:subjectsearchtest | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)"
printf " Search by id:...\t\t\t\t"
add_message '[subject]="search by id"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$($NOTMUCH search id:${gen_msg_id} | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)"
printf " Search by tag:...\t\t\t\t"
add_message '[subject]="search by tag"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
$NOTMUCH tag +searchbytag id:${gen_msg_id}
output=$($NOTMUCH search tag:searchbytag | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)"
printf " Search by thread:...\t\t\t\t"
add_message '[subject]="search by thread"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
thread_id=$($NOTMUCH search id:${gen_msg_id} | sed -e 's/thread:\([a-f0-9]*\).*/\1/')
output=$($NOTMUCH search thread:${thread_id} | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)"
printf " Search body (phrase)...\t\t\t"
add_message '[subject]="body search (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="body search (phrase)"'
add_message '[subject]="negative result"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="This phrase should not match the body search"'
output=$($NOTMUCH search '\"body search (phrase)\"' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)"
printf " Search by from: (address)...\t\t\t"
add_message '[subject]="search by from (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [from]=searchbyfrom@example.com
output=$($NOTMUCH search from:searchbyfrom@example.com | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)"
printf " Search by from: (name)...\t\t\t"
add_message '[subject]="search by from (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[from]="Search By From Name <test@example.com>"'
output=$($NOTMUCH search from:'Search By From Name' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)"
printf " Search by to: (address)...\t\t\t"
add_message '[subject]="search by to (address)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' [to]=searchbyto@example.com
output=$($NOTMUCH search to:searchbyto@example.com | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)"
printf " Search by to: (name)...\t\t\t"
add_message '[subject]="search by to (name)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[to]="Search By To Name <test@example.com>"'
output=$($NOTMUCH search to:'Search By To Name' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)"
printf " Search by subject: (phrase)...\t\t\t"
add_message '[subject]="subject search test (phrase)"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
add_message '[subject]="this phrase should not match the subject search test"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$($NOTMUCH search 'subject:\"subject search test (phrase)\"' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)"
printf " Search for all messages (\"*\"):...\t\t"
output=$($NOTMUCH search '*' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Test message #6 (inbox unread)
thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Test message #14 (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)
thread:XXX 2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; subjectsearchtest (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by id (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by tag (inbox searchbytag unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by thread (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; body search (phrase) (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; negative result (inbox unread)
thread:XXX 2000-01-01 [1/1] searchbyfrom@example.com; search by from (address) (inbox unread)
thread:XXX 2000-01-01 [1/1] Search By From Name; search by from (name) (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (address) (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; search by to (name) (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; subject search test (phrase) (inbox unread)
thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; this phrase should not match the subject search test (inbox unread)"
printf " Search body (utf-8):...\t\t\t"
add_message '[subject]="utf8-message-body-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="message body utf8: bödý"'
output=$($NOTMUCH search 'bödý' | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; utf8-message-body-subject (inbox unread)"
printf "\nTesting --format=json output:\n"
printf " Show message: json...\t\t\t\t"
add_message '[subject]="json-show-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="json-show-message"'
output=$($NOTMUCH show --format=json 'json-show-message')
pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "filename": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-subject", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc": "", "Bcc": "", "Date": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "json-show-message\n"}]}, []]]]'
printf " Search message: json...\t\t\t"
add_message '[subject]="json-search-subject"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="json-search-message"'
output=$($NOTMUCH search --format=json 'json-search-message' | notmuch_search_sanitize)
pass_if_equal "$output" '[{"thread": "XXX",
"timestamp": 946728000,
"matched": 1,
"total": 1,
"authors": "Notmuch Test Suite",
"subject": "json-search-subject",
"tags": ["inbox", "unread"]}]'
printf " Search by subject (utf-8):...\t\t\t"
add_message [subject]=utf8-sübjéct '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$($NOTMUCH search subject:utf8-sübjéct | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; utf8-sübjéct (inbox unread)"
printf " Show message: json, utf-8...\t\t\t"
add_message '[subject]="json-show-utf8-body-sübjéct"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="jsön-show-méssage"'
output=$($NOTMUCH show --format=json 'jsön-show-méssage')
pass_if_equal "$output" '[[[{"id": "'${gen_msg_id}'", "match": true, "filename": "'${gen_msg_filename}'", "timestamp": 946728000, "date_relative": "2000-01-01", "tags": ["inbox","unread"], "headers": {"Subject": "json-show-utf8-body-sübjéct", "From": "Notmuch Test Suite <test_suite@notmuchmail.org>", "To": "Notmuch Test Suite <test_suite@notmuchmail.org>", "Cc": "", "Bcc": "", "Date": "Sat, 01 Jan 2000 12:00:00 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "jsön-show-méssage\n"}]}, []]]]'
printf " Search message: json, utf-8...\t\t\t"
add_message '[subject]="json-search-utf8-body-sübjéct"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' '[body]="jsön-search-méssage"'
output=$($NOTMUCH search --format=json 'jsön-search-méssage' | notmuch_search_sanitize)
pass_if_equal "$output" '[{"thread": "XXX",
"timestamp": 946728000,
"matched": 1,
"total": 1,
"authors": "Notmuch Test Suite",
"subject": "json-search-utf8-body-sübjéct",
"tags": ["inbox", "unread"]}]'
printf "\nTesting naming of threads with changing subject:\n"
add_message '[subject]="thread-naming: Initial thread subject"' \
'[date]="Fri, 05 Jan 2001 15:43:56 -0800"'
first=${gen_msg_cnt}
parent=${gen_msg_id}
add_message '[subject]="thread-naming: Older changed subject"' \
'[date]="Sat, 06 Jan 2001 15:43:56 -0800"' \
"[in-reply-to]=\<$parent\>"
add_message '[subject]="thread-naming: Newer changed subject"' \
'[date]="Sun, 07 Jan 2001 15:43:56 -0800"' \
"[in-reply-to]=\<$parent\>"
add_message '[subject]="thread-naming: Final thread subject"' \
'[date]="Mon, 08 Jan 2001 15:43:56 -0800"' \
"[in-reply-to]=\<$parent\>"
final=${gen_msg_id}
printf " Initial thread name (oldest-first search)...\t"
output=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-05 [4/4] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"
printf " Initial thread name (newest-first search)...\t"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-08 [4/4] Notmuch Test Suite; thread-naming: Final thread subject (inbox unread)"
# Remove oldest and newest messages from search results
$NOTMUCH tag -inbox id:$parent or id:$final
printf " Changed thread name (oldest-first search)...\t"
output=$($NOTMUCH search --sort=oldest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-06 [2/4] Notmuch Test Suite; thread-naming: Older changed subject (inbox unread)"
printf " Changed thread name (newest-first search)...\t"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-07 [2/4] Notmuch Test Suite; thread-naming: Newer changed subject (inbox unread)"
printf " Ignore added reply prefix (Re:)...\t\t"
add_message '[subject]="Re: thread-naming: Initial thread subject"' \
'[date]="Tue, 09 Jan 2001 15:43:45 -0800"' \
"[in-reply-to]=\<$parent\>"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-09 [3/5] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"
printf " Ignore added reply prefix (Aw:)...\t\t"
add_message '[subject]="Aw: thread-naming: Initial thread subject"' \
'[date]="Wed, 10 Jan 2001 15:43:45 -0800"' \
"[in-reply-to]=\<$parent\>"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-10 [4/6] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"
printf " Ignore added reply prefix (Vs:)...\t\t"
add_message '[subject]="Vs: thread-naming: Initial thread subject"' \
'[date]="Thu, 11 Jan 2001 15:43:45 -0800"' \
"[in-reply-to]=\<$parent\>"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-11 [5/7] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"
printf " Ignore added reply prefix (Sv:)...\t\t"
add_message '[subject]="Sv: thread-naming: Initial thread subject"' \
'[date]="Fri, 12 Jan 2001 15:43:45 -0800"' \
"[in-reply-to]=\<$parent\>"
output=$($NOTMUCH search --sort=newest-first thread-naming and tag:inbox | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2001-01-12 [6/8] Notmuch Test Suite; thread-naming: Initial thread subject (inbox unread)"
printf " Test order of messages in \"notmuch show\"\t"
output=$($NOTMUCH show thread-naming | notmuch_show_sanitize)
pass_if_equal "$output" " message{ id:msg-$(printf "%03d" $first)@notmuch-test-suite depth:0 match:1 filename:/XXX/mail/msg-$(printf "%03d" $first)
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (unread)
Subject: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Fri, 05 Jan 2001 15:43:56 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$first)
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 1)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 1)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-06) (inbox unread)
Subject: thread-naming: Older changed subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Sat, 06 Jan 2001 15:43:56 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 1)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 2)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 2)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-07) (inbox unread)
Subject: thread-naming: Newer changed subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Sun, 07 Jan 2001 15:43:56 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 2)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 3)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 3)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-08) (unread)
Subject: thread-naming: Final thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Mon, 08 Jan 2001 15:43:56 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 3)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 4)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 4)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-09) (inbox unread)
Subject: Re: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Tue, 09 Jan 2001 15:43:45 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 4)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 5)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 5)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-10) (inbox unread)
Subject: Aw: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Wed, 10 Jan 2001 15:43:45 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 5)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 6)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 6)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-11) (inbox unread)
Subject: Vs: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Thu, 11 Jan 2001 15:43:45 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 6)))
part}
body}
message}
message{ id:msg-$(printf "%03d" $((first + 7)))@notmuch-test-suite depth:1 match:1 filename:/XXX/mail/msg-$(printf "%03d" $((first + 7)))
header{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-12) (inbox unread)
Subject: Sv: thread-naming: Initial thread subject
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Date: Fri, 12 Jan 2001 15:43:45 -0800
header}
body{
part{ ID: 1, Content-type: text/plain
This is just a test message (#$((first + 7)))
part}
body}
message}"
printf "\nTesting \"notmuch reply\" in several variations:\n"
printf " Basic reply...\t\t\t\t\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite@notmuchmail.org \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="basic reply test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> basic reply test"
printf " Multiple recipients...\t\t\t\t"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="test_suite@notmuchmail.org, Someone Else <someone@example.com>"' \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="Multiple recipients"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Someone Else <someone@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> Multiple recipients"
printf " Reply with CC...\t\t\t\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite@notmuchmail.org \
'[cc]="Other Parties <cc@example.com>"' \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="reply with CC"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
Cc: Other Parties <cc@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> reply with CC"
printf " Reply from alternate address...\t\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite_other@notmuchmail.org \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="reply from alternate address"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> reply from alternate address"
printf " Support for Reply-To...\t\t\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite@notmuchmail.org \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="support for reply-to"' \
'[reply-to]="Sender <elsewhere@example.com>"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <elsewhere@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> support for reply-to"
printf " Un-munging Reply-To...\t\t\t\t"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Some List <list@example.com>"' \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="Un-munging Reply-To"' \
'[reply-to]="Evil Munging List <list@example.com>"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Some List <list@example.com>
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> Un-munging Reply-To"
printf "\nTesting handling of uuencoded data:\n"
add_message [subject]=uuencodetest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"' \
'[body]="This message is used to ensure that notmuch correctly handles a
message containing a block of uuencoded data. First, we have a marker
this content beforeuudata . Then we beging the uunencoded data itself:
begin 644 bogus-uuencoded-data
M0123456789012345678901234567890123456789012345678901234567890
MOBVIOUSLY, THIS IS NOT ANY SORT OF USEFUL UUNECODED DATA.
MINSTEAD THIS IS JUST A WAY TO ENSURE THAT THIS BLOCK OF DATA
MIS CORRECTLY IGNORED WHEN NOTMUCH CREATES ITS INDEX. SO WE
MINCLUDE A DURINGUUDATA MARKER THAT SHOULD NOT RESULT IN ANY
MSEARCH RESULT.
\`
end
Finally, we have our afteruudata marker as well."'
printf " Ensure content before uu data is indexed...\t"
output=$($NOTMUCH search beforeuudata | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
printf " Ensure uu data is not indexed...\t\t"
output=$($NOTMUCH search DURINGUUDATA | notmuch_search_sanitize)
pass_if_equal "$output" ""
printf " Ensure content after uu data is indexed...\t"
output=$($NOTMUCH search afteruudata | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
printf "\nTesting \"notmuch dump\" and \"notmuch restore\":\n"
printf " Dumping all tags...\t\t\t\t"
$NOTMUCH dump dump.expected
pass_if_equal "$?" "0"
printf " Clearing all tags...\t\t\t\t"
sed -e 's/(\([^(]*\))$/()/' < dump.expected > clear.expected
$NOTMUCH restore clear.expected
$NOTMUCH dump clear.actual
pass_if_equal "$(< clear.actual)" "$(< clear.expected)"
printf " Restoring original tags...\t\t\t"
$NOTMUCH restore dump.expected
$NOTMUCH dump dump.actual
pass_if_equal "$(< dump.actual)" "$(< dump.expected)"
printf " Restore with nothing to do...\t\t\t"
$NOTMUCH restore dump.expected
pass_if_equal "$?" "0"
printf "\nTesting threading when messages received out of order:\n"
printf " Adding initial child message...\t\t"
generate_message [body]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Searching returns the message...\t\t"
output=$($NOTMUCH search foo | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; brokenthreadtest (inbox unread)"
printf " Adding second child message...\t\t\t"
generate_message [body]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Searching returns both messages in one thread..."
output=$($NOTMUCH search foo | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [2/2] Notmuch Test Suite; brokenthreadtest (inbox unread)"
printf " Adding parent message...\t\t\t"
generate_message [body]=foo [id]=parent-id [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Searching returns all three messages in one thread..."
output=$($NOTMUCH search foo | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [3/3] Notmuch Test Suite; brokenthreadtest (inbox unread)"
printf "\nTesting author reordering;\n"
printf " Adding parent message...\t\t\t"
generate_message [body]=findme [id]=new-parent-id [subject]=author-reorder-threadtest '[from]="User <user@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Adding initial child message...\t\t"
generate_message [body]=findme '[in-reply-to]=\<new-parent-id\>' [subject]=author-reorder-threadtest '[from]="User1 <user1@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Adding second child message...\t\t\t"
generate_message [body]=findme '[in-reply-to]=\<new-parent-id\>' [subject]=author-reorder-threadtest '[from]="User2 <user2@example.com>"' '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
output=$(NOTMUCH_NEW)
pass_if_equal "$output" "Added 1 new message to the database."
printf " Searching when all three messages match...\t"
output=$($NOTMUCH search findme | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [3/3] User, User1, User2; author-reorder-threadtest (inbox unread)"
printf " Searching when two messages match...\t\t"
output=$($NOTMUCH search User1 or User2 | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [2/3] User1, User2| User; author-reorder-threadtest (inbox unread)"
printf " Searching when only one message matches...\t"
output=$($NOTMUCH search User2 | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/3] User2| User, User1; author-reorder-threadtest (inbox unread)"
printf " Searching when only first message matches...\t"
output=$($NOTMUCH search User | notmuch_search_sanitize)
pass_if_equal "$output" "thread:XXX 2000-01-01 [1/3] User| User1, User2; author-reorder-threadtest (inbox unread)"
printf "\nTesting From line heuristics;\n"
printf " Magic from guessing (nothing to go on)...\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=mailinglist@notmuchmail.org \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="from guessing test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, mailinglist@notmuchmail.org
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> from guessing test"
printf " Magic from guessing (Envelope-to:)...\t\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=mailinglist@notmuchmail.org \
[subject]=notmuch-reply-test \
'[header]="Envelope-To: test_suite_other@notmuchmail.org"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="from guessing test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, mailinglist@notmuchmail.org
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> from guessing test"
printf " Magic from guessing (X-Original-To:)...\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=mailinglist@notmuchmail.org \
[subject]=notmuch-reply-test \
'[header]="X-Original-To: test_suite_other@notmuchmail.org"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="from guessing test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, mailinglist@notmuchmail.org
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> from guessing test"
printf " Magic from guessing (Received: .. for ..)...\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=mailinglist@notmuchmail.org \
[subject]=notmuch-reply-test \
'[header]="Received: from mail.example.com (mail.example.com [1.1.1.1])\
by mail.notmuchmail.org (some MTA) with ESMTP id 12345678\
for <test_suite_other@notmuchmail.org>; Sat, 10 Apr 2010 07:54:51 -0400 (EDT)"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="from guessing test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, mailinglist@notmuchmail.org
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> from guessing test"
printf " Magic from guessing (Received: domain)...\t"
add_message '[from]="Sender <sender@example.com>"' \
[to]=mailinglist@notmuchmail.org \
[subject]=notmuch-reply-test \
'[header]="Received: from mail.example.com (mail.example.com [1.1.1.1])\
by mail.otherdomain.org (some MTA) with ESMTP id 12345678\
Sat, 10 Apr 2010 07:54:51 -0400 (EDT)"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0800"' \
'[body]="from guessing test"'
output=$($NOTMUCH reply id:${gen_msg_id})
pass_if_equal "$output" "From: Notmuch Test Suite <test_suite@otherdomain.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, mailinglist@notmuchmail.org
Bcc: test_suite@notmuchmail.org
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0800, Sender <sender@example.com> wrote:
> from guessing test"
echo ""
echo "Notmuch test suite complete."
if [ "$test_failures" = "0" ]; then
echo "All $tests tests passed."
rm -rf ${TEST_DIR}
else
echo "$test_failures/$tests tests failed. The failures can be investigated in:"
echo "${TEST_DIR}"
fi
echo ""
exit $test_failures