notmuch/test/notmuch-test
Carl Worth a2d919eb2f Add a very rough beginning of a test suite.
This notmuch-test script simply runs a few different notmuch operations,
(things that I found were useful while testing the rename-support code).

It's not useful as a test suite yet, since it doesn't actually check
the results of any operation, (the user of the suite has to know what
the results should be and must manually verify them. So there's no
integration with the build system yet, (no "make test" target).

But I didn't want to lose what I had so far, so here it is.
2010-01-24 07:36:39 +13:00

220 lines
4.5 KiB
Bash
Executable file

#!/bin/sh
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
}
# Generate a new message in the mail directory, with
# a unique message ID and subject.
#
# The filename of the message generated is available as
# $gen_msg_filename
gen_msg_cnt=0
gen_msg_filename=""
generate_message ()
{
gen_msg_cnt=$((gen_msg_cnt + 1))
gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt)
if [ "$#" = "0" ]; then
gen_msg_filename="${MAIL_DIR}/$gen_msg_name"
else
gen_msg_filename="${MAIL_DIR}/$1/$gen_msg_name"
mkdir -p $(dirname $gen_msg_filename)
fi
cat <<EOF >$gen_msg_filename
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Message-Id: <msg-${gen_msg_cnt}@notmuch-test-suite>
Subject: Test message ${gen_msg_filename}
Date: Tue, 05 Jan 2010 15:43:57 -0800
This is just a test message at ${gen_msg_filename}
EOF
}
do_sleep ()
{
sleep 1
}
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
EOF
echo "### Testing \"notmuch new\" with no messages"
$NOTMUCH new
echo "### Testing \"notmuch new\" with 1 new message"
do_sleep
generate_message
$NOTMUCH new
echo "### Testing \"notmuch new\" with 2 new messages"
do_sleep
generate_message
generate_message
$NOTMUCH new
echo "### Testing \"notmuch new\" with no new messages (and a non-empty database)"
$NOTMUCH new
echo "### Testing \"notmuch new\" with two new directories (one mail)"
rm -rf ${MAIL_DIR}/* ${MAIL_DIR}/.notmuch
mkdir ${MAIL_DIR}/def
mkdir ${MAIL_DIR}/ghi
generate_message def
$NOTMUCH new
echo "### Testing \"notmuch new\" with two new directories (one mail)---opposite inode order"
rm -rf ${MAIL_DIR}/.notmuch
mv ${MAIL_DIR}/ghi ${MAIL_DIR}/abc
rm ${MAIL_DIR}/def/*
generate_message abc
$NOTMUCH new
echo "### Testing \"notmuch new\" with 1 old message moved into the mail store"
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
do_sleep
$NOTMUCH new > /dev/null
do_sleep
mv $tmp_msg_filename $gen_msg_filename
$NOTMUCH new
echo "### Testing \"notmuch new\" with 1 renamed message"
do_sleep
generate_message
$NOTMUCH new > /dev/null
do_sleep
mv $gen_msg_filename ${gen_msg_filename}-renamed
$NOTMUCH new
echo "### Testing \"notmuch new\" with 1 deleted message"
do_sleep
rm ${gen_msg_filename}-renamed
$NOTMUCH new
echo "### Testing \"notmuch new\" with a new directory with 3 messages"
do_sleep
generate_message dir
generate_message dir
generate_message dir
$NOTMUCH new
echo "### Testing \"notmuch new\" with a renamed directory of 3 messages"
do_sleep
mv ${MAIL_DIR}/dir ${MAIL_DIR}/dir-renamed
$NOTMUCH new
echo "### Testing \"notmuch new\" with a deleted directory of 3 messages"
do_sleep
rm -rf ${MAIL_DIR}/dir-renamed
$NOTMUCH new
echo "### Testing \"notmuch new\" with a new directory with 3 messages (tail of list)"
do_sleep
generate_message zzz
generate_message zzz
generate_message zzz
$NOTMUCH new
echo "### Testing \"notmuch new\" with a deleted directory of 3 messages (tail of list)"
do_sleep
rm -rf ${MAIL_DIR}/zzz
$NOTMUCH new
echo "### Testing \"notmuch new\" with a symlink to an external directory of 1 message"
rm -rf ${MAIL_DIR}/.notmuch
mv ${MAIL_DIR} ${TEST_DIR}/actual_maildir
mkdir ${MAIL_DIR}
ln -s ${TEST_DIR}/actual_maildir ${MAIL_DIR}/symlink
$NOTMUCH new
echo "### Testing \"notmuch new\" with a symlink to an external file"
do_sleep
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
$NOTMUCH new
echo "### Testing \"notmuch new\" with a two-level directory with 3 files"
do_sleep
generate_message two/levels
generate_message two/levels
generate_message two/levels
$NOTMUCH new
echo "### Testing \"notmuch new\" with deletion of two-level directory (3 files)"
do_sleep
rm -rf ${MAIL_DIR}/two
$NOTMUCH new
cat <<EOF
Notmuch test suite complete.
Intermediate state can be examined in:
${TEST_DIR}
EOF