From a2d919eb2f55ab503a95f5401c19cc162a7a46a0 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 24 Jan 2010 07:36:39 +1300 Subject: [PATCH 1/1] 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. --- test/notmuch-test | 220 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100755 test/notmuch-test diff --git a/test/notmuch-test b/test/notmuch-test new file mode 100755 index 00000000..d7b85c03 --- /dev/null +++ b/test/notmuch-test @@ -0,0 +1,220 @@ +#!/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 <$gen_msg_filename +From: Notmuch Test Suite +To: Notmuch Test Suite +Message-Id: +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 < ${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 <