test: add (back) upgrade tests

In ee897cab8b the upgrade tests from pre v3 databases were
removed. The reasons for that are still valid, but we should still
test the code paths that do the upgrade, and it is relatively
straightforward to do that for v3 to v3 upgrades.
This commit is contained in:
David Bremner 2021-01-17 08:35:38 -04:00
parent 15d8067c0a
commit 6a7b61b1d5
3 changed files with 59 additions and 0 deletions

View file

@ -25,6 +25,7 @@ that you know if you break anything.
- gdb(1)
- gpg(1)
- python(1)
- xapian-metadata(1)
If your system lacks these tools or have older, non-upgradable versions
of these, please (possibly compile and) install these to some other

57
test/T530-upgrade.sh Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env bash
test_description='database upgrades'
. $(dirname "$0")/test-lib.sh || exit 1
test_require_external_prereq xapian-metadata
XAPIAN_PATH=$MAIL_DIR/.notmuch/xapian
BACKUP_PATH=$MAIL_DIR/.notmuch
delete_feature () {
local key=$1
features=$(xapian-metadata get $XAPIAN_PATH features | grep -v "^$key")
xapian-metadata set $XAPIAN_PATH features "$features"
}
add_email_corpus
for key in 'multiple paths per message' \
'relative directory paths' \
'exact folder:/path: search' \
'mail documents for missing messages' \
'modification tracking'; do
backup_database
test_begin_subtest "upgrade is triggered by missing '$key'"
delete_feature "$key"
output=$(notmuch new | grep Welcome)
test_expect_equal \
"$output" \
"Welcome to a new version of notmuch! Your database will now be upgraded."
restore_database
backup_database
test_begin_subtest "backup can be restored ['$key']"
notmuch dump > BEFORE
delete_feature "$key"
notmuch new
notmuch tag -inbox '*'
dump_file=$(echo ${BACKUP_PATH}/dump*)
notmuch restore --input=$dump_file
notmuch dump > AFTER
test_expect_equal_file BEFORE AFTER
restore_database
done
for key in 'from/subject/message-ID in database' \
'indexed MIME types' \
'index body and headers separately'; do
backup_database
test_begin_subtest "upgrade not triggered by missing '$key'"
delete_feature "$key"
output=$(notmuch new | grep Welcome)
test_expect_equal "$output" ""
restore_database
done
test_done

View file

@ -1270,3 +1270,4 @@ test_declare_external_prereq gpg
test_declare_external_prereq openssl
test_declare_external_prereq gpgsm
test_declare_external_prereq ${NOTMUCH_PYTHON}
test_declare_external_prereq xapian-metadata