2014-03-11 06:42:49 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
test_description="database upgrade"
|
|
|
|
|
2015-08-06 11:13:36 +02:00
|
|
|
. ./test-lib.sh || exit 1
|
2014-03-11 06:42:49 +01:00
|
|
|
|
|
|
|
dbtarball=database-v1.tar.xz
|
|
|
|
|
|
|
|
# XXX: Accomplish the same with test lib helpers
|
|
|
|
if [ ! -e ${TEST_DIRECTORY}/test-databases/${dbtarball} ]; then
|
2014-03-01 21:12:44 +01:00
|
|
|
test_subtest_missing_external_prereq_["${dbtarball} - fetch with 'make download-test-databases'"]=t
|
2014-03-11 06:42:49 +01:00
|
|
|
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" ""
|
|
|
|
|
2014-04-02 02:34:52 +02:00
|
|
|
test_expect_success 'pre upgrade dump' 'notmuch dump | sort > pre-upgrade-dump'
|
|
|
|
|
2014-03-11 06:42:49 +01:00
|
|
|
test_begin_subtest "database upgrade from format version 1"
|
2014-04-01 16:06:05 +02:00
|
|
|
output=$(notmuch new | sed -e 's/^Backing up tags to .*$/Backing up tags to FILENAME/')
|
2014-03-11 06:42:49 +01:00
|
|
|
test_expect_equal "$output" "\
|
|
|
|
Welcome to a new version of notmuch! Your database will now be upgraded.
|
2014-04-01 16:06:05 +02:00
|
|
|
This process is safe to interrupt.
|
|
|
|
Backing up tags to FILENAME
|
2014-08-25 19:25:59 +02:00
|
|
|
Your notmuch database has now been upgraded.
|
2014-03-11 06:42:49 +01:00
|
|
|
No new mail."
|
|
|
|
|
2014-04-02 02:34:52 +02:00
|
|
|
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
|
|
|
|
|
2014-03-11 06:42:49 +01:00
|
|
|
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,"
|
|
|
|
|
2014-10-23 14:30:40 +02:00
|
|
|
# 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"
|
|
|
|
|
2014-03-11 06:42:49 +01:00
|
|
|
test_done
|