notmuch/test/T055-path-config.sh
David Bremner 4e209ca99a CLI/new: use configuration variable for backup directory
The stat is essentially replaced by the mkdir for error detection
purposes.  This changes the default location for backups to make
things tidier, even in non-split configurations. Hopefully there is
not too many user scripts relying on the previous location.

Because the default location may not exist, replace the use of stat
for error detection with a call to mkdir.
2021-03-20 07:53:02 -03:00

205 lines
6 KiB
Bash
Executable file

#!/usr/bin/env bash
test_description='Configuration of mail-root and database path'
. $(dirname "$0")/test-lib.sh || exit 1
test_require_external_prereq xapian-metdata
backup_config () {
local test_name=$(basename $0 .sh)
cp ${NOTMUCH_CONFIG} notmuch-config-backup.${test_name}
}
restore_config () {
local test_name=$(basename $0 .sh)
export NOTMUCH_CONFIG="${TMP_DIRECTORY}/notmuch-config"
unset CONFIG_PATH
unset DATABASE_PATH
unset NOTMUCH_PROFILE
unset XAPIAN_PATH
cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG}
}
split_config () {
local dir
backup_config
dir="$TMP_DIRECTORY/database.$test_count"
rm -rf $dir
mkdir $dir
notmuch config set database.path $dir
notmuch config set database.mail_root $MAIL_DIR
DATABASE_PATH=$dir
XAPIAN_PATH="$dir/xapian"
}
symlink_config () {
local dir
backup_config
dir="$TMP_DIRECTORY/link.$test_count"
ln -s $MAIL_DIR $dir
notmuch config set database.path $dir
notmuch config set database.mail_root $MAIL_DIR
XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian"
unset DATABASE_PATH
}
xdg_config () {
local dir
local profile=${1:-default}
if [[ $profile != default ]]; then
export NOTMUCH_PROFILE=$profile
fi
backup_config
DATABASE_PATH="${HOME}/.local/share/notmuch/${profile}"
rm -rf $DATABASE_PATH
mkdir -p $DATABASE_PATH
config_dir="${HOME}/.config/notmuch/${profile}"
mkdir -p ${config_dir}
CONFIG_PATH=$config_dir/config
mv ${NOTMUCH_CONFIG} $CONFIG_PATH
unset NOTMUCH_CONFIG
XAPIAN_PATH="${DATABASE_PATH}/xapian"
notmuch --config=${CONFIG_PATH} config set database.mail_root ${TMP_DIRECTORY}/mail
notmuch --config=${CONFIG_PATH} config set database.path
}
for config in traditional split XDG XDG+profile symlink; do
#start each set of tests with an known set of messages
add_email_corpus
case $config in
traditional)
backup_config
XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian"
;;
split)
split_config
mv mail/.notmuch/xapian $DATABASE_PATH
;;
XDG)
xdg_config
mv mail/.notmuch/xapian $DATABASE_PATH
;;
XDG+profile)
xdg_config ${RANDOM}
mv mail/.notmuch/xapian $DATABASE_PATH
;;
symlink)
symlink_config
;;
esac
test_begin_subtest "count ($config)"
output=$(notmuch count '*')
test_expect_equal "$output" '52'
test_begin_subtest "count+tag ($config)"
tag="tag${RANDOM}"
notmuch tag +$tag '*'
output=$(notmuch count tag:$tag)
notmuch tag -$tag '*'
test_expect_equal "$output" '52'
test_begin_subtest "address ($config)"
notmuch address --deduplicate=no --sort=newest-first --output=sender --output=recipients path:foo >OUTPUT
cat <<EOF >EXPECTED
Carl Worth <cworth@cworth.org>
notmuch@notmuchmail.org
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "dump ($config)"
notmuch dump is:attachment and is:signed | sort > OUTPUT
cat <<EOF > EXPECTED
#notmuch-dump batch-tag:3 config,properties,tags
+attachment +inbox +signed +unread -- id:20091118005829.GB25380@dottiness.seas.harvard.edu
+attachment +inbox +signed +unread -- id:20091118010116.GC25380@dottiness.seas.harvard.edu
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "dump + tag + restore ($config)"
notmuch dump '*' > EXPECTED
notmuch tag -inbox '*'
notmuch restore < EXPECTED
notmuch dump > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "reindex ($config)"
notmuch search --output=messages '*' > EXPECTED
notmuch reindex '*'
notmuch search --output=messages '*' > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "use existing database ($config)"
output=$(notmuch new)
test_expect_equal "$output" 'No new mail.'
test_begin_subtest "create database ($config)"
rm -rf $DATABASE_PATH/{.notmuch,}/xapian
notmuch new
output=$(notmuch count '*')
test_expect_equal "$output" '52'
test_begin_subtest "detect new files ($config)"
generate_message
generate_message
notmuch new
output=$(notmuch count '*')
test_expect_equal "$output" '54'
test_begin_subtest "Show a raw message ($config)"
add_message
notmuch show --format=raw id:$gen_msg_id > OUTPUT
test_expect_equal_file $gen_msg_filename OUTPUT
rm -f $gen_msg_filename
test_begin_subtest "reply ($config)"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite@notmuchmail.org \
[subject]=notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="basic reply test"'
notmuch reply id:${gen_msg_id} 2>&1 > OUTPUT
cat <<EOF > EXPECTED
From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
In-Reply-To: <${gen_msg_id}>
References: <${gen_msg_id}>
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
> basic reply test
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "insert+search ($config)"
generate_message \
"[subject]=\"insert-subject\"" \
"[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" \
"[body]=\"insert-message\""
mkdir -p "$MAIL_DIR"/{cur,new,tmp}
notmuch insert < "$gen_msg_filename"
cur_msg_filename=$(notmuch search --output=files "subject:insert-subject")
test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename"
test_begin_subtest "compact+search ($config)"
notmuch search --output=messages '*' | sort > EXPECTED
notmuch compact
notmuch search --output=messages '*' | sort > OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "upgrade backup ($config)"
features=$(xapian-metadata get $XAPIAN_PATH features | grep -v "^relative directory paths")
xapian-metadata set $XAPIAN_PATH features "$features"
output=$(notmuch new | grep Welcome)
test_expect_equal \
"$output" \
"Welcome to a new version of notmuch! Your database will now be upgraded."
restore_config
done
test_done