X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2FT530-upgrade.sh;h=c599dacfc81d82b1777034c2d11c72c5897d19c0;hp=2139618c00c5151c91b14adae0fda7237d533ffc;hb=HEAD;hpb=50345d126314463def025a1ad76397551f8cf177 diff --git a/test/T530-upgrade.sh b/test/T530-upgrade.sh index 2139618c..5f0de2ed 100755 --- a/test/T530-upgrade.sh +++ b/test/T530-upgrade.sh @@ -1,111 +1,76 @@ #!/usr/bin/env bash -test_description="database upgrade" +test_description='database upgrades' +. $(dirname "$0")/test-lib.sh || exit 1 -. ./test-lib.sh +test_require_external_prereq xapian-metadata -dbtarball=database-v1.tar.xz +XAPIAN_PATH=$MAIL_DIR/.notmuch/xapian +BACKUP_PATH=$MAIL_DIR/.notmuch/backups -# XXX: Accomplish the same with test lib helpers -if [ ! -e ${TEST_DIRECTORY}/test-databases/${dbtarball} ]; then - test_subtest_missing_external_prereq_["${dbtarball}"]=t -fi +delete_feature () { + local key=$1 + features=$(xapian-metadata get $XAPIAN_PATH features | grep -v "^$key") + xapian-metadata set $XAPIAN_PATH features "$features" +} -test_expect_success \ - 'database checksum' \ - '( cd $TEST_DIRECTORY/test-databases && - sha256sum --quiet --check --status ${dbtarball}.sha256 )' +add_email_corpus -tar xf $TEST_DIRECTORY/test-databases/${dbtarball} -C ${MAIL_DIR} --strip-components=1 +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." -test_begin_subtest "folder: search does not work with old database version" -output=$(notmuch search folder:foo) -test_expect_equal "$output" "" + restore_database -test_begin_subtest "path: search does not work with old database version" -output=$(notmuch search path:foo) -test_expect_equal "$output" "" + 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 -test_begin_subtest "database upgrade from format version 1" -output=$(notmuch new) -test_expect_equal "$output" "\ -Welcome to a new version of notmuch! Your database will now be upgraded. -Your notmuch database has now been upgraded to database format version 2. -No new mail." +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_begin_subtest "folder: no longer matches in the middle of path" -output=$(notmuch search folder:baz) -test_expect_equal "$output" "" +test_begin_subtest "upgrade with configured backup dir" +notmuch config set database.backup_dir ${HOME}/backups +delete_feature 'modification tracking' +notmuch new | grep Backing | notmuch_dir_sanitize | sed 's/dump-[0-9T]*/dump-XXX/' > OUTPUT +cat < EXPECTED +Backing up tags to CWD/home/backups/dump-XXX.gz... +EOF +test_expect_equal_file EXPECTED 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 "upgrade with relative configured backup dir" +notmuch config set database.backup_dir ${HOME}/backups +delete_feature 'modification tracking' +notmuch new | grep Backing | notmuch_dir_sanitize | sed 's/dump-[0-9T]*/dump-XXX/' > OUTPUT +cat < EXPECTED +Backing up tags to CWD/home/backups/dump-XXX.gz... +EOF +test_expect_equal_file EXPECTED OUTPUT -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," test_done