mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
02a2eeb427
The files (test) scripts source (with builtin command `.`) provides information which the scripts depend, and without the `source` to succeed allowing script to continue may lead to dangerous situations (e.g. rm -rf "${undefined_variable}"/*). At the end of all source (.) lines construct ' || exit 1' was added; In our case the script script will exit if it cannot find (or read) the file to be sourced. Additionally script would also exits if the last command of the sourced file exited nonzero.
140 lines
4.5 KiB
Bash
Executable file
140 lines
4.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
test_description="database upgrade"
|
|
|
|
. ./test-lib.sh || exit 1
|
|
|
|
dbtarball=database-v1.tar.xz
|
|
|
|
# XXX: Accomplish the same with test lib helpers
|
|
if [ ! -e ${TEST_DIRECTORY}/test-databases/${dbtarball} ]; then
|
|
test_subtest_missing_external_prereq_["${dbtarball} - fetch with 'make download-test-databases'"]=t
|
|
fi
|
|
|
|
test_expect_success \
|
|
'database checksum' \
|
|
'( cd $TEST_DIRECTORY/test-databases &&
|
|
sha256sum --quiet --check --status ${dbtarball}.sha256 )'
|
|
|
|
tar xf $TEST_DIRECTORY/test-databases/${dbtarball} -C ${MAIL_DIR} --strip-components=1
|
|
|
|
test_begin_subtest "folder: search does not work with old database version"
|
|
output=$(notmuch search folder:foo)
|
|
test_expect_equal "$output" ""
|
|
|
|
test_begin_subtest "path: search does not work with old database version"
|
|
output=$(notmuch search path:foo)
|
|
test_expect_equal "$output" ""
|
|
|
|
test_expect_success 'pre upgrade dump' 'notmuch dump | sort > pre-upgrade-dump'
|
|
|
|
test_begin_subtest "database upgrade from format version 1"
|
|
output=$(notmuch new | sed -e 's/^Backing up tags to .*$/Backing up tags to FILENAME/')
|
|
test_expect_equal "$output" "\
|
|
Welcome to a new version of notmuch! Your database will now be upgraded.
|
|
This process is safe to interrupt.
|
|
Backing up tags to FILENAME
|
|
Your notmuch database has now been upgraded.
|
|
No new mail."
|
|
|
|
test_begin_subtest "tag backup matches pre-upgrade dump"
|
|
gunzip -c ${MAIL_DIR}/.notmuch/dump-*.gz | sort > backup-dump
|
|
test_expect_equal_file pre-upgrade-dump backup-dump
|
|
|
|
test_begin_subtest "folder: no longer matches in the middle of path"
|
|
output=$(notmuch search folder:baz)
|
|
test_expect_equal "$output" ""
|
|
|
|
test_begin_subtest "folder: search"
|
|
output=$(notmuch search --output=files folder:foo | notmuch_search_files_sanitize | sort)
|
|
test_expect_equal "$output" "MAIL_DIR/foo/06:2,
|
|
MAIL_DIR/foo/cur/07:2,
|
|
MAIL_DIR/foo/cur/08:2,
|
|
MAIL_DIR/foo/new/03:2,
|
|
MAIL_DIR/foo/new/09:2,
|
|
MAIL_DIR/foo/new/10:2,"
|
|
|
|
test_begin_subtest "top level folder: search"
|
|
output=$(notmuch search --output=files folder:'""' | notmuch_search_files_sanitize | sort)
|
|
# bar/18:2, is a duplicate of cur/51:2,
|
|
test_expect_equal "$output" "MAIL_DIR/01:2,
|
|
MAIL_DIR/02:2,
|
|
MAIL_DIR/bar/18:2,
|
|
MAIL_DIR/cur/29:2,
|
|
MAIL_DIR/cur/30:2,
|
|
MAIL_DIR/cur/31:2,
|
|
MAIL_DIR/cur/32:2,
|
|
MAIL_DIR/cur/33:2,
|
|
MAIL_DIR/cur/34:2,
|
|
MAIL_DIR/cur/35:2,
|
|
MAIL_DIR/cur/36:2,
|
|
MAIL_DIR/cur/37:2,
|
|
MAIL_DIR/cur/38:2,
|
|
MAIL_DIR/cur/39:2,
|
|
MAIL_DIR/cur/40:2,
|
|
MAIL_DIR/cur/41:2,
|
|
MAIL_DIR/cur/42:2,
|
|
MAIL_DIR/cur/43:2,
|
|
MAIL_DIR/cur/44:2,
|
|
MAIL_DIR/cur/45:2,
|
|
MAIL_DIR/cur/46:2,
|
|
MAIL_DIR/cur/47:2,
|
|
MAIL_DIR/cur/48:2,
|
|
MAIL_DIR/cur/49:2,
|
|
MAIL_DIR/cur/50:2,
|
|
MAIL_DIR/cur/51:2,
|
|
MAIL_DIR/cur/52:2,
|
|
MAIL_DIR/cur/53:2,
|
|
MAIL_DIR/new/04:2,"
|
|
|
|
test_begin_subtest "path: search"
|
|
output=$(notmuch search --output=files path:"bar" | notmuch_search_files_sanitize | sort)
|
|
# cur/51:2, is a duplicate of bar/18:2,
|
|
test_expect_equal "$output" "MAIL_DIR/bar/17:2,
|
|
MAIL_DIR/bar/18:2,
|
|
MAIL_DIR/cur/51:2,"
|
|
|
|
test_begin_subtest "top level path: search"
|
|
output=$(notmuch search --output=files path:'""' | notmuch_search_files_sanitize | sort)
|
|
test_expect_equal "$output" "MAIL_DIR/01:2,
|
|
MAIL_DIR/02:2,"
|
|
|
|
test_begin_subtest "recursive path: search"
|
|
output=$(notmuch search --output=files path:"bar/**" | notmuch_search_files_sanitize | sort)
|
|
# cur/51:2, is a duplicate of bar/18:2,
|
|
test_expect_equal "$output" "MAIL_DIR/bar/17:2,
|
|
MAIL_DIR/bar/18:2,
|
|
MAIL_DIR/bar/baz/05:2,
|
|
MAIL_DIR/bar/baz/23:2,
|
|
MAIL_DIR/bar/baz/24:2,
|
|
MAIL_DIR/bar/baz/cur/25:2,
|
|
MAIL_DIR/bar/baz/cur/26:2,
|
|
MAIL_DIR/bar/baz/new/27:2,
|
|
MAIL_DIR/bar/baz/new/28:2,
|
|
MAIL_DIR/bar/cur/19:2,
|
|
MAIL_DIR/bar/cur/20:2,
|
|
MAIL_DIR/bar/new/21:2,
|
|
MAIL_DIR/bar/new/22:2,
|
|
MAIL_DIR/cur/51:2,"
|
|
|
|
# Ghost messages are difficult to test since they're nearly invisible.
|
|
# However, if the upgrade works correctly, the ghost message should
|
|
# retain the right thread ID even if all of the original messages in
|
|
# the thread are deleted. That's what we test. This won't detect if
|
|
# the upgrade just plain didn't happen, but it should detect if
|
|
# something went wrong.
|
|
test_begin_subtest "ghost message retains thread ID"
|
|
# Upgrade database
|
|
notmuch new
|
|
# Get thread ID of real message
|
|
thread=$(notmuch search --output=threads id:4EFC743A.3060609@april.org)
|
|
# Delete all real messages in that thread
|
|
rm $(notmuch search --output=files $thread)
|
|
notmuch new
|
|
# "Deliver" ghost message
|
|
add_message '[subject]=Ghost' '[id]=4EFC3931.6030007@april.org'
|
|
# If the ghost upgrade worked, the new message should be attached to
|
|
# the existing thread ID.
|
|
nthread=$(notmuch search --output=threads id:4EFC3931.6030007@april.org)
|
|
test_expect_equal "$thread" "$nthread"
|
|
|
|
test_done
|