* [PATCH 1/8] test/path-config: define config_subtest
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-03 20:26 ` Tomi Ollila
2021-08-02 15:09 ` [PATCH 2/8] test/expect_equal_file: whitespace cleanup David Bremner
` (6 subsequent siblings)
7 siblings, 1 reply; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This will allow adding "hook code" to be run for a particular
configuration, in particular marking all tests in a given
configuration as broken.
---
test/T055-path-config.sh | 48 ++++++++++++++++++++++++----------------
1 file changed, 29 insertions(+), 19 deletions(-)
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index bb3bf665..2061b116 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -79,6 +79,13 @@ xdg_config () {
notmuch --config=${CONFIG_PATH} config set database.path
}
+config_subtest () {
+ local title=$1
+ local config=$2
+
+ test_begin_subtest "$title ($config)"
+}
+
for config in traditional split XDG XDG+profile symlink home_mail; do
#start each set of tests with an known set of messages
add_email_corpus
@@ -106,20 +113,23 @@ for config in traditional split XDG XDG+profile symlink home_mail; do
home_mail)
home_mail_config
;;
+ maildir_env)
+ maildir_env_config
+ ;;
esac
- test_begin_subtest "count ($config)"
+ config_subtest "count" "$config"
output=$(notmuch count '*')
test_expect_equal "$output" '52'
- test_begin_subtest "count+tag ($config)"
+ config_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)"
+ config_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>
@@ -127,7 +137,7 @@ notmuch@notmuchmail.org
EOF
test_expect_equal_file EXPECTED OUTPUT
- test_begin_subtest "dump ($config)"
+ config_subtest "dump" "$config"
notmuch dump is:attachment and is:signed | sort > OUTPUT
cat <<EOF > EXPECTED
#notmuch-dump batch-tag:3 config,properties,tags
@@ -136,43 +146,43 @@ EOF
EOF
test_expect_equal_file EXPECTED OUTPUT
- test_begin_subtest "dump + tag + restore ($config)"
+ config_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)"
+ config_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)"
+ config_subtest "use existing database" "$config"
output=$(notmuch new)
test_expect_equal "$output" 'No new mail.'
- test_begin_subtest "create database ($config)"
+ config_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)"
+ config_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)"
+ config_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)"
+ config_subtest "reply" "$config"
add_message '[from]="Sender <sender@example.com>"' \
[to]=test_suite@notmuchmail.org \
[subject]=notmuch-reply-test \
@@ -190,7 +200,7 @@ 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)"
+ config_subtest "insert+search" "$config"
generate_message \
"[subject]=\"insert-subject\"" \
"[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" \
@@ -201,13 +211,13 @@ EOF
test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename"
- test_begin_subtest "compact+search ($config)"
+ config_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)"
+ config_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)
@@ -215,7 +225,7 @@ EOF
"$output" \
"Welcome to a new version of notmuch! Your database will now be upgraded."
- test_begin_subtest "notmuch +config -database suggests notmuch new ($config)"
+ config_subtest "notmuch +config -database suggests notmuch new" "$config"
mv "$XAPIAN_PATH" "${XAPIAN_PATH}.bak"
notmuch > OUTPUT
cat <<EOF > EXPECTED
@@ -231,7 +241,7 @@ EOF
test_expect_equal_file EXPECTED OUTPUT
- test_begin_subtest "Set config value ($config)"
+ config_subtest "Set config value" "$config"
name=${RANDOM}
value=${RANDOM}
notmuch config set test${test_count}.${name} ${value}
@@ -240,7 +250,7 @@ EOF
output2=$(notmuch config get test${test_count}.${name})
test_expect_equal "${output}+${output2}" "${value}+"
- test_begin_subtest "Set config value in database ($config)"
+ config_subtest "Set config value in database" "$config"
name=${RANDOM}
value=${RANDOM}
notmuch config set --database test${test_count}.${name} ${value}
@@ -249,7 +259,7 @@ EOF
output2=$(notmuch config get test${test_count}.${name})
test_expect_equal "${output}+${output2}" "${value}+"
- test_begin_subtest "Config list ($config)"
+ config_subtest "Config list" "$config"
notmuch config list | notmuch_dir_sanitize | sed -e "s/^database.backup_dir=.*$/database.backup_dir/" \
-e "s/^database.hook_dir=.*$/database.hook_dir/" \
-e "s/^database.path=.*$/database.path/" \
@@ -276,7 +286,7 @@ EOF
case $config in
XDG*)
- test_begin_subtest "Set shadowed config value in database ($config)"
+ config_subtest "Set shadowed config value in database" "$config"
name=${RANDOM}
value=${RANDOM}
key=test${test_count}.${name}
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/8] test/path-config: define config_subtest
2021-08-02 15:09 ` [PATCH 1/8] test/path-config: define config_subtest David Bremner
@ 2021-08-03 20:26 ` Tomi Ollila
0 siblings, 0 replies; 11+ messages in thread
From: Tomi Ollila @ 2021-08-03 20:26 UTC (permalink / raw)
To: David Bremner, notmuch
On Mon, Aug 02 2021, David Bremner wrote:
> This will allow adding "hook code" to be run for a particular
> configuration, in particular marking all tests in a given
> configuration as broken.
uh, see below
> ---
> test/T055-path-config.sh | 48 ++++++++++++++++++++++++----------------
> 1 file changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
> index bb3bf665..2061b116 100755
> --- a/test/T055-path-config.sh
> +++ b/test/T055-path-config.sh
> @@ -79,6 +79,13 @@ xdg_config () {
> notmuch --config=${CONFIG_PATH} config set database.path
> }
>
> +config_subtest () {
> + local title=$1
> + local config=$2
> +
> + test_begin_subtest "$title ($config)"
> +}
here w/o commit message one cannot see the point ;/
Then I looked, in one commit there were this added
if [[ "$config" == "maildir_env" ]]; then
test_subtest_known_broken
fi
after test_begin_subtest "$title ($config)", and one
config_subtest call was restored to call to test_begin_subtest
finally the above code was removed (but that one test_begin_subtest
was not re-restored to use config_subtest)
i am not too happy about this acrobacy...
btw; that one change there (later in series):
- config_subtest "notmuch +config -database suggests notmuch new" "$config"
+ test_begin_subtest "notmuch +config -database suggests notmuch new" "$config"
... and another...
- config_subtest "Set config value" "$config"
+ test_begin_subtest "Set config value" "$config"
are these correct, the latter was changed originally (in this patch):
- test_begin_subtest "Set config value ($config)"
+ config_subtest "Set config value" "$config"
---
After thinking a while I see the point, I am not sure if this is better,
but I'd do this the following way:
begin_config_subtest () {
test_begin_subtest "$@"
}
then it is easy to flip between begin_config_subtest and test_begin_subtest
whenever needed -- and in final commit to fix all broken patches remove
all extra code from begin_config_subtest and ensure that no calls to
test_begin_subtest are made in that particular file
Tomi
> +
> for config in traditional split XDG XDG+profile symlink home_mail; do
> #start each set of tests with an known set of messages
> add_email_corpus
> @@ -106,20 +113,23 @@ for config in traditional split XDG XDG+profile symlink home_mail; do
> home_mail)
> home_mail_config
> ;;
> + maildir_env)
> + maildir_env_config
> + ;;
> esac
>
> - test_begin_subtest "count ($config)"
> + config_subtest "count" "$config"
> output=$(notmuch count '*')
> test_expect_equal "$output" '52'
>
> - test_begin_subtest "count+tag ($config)"
> + config_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)"
> + config_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>
> @@ -127,7 +137,7 @@ notmuch@notmuchmail.org
> EOF
> test_expect_equal_file EXPECTED OUTPUT
>
> - test_begin_subtest "dump ($config)"
> + config_subtest "dump" "$config"
> notmuch dump is:attachment and is:signed | sort > OUTPUT
> cat <<EOF > EXPECTED
> #notmuch-dump batch-tag:3 config,properties,tags
> @@ -136,43 +146,43 @@ EOF
> EOF
> test_expect_equal_file EXPECTED OUTPUT
>
> - test_begin_subtest "dump + tag + restore ($config)"
> + config_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)"
> + config_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)"
> + config_subtest "use existing database" "$config"
> output=$(notmuch new)
> test_expect_equal "$output" 'No new mail.'
>
> - test_begin_subtest "create database ($config)"
> + config_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)"
> + config_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)"
> + config_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)"
> + config_subtest "reply" "$config"
> add_message '[from]="Sender <sender@example.com>"' \
> [to]=test_suite@notmuchmail.org \
> [subject]=notmuch-reply-test \
> @@ -190,7 +200,7 @@ 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)"
> + config_subtest "insert+search" "$config"
> generate_message \
> "[subject]=\"insert-subject\"" \
> "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" \
> @@ -201,13 +211,13 @@ EOF
> test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename"
>
>
> - test_begin_subtest "compact+search ($config)"
> + config_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)"
> + config_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)
> @@ -215,7 +225,7 @@ EOF
> "$output" \
> "Welcome to a new version of notmuch! Your database will now be upgraded."
>
> - test_begin_subtest "notmuch +config -database suggests notmuch new ($config)"
> + config_subtest "notmuch +config -database suggests notmuch new" "$config"
> mv "$XAPIAN_PATH" "${XAPIAN_PATH}.bak"
> notmuch > OUTPUT
> cat <<EOF > EXPECTED
> @@ -231,7 +241,7 @@ EOF
>
> test_expect_equal_file EXPECTED OUTPUT
>
> - test_begin_subtest "Set config value ($config)"
> + config_subtest "Set config value" "$config"
> name=${RANDOM}
> value=${RANDOM}
> notmuch config set test${test_count}.${name} ${value}
> @@ -240,7 +250,7 @@ EOF
> output2=$(notmuch config get test${test_count}.${name})
> test_expect_equal "${output}+${output2}" "${value}+"
>
> - test_begin_subtest "Set config value in database ($config)"
> + config_subtest "Set config value in database" "$config"
> name=${RANDOM}
> value=${RANDOM}
> notmuch config set --database test${test_count}.${name} ${value}
> @@ -249,7 +259,7 @@ EOF
> output2=$(notmuch config get test${test_count}.${name})
> test_expect_equal "${output}+${output2}" "${value}+"
>
> - test_begin_subtest "Config list ($config)"
> + config_subtest "Config list" "$config"
> notmuch config list | notmuch_dir_sanitize | sed -e "s/^database.backup_dir=.*$/database.backup_dir/" \
> -e "s/^database.hook_dir=.*$/database.hook_dir/" \
> -e "s/^database.path=.*$/database.path/" \
> @@ -276,7 +286,7 @@ EOF
>
> case $config in
> XDG*)
> - test_begin_subtest "Set shadowed config value in database ($config)"
> + config_subtest "Set shadowed config value in database" "$config"
> name=${RANDOM}
> value=${RANDOM}
> key=test${test_count}.${name}
> --
> 2.30.2
> _______________________________________________
> notmuch mailing list -- notmuch@notmuchmail.org
> To unsubscribe send an email to notmuch-leave@notmuchmail.org
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/8] test/expect_equal_file: whitespace cleanup
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
2021-08-02 15:09 ` [PATCH 1/8] test/path-config: define config_subtest David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 3/8] test: factor out test_diff_file_ David Bremner
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
No functional change, just reindent to Emacs defaults.
---
test/test-lib.sh | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/test/test-lib.sh b/test/test-lib.sh
index 67ad8853..10ee9b72 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -404,29 +404,29 @@ test_expect_equal () {
# Like test_expect_equal, but takes two filenames.
test_expect_equal_file () {
- local file1 file2 testname basename1 basename2
- exec 1>&6 2>&7 # Restore stdout and stderr
- if [ -z "$inside_subtest" ]; then
- error "bug in the test script: test_expect_equal_file without test_begin_subtest"
- fi
- inside_subtest=
- test "$#" = 2 ||
+ local file1 file2 testname basename1 basename2
+ exec 1>&6 2>&7 # Restore stdout and stderr
+ if [ -z "$inside_subtest" ]; then
+ error "bug in the test script: test_expect_equal_file without test_begin_subtest"
+ fi
+ inside_subtest=
+ test "$#" = 2 ||
error "bug in the test script: not 2 parameters to test_expect_equal_file"
- file1="$1"
- file2="$2"
- if ! test_skip "$test_subtest_name"
- then
- if diff -q "$file1" "$file2" >/dev/null ; then
- test_ok_
- else
- testname=$this_test.$test_count
- basename1=`basename "$file1"`
- basename2=`basename "$file2"`
- cp "$file1" "$testname.$basename1"
- cp "$file2" "$testname.$basename2"
- test_failure_ "$(diff -u "$testname.$basename1" "$testname.$basename2")"
- fi
+ file1="$1"
+ file2="$2"
+ if ! test_skip "$test_subtest_name"
+ then
+ if diff -q "$file1" "$file2" >/dev/null ; then
+ test_ok_
+ else
+ testname=$this_test.$test_count
+ basename1=`basename "$file1"`
+ basename2=`basename "$file2"`
+ cp "$file1" "$testname.$basename1"
+ cp "$file2" "$testname.$basename2"
+ test_failure_ "$(diff -u "$testname.$basename1" "$testname.$basename2")"
+ fi
fi
}
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/8] test: factor out test_diff_file_
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
2021-08-02 15:09 ` [PATCH 1/8] test/path-config: define config_subtest David Bremner
2021-08-02 15:09 ` [PATCH 2/8] test/expect_equal_file: whitespace cleanup David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 4/8] test: add test_expect_equal_file_nonempty David Bremner
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
A following commit will use this new function in a public test
function.
---
test/test-lib.sh | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/test/test-lib.sh b/test/test-lib.sh
index 10ee9b72..a8e57e51 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -402,17 +402,8 @@ test_expect_equal () {
fi
}
-# Like test_expect_equal, but takes two filenames.
-test_expect_equal_file () {
+test_diff_file_ () {
local file1 file2 testname basename1 basename2
- exec 1>&6 2>&7 # Restore stdout and stderr
- if [ -z "$inside_subtest" ]; then
- error "bug in the test script: test_expect_equal_file without test_begin_subtest"
- fi
- inside_subtest=
- test "$#" = 2 ||
- error "bug in the test script: not 2 parameters to test_expect_equal_file"
-
file1="$1"
file2="$2"
if ! test_skip "$test_subtest_name"
@@ -430,6 +421,19 @@ test_expect_equal_file () {
fi
}
+# Like test_expect_equal, but takes two filenames.
+test_expect_equal_file () {
+ exec 1>&6 2>&7 # Restore stdout and stderr
+ if [ -z "$inside_subtest" ]; then
+ error "bug in the test script: test_expect_equal_file without test_begin_subtest"
+ fi
+ inside_subtest=
+ test "$#" = 2 ||
+ error "bug in the test script: not 2 parameters to test_expect_equal_file"
+
+ test_diff_file_ "$1" "$2"
+}
+
# Like test_expect_equal, but arguments are JSON expressions to be
# canonicalized before diff'ing. If an argument cannot be parsed, it
# is used unchanged so that there's something to diff against.
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/8] test: add test_expect_equal_file_nonempty
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
` (2 preceding siblings ...)
2021-08-02 15:09 ` [PATCH 3/8] test: factor out test_diff_file_ David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 5/8] test/path-config: use test_expect_equal_file_nonempty David Bremner
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
A common bug in tests is that the code used to generate the EXPECTED
file fails, generating no output. When the code generating the OUTPUT
file fails in the same way, the test passes, even though there is a
failure being hidden. Add a new test function that guards against
this.
---
test/test-lib.sh | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/test/test-lib.sh b/test/test-lib.sh
index a8e57e51..4865032d 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -434,6 +434,25 @@ test_expect_equal_file () {
test_diff_file_ "$1" "$2"
}
+# Like test_expect_equal, but takes two filenames. Fails if either is empty
+test_expect_equal_file_nonempty () {
+ exec 1>&6 2>&7 # Restore stdout and stderr
+ if [ -z "$inside_subtest" ]; then
+ error "bug in the test script: test_expect_equal_file_nonempty without test_begin_subtest"
+ fi
+ inside_subtest=
+ test "$#" = 2 ||
+ error "bug in the test script: not 2 parameters to test_expect_equal_file_nonempty"
+
+ for file in "$1" "$2"; do
+ if [ ! -s "$file" ]; then
+ test_failure_ "Missing or zero length file: $file"
+ fi
+ done
+
+ test_diff_file_ "$1" "$2"
+}
+
# Like test_expect_equal, but arguments are JSON expressions to be
# canonicalized before diff'ing. If an argument cannot be parsed, it
# is used unchanged so that there's something to diff against.
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/8] test/path-config: use test_expect_equal_file_nonempty
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
` (3 preceding siblings ...)
2021-08-02 15:09 ` [PATCH 4/8] test: add test_expect_equal_file_nonempty David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 6/8] test: add known broken tests for finding database via MAILDIR David Bremner
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This is more robust against crashes when the expected output is also
generated by notmuch. In the case where the expected output is
explicit, it seems like overkill.
---
test/T055-path-config.sh | 11 +++++------
test/test-lib.sh | 1 +
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index 2061b116..035276c2 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -151,13 +151,13 @@ EOF
notmuch tag -inbox '*'
notmuch restore < EXPECTED
notmuch dump > OUTPUT
- test_expect_equal_file EXPECTED OUTPUT
+ test_expect_equal_file_nonempty EXPECTED OUTPUT
config_subtest "reindex" "$config"
notmuch search --output=messages '*' > EXPECTED
notmuch reindex '*'
notmuch search --output=messages '*' > OUTPUT
- test_expect_equal_file EXPECTED OUTPUT
+ test_expect_equal_file_nonempty EXPECTED OUTPUT
config_subtest "use existing database" "$config"
output=$(notmuch new)
@@ -179,7 +179,7 @@ EOF
config_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
+ test_expect_equal_file_nonempty $gen_msg_filename OUTPUT
rm -f $gen_msg_filename
config_subtest "reply" "$config"
@@ -208,14 +208,13 @@ EOF
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_expect_equal_file_nonempty "$cur_msg_filename" "$gen_msg_filename"
config_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_expect_equal_file_nonempty EXPECTED OUTPUT
config_subtest "upgrade backup" "$config"
features=$(xapian-metadata get $XAPIAN_PATH features | grep -v "^relative directory paths")
diff --git a/test/test-lib.sh b/test/test-lib.sh
index 4865032d..94f9d605 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -447,6 +447,7 @@ test_expect_equal_file_nonempty () {
for file in "$1" "$2"; do
if [ ! -s "$file" ]; then
test_failure_ "Missing or zero length file: $file"
+ return $?
fi
done
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/8] test: add known broken tests for finding database via MAILDIR
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
` (4 preceding siblings ...)
2021-08-02 15:09 ` [PATCH 5/8] test/path-config: use test_expect_equal_file_nonempty David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 7/8] lib/open: look in MAILDIR for database, as documented David Bremner
2021-08-02 15:09 ` [PATCH 8/8] doc: document database search algorithm David Bremner
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This highlights a bug reported by several users, including
Mohsin Kaleem [1].
The use of test_begin_subtest is because these tests pass even though
the database cannot be located.
[1]: id:87bl9lx864.fsf@kisara.moe
---
test/T055-path-config.sh | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index 035276c2..40601acd 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -16,6 +16,7 @@ restore_config () {
unset DATABASE_PATH
unset NOTMUCH_PROFILE
unset XAPIAN_PATH
+ unset MAILDIR
rm -f "$HOME/mail"
cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG}
}
@@ -55,6 +56,18 @@ home_mail_config () {
unset DATABASE_PATH
}
+maildir_env_config () {
+ local dir
+ backup_config
+ dir="${HOME}/env_points_here"
+ ln -s $MAIL_DIR $dir
+ export MAILDIR=$dir
+ notmuch config set database.path
+ notmuch config set database.mail_root
+ XAPIAN_PATH="${MAIL_DIR}/.notmuch/xapian"
+ unset DATABASE_PATH
+}
+
xdg_config () {
local dir
local profile=${1:-default}
@@ -84,9 +97,12 @@ config_subtest () {
local config=$2
test_begin_subtest "$title ($config)"
+ if [[ "$config" == "maildir_env" ]]; then
+ test_subtest_known_broken
+ fi
}
-for config in traditional split XDG XDG+profile symlink home_mail; do
+for config in traditional split XDG XDG+profile symlink home_mail maildir_env; do
#start each set of tests with an known set of messages
add_email_corpus
@@ -224,7 +240,7 @@ EOF
"$output" \
"Welcome to a new version of notmuch! Your database will now be upgraded."
- config_subtest "notmuch +config -database suggests notmuch new" "$config"
+ test_begin_subtest "notmuch +config -database suggests notmuch new" "$config"
mv "$XAPIAN_PATH" "${XAPIAN_PATH}.bak"
notmuch > OUTPUT
cat <<EOF > EXPECTED
@@ -240,7 +256,7 @@ EOF
test_expect_equal_file EXPECTED OUTPUT
- config_subtest "Set config value" "$config"
+ test_begin_subtest "Set config value" "$config"
name=${RANDOM}
value=${RANDOM}
notmuch config set test${test_count}.${name} ${value}
@@ -259,11 +275,13 @@ EOF
test_expect_equal "${output}+${output2}" "${value}+"
config_subtest "Config list" "$config"
- notmuch config list | notmuch_dir_sanitize | sed -e "s/^database.backup_dir=.*$/database.backup_dir/" \
- -e "s/^database.hook_dir=.*$/database.hook_dir/" \
- -e "s/^database.path=.*$/database.path/" \
- -e "s,^database.mail_root=CWD/home/mail,database.mail_root=MAIL_DIR," \
- > OUTPUT
+ notmuch config list | notmuch_dir_sanitize | \
+ sed -e "s/^database.backup_dir=.*$/database.backup_dir/" \
+ -e "s/^database.hook_dir=.*$/database.hook_dir/" \
+ -e "s/^database.path=.*$/database.path/" \
+ -e "s,^database.mail_root=CWD/home/mail,database.mail_root=MAIL_DIR," \
+ -e "s,^database.mail_root=CWD/home/env_points_here,database.mail_root=MAIL_DIR," \
+ > OUTPUT
cat <<EOF > EXPECTED
built_with.compact=true
built_with.field_processor=true
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/8] lib/open: look in MAILDIR for database, as documented.
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
` (5 preceding siblings ...)
2021-08-02 15:09 ` [PATCH 6/8] test: add known broken tests for finding database via MAILDIR David Bremner
@ 2021-08-02 15:09 ` David Bremner
2021-08-02 15:09 ` [PATCH 8/8] doc: document database search algorithm David Bremner
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
This fixes the bug id:87bl9lx864.fsf@kisara.moe
---
lib/open.cc | 4 ++++
test/T055-path-config.sh | 3 ---
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/lib/open.cc b/lib/open.cc
index 7b95c5b1..280ffee3 100644
--- a/lib/open.cc
+++ b/lib/open.cc
@@ -220,6 +220,10 @@ _choose_database_path (void *ctx,
}
}
+ if (! *database_path) {
+ *database_path = getenv ("MAILDIR");
+ }
+
if (! *database_path) {
notmuch_status_t status;
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index 40601acd..774fe9c8 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -97,9 +97,6 @@ config_subtest () {
local config=$2
test_begin_subtest "$title ($config)"
- if [[ "$config" == "maildir_env" ]]; then
- test_subtest_known_broken
- fi
}
for config in traditional split XDG XDG+profile symlink home_mail maildir_env; do
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 8/8] doc: document database search algorithm.
2021-08-02 15:09 ` look in MAILDIR for database David Bremner
` (6 preceding siblings ...)
2021-08-02 15:09 ` [PATCH 7/8] lib/open: look in MAILDIR for database, as documented David Bremner
@ 2021-08-02 15:09 ` David Bremner
7 siblings, 0 replies; 11+ messages in thread
From: David Bremner @ 2021-08-02 15:09 UTC (permalink / raw)
To: notmuch; +Cc: David Bremner
Essentially a translation of the function _choose_database_path for
human consumption. As a bonus, document environment variable
NOTMUCH_DATABASE
---
doc/man1/notmuch-config.rst | 21 ++++++++++++++++++++-
doc/man1/notmuch.rst | 5 +++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index 82fbb44c..07a9eaf0 100644
--- a/doc/man1/notmuch-config.rst
+++ b/doc/man1/notmuch-config.rst
@@ -60,7 +60,7 @@ paths are presumed relative to `$HOME` for items in section
sub-directory named ``.notmuch`` if **database.mail\_root**
is unset).
- Default: ``$MAILDIR`` variable if set, otherwise ``$HOME/mail``.
+ Default: see :ref:`database`
**database.mail_root**
The top-level directory where your mail currently exists and to
@@ -272,6 +272,25 @@ Notmuch configuration file search order:
by :envvar:`NOTMUCH_PROFILE` environment variable if set,
``$HOME/.notmuch-config`` otherwise.
+.. _database:
+
+DATABASE LOCATION
+-----------------
+
+Notmuch database search order:
+
+1. Directory specified by :envvar:`NOTMUCH_DATABASE` environment variable.
+
+2. Directory specified by config key ``database.path``.
+
+3. ``$XDG_DATA_HOME/notmuch/<profile>`` where ``<profile>``
+ is defined by :envvar:`NOTMUCH_PROFILE` environment variable if
+ set, ``$XDG_DATA_HOME/notmuch/default`` otherwise.
+
+4. Directory specified by :envvar:`MAILDIR` environment variable.
+
+5. ``$HOME/mail``
+
HOOKS
-----
diff --git a/doc/man1/notmuch.rst b/doc/man1/notmuch.rst
index 6bd1dc03..de4c91ac 100644
--- a/doc/man1/notmuch.rst
+++ b/doc/man1/notmuch.rst
@@ -164,6 +164,11 @@ of notmuch.
Specifies the location of the notmuch configuration file. See
:any:`notmuch-config(1)` for details.
+.. envvar:: NOTMUCH_DATABASE
+
+ Specifies the location of the notmuch database. See
+ :any:`notmuch-config(1)` for details.
+
.. envvar:: NOTMUCH_PROFILE
Selects among notmuch configurations. See :any:`notmuch-config(1)`
--
2.30.2
^ permalink raw reply related [flat|nested] 11+ messages in thread