mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
33f55e43e1
When reply to a message addresses to an address configured in the other_email setting in the configuration file, the reply should use that address in the From header. Test this.
340 lines
8.7 KiB
Bash
Executable file
340 lines
8.7 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
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.
|
|
#
|
|
# 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>"'
|
|
# [in-reply-to]=<message-id>
|
|
#
|
|
# Additional values for email headers. If these are not provided
|
|
# then the relevant headers will simply not appear in the
|
|
# 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
|
|
|
|
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"
|
|
|
|
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 at ${gen_msg_filename}"
|
|
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_filename}"
|
|
fi
|
|
|
|
if [ -z "${template[date]}" ]; then
|
|
template[date]="Tue, 05 Jan 2010 15:43:57 -0800"
|
|
fi
|
|
|
|
additional_headers=""
|
|
if [ ! -z "${template[cc]}" ]; then
|
|
additional_headers="Cc: ${template[cc]}
|
|
${additional_headers}"
|
|
fi
|
|
|
|
if [ ! -z "${template[in-reply-to]}" ]; then
|
|
additional_headers="In-Reply-To: ${template[in-reply-to]}
|
|
${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})
|
|
}
|
|
|
|
NOTMUCH_IGNORED_OUTPUT_REGEXP='^Processed [0-9]*( total)? file|Found [0-9]* total file'
|
|
|
|
execute_expecting ()
|
|
{
|
|
args=$1
|
|
expected=$2
|
|
|
|
output=$($NOTMUCH $args | grep -v -E -e "$NOTMUCH_IGNORED_OUTPUT_REGEXP")
|
|
if [ "$output" = "$expected" ]; then
|
|
echo " PASS"
|
|
else
|
|
echo " FAIL"
|
|
echo " Expected output: $expected"
|
|
echo " Actual output: $output"
|
|
fi
|
|
}
|
|
|
|
TEST_DIR=$(pwd)/test.$$
|
|
MAIL_DIR=${TEST_DIR}/mail
|
|
export NOTMUCH_CONFIG=${TEST_DIR}/notmuch-config
|
|
NOTMUCH=$(find_notmuch_binary $(pwd))
|
|
|
|
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
|
|
EOF
|
|
|
|
printf "Testing \"notmuch new\" in several variations:\n"
|
|
printf " No new messages...\t\t"
|
|
execute_expecting new "No new mail."
|
|
|
|
printf " Single new message...\t\t"
|
|
generate_message
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " Multiple new messages...\t"
|
|
generate_message
|
|
generate_message
|
|
execute_expecting new "Added 2 new messages to the database."
|
|
|
|
printf " No new messages (non-empty DB)... "
|
|
execute_expecting new "No new mail."
|
|
|
|
printf " New directories...\t\t"
|
|
rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
|
|
mkdir ${MAIL_DIR}/def
|
|
mkdir ${MAIL_DIR}/ghi
|
|
generate_message [dir]=def
|
|
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " Alternate inode order...\t"
|
|
|
|
rm -rf ${MAIL_DIR}/.notmuch
|
|
mv ${MAIL_DIR}/ghi ${MAIL_DIR}/abc
|
|
rm ${MAIL_DIR}/def/*
|
|
generate_message [dir]=abc
|
|
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " Message moved in...\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}
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " Renamed message...\t\t"
|
|
|
|
generate_message
|
|
$NOTMUCH new > /dev/null
|
|
mv $gen_msg_filename ${gen_msg_filename}-renamed
|
|
increment_mtime ${MAIL_DIR}
|
|
execute_expecting new "No new mail. Detected 1 file rename."
|
|
|
|
printf " Deleted message...\t\t"
|
|
|
|
rm ${gen_msg_filename}-renamed
|
|
increment_mtime ${MAIL_DIR}
|
|
execute_expecting new "No new mail. Removed 1 message."
|
|
|
|
printf " Renamed directory...\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}
|
|
|
|
execute_expecting new "No new mail. Detected 3 file renames."
|
|
|
|
printf " Deleted directory...\t\t"
|
|
|
|
rm -rf ${MAIL_DIR}/dir-renamed
|
|
increment_mtime ${MAIL_DIR}
|
|
|
|
execute_expecting new "No new mail. Removed 3 messages."
|
|
|
|
printf " New directory (at end of list)... "
|
|
|
|
generate_message [dir]=zzz
|
|
generate_message [dir]=zzz
|
|
generate_message [dir]=zzz
|
|
|
|
execute_expecting new "Added 3 new messages to the database."
|
|
|
|
printf " Deleted directory (end of list)... "
|
|
|
|
rm -rf ${MAIL_DIR}/zzz
|
|
increment_mtime ${MAIL_DIR}
|
|
|
|
execute_expecting new "No new mail. Removed 3 messages."
|
|
|
|
printf " New symlink to directory...\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
|
|
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " New symlink to a file...\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}
|
|
execute_expecting new "Added 1 new message to the database."
|
|
|
|
printf " New two-level directory...\t"
|
|
|
|
generate_message [dir]=two/levels
|
|
generate_message [dir]=two/levels
|
|
generate_message [dir]=two/levels
|
|
|
|
execute_expecting new "Added 3 new messages to the database."
|
|
|
|
printf " Deleted two-level directory... "
|
|
|
|
rm -rf ${MAIL_DIR}/two
|
|
increment_mtime ${MAIL_DIR}
|
|
|
|
execute_expecting new "No new mail. Removed 3 messages."
|
|
|
|
printf "\nTesting \"notmuch reply\" in several variations:\n"
|
|
|
|
printf " Basic reply...\t\t\t"
|
|
generate_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]=notmuch-reply-test
|
|
|
|
$NOTMUCH new > /dev/null
|
|
execute_expecting "reply id:${gen_msg_id}" "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:
|
|
> notmuch-reply-test"
|
|
|
|
printf " Reply from alternate address...\t"
|
|
generate_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]=notmuch-reply-test
|
|
|
|
$NOTMUCH new > /dev/null
|
|
execute_expecting "reply id:${gen_msg_id}" "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:
|
|
> notmuch-reply-test"
|
|
|
|
cat <<EOF
|
|
Notmuch test suite complete.
|
|
|
|
Intermediate state can be examined in:
|
|
${TEST_DIR}
|
|
EOF
|