unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* v3 test notmuch as installed
@ 2023-04-09 14:26 David Bremner
  2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

Compared to the previous version [1], the first patch is now applied,
and the setup for running without configure now relies on the various
NOTMUCH_HAVE_* environment variables working OK when unset. This
allows eliminating the "defaults.sh". There is also some added
documentation on how to use the new feature (in patch 4/5).  

[1]: id:20230104124145.2882983-1-david@tethera.net


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/5] test: use bash specific test for feature tests
  2023-04-09 14:26 v3 test notmuch as installed David Bremner
@ 2023-04-09 14:26 ` David Bremner
  2023-04-13 12:22   ` Felipe Contreras
  2023-04-13 19:24   ` Tomi Ollila
  2023-04-09 14:26 ` [PATCH v3 2/5] test: check for empty/missing files in test_expect_equal_message_body David Bremner
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

It is desirable to have the tests consider these variables being
undefined as equivalent to the feature not being present, and in
particular for the tests not to generate errors.

We know the test suite is tied to bash anyway, so this is a simple
fix.
---
 test/T060-count.sh               | 2 +-
 test/T081-sexpr-search.sh        | 2 +-
 test/T150-tagging.sh             | 2 +-
 test/T160-json.sh                | 2 +-
 test/T220-reply.sh               | 2 +-
 test/T240-dump-restore.sh        | 2 +-
 test/T391-python-cffi.sh         | 3 +--
 test/T392-python-cffi-notmuch.sh | 2 +-
 test/T520-show.sh                | 2 +-
 test/T570-revision-tracking.sh   | 2 +-
 test/T700-reindex.sh             | 2 +-
 test/T800-asan.sh                | 2 +-
 test/T810-tsan.sh                | 2 +-
 test/T850-git.sh                 | 2 +-
 14 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/test/T060-count.sh b/test/T060-count.sh
index 48146706..4499b4cb 100755
--- a/test/T060-count.sh
+++ b/test/T060-count.sh
@@ -157,7 +157,7 @@ print("4: {} messages".format(query.count_messages()))
 EOF
 test_expect_equal_file EXPECTED OUTPUT
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     test_begin_subtest "and of exact terms (query=sexp)"
     output=$(notmuch count --query=sexp '(and "wonderful" "wizard")')
diff --git a/test/T081-sexpr-search.sh b/test/T081-sexpr-search.sh
index 0c7db9c2..17b02e06 100755
--- a/test/T081-sexpr-search.sh
+++ b/test/T081-sexpr-search.sh
@@ -2,7 +2,7 @@
 test_description='"notmuch search" in several variations'
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_SFSEXP -ne 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -ne 1 ]]; then
     printf "Skipping due to missing sfsexp library\n"
     test_done
 fi
diff --git a/test/T150-tagging.sh b/test/T150-tagging.sh
index ac3f2539..af0b8448 100755
--- a/test/T150-tagging.sh
+++ b/test/T150-tagging.sh
@@ -328,7 +328,7 @@ test_expect_equal "$output" "A Xapian exception occurred opening database"
 
 add_email_corpus
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     test_query_syntax '(and "wonderful" "wizard")' 'wonderful and wizard'
     test_query_syntax '(or "php" "wizard")' 'php or wizard'
diff --git a/test/T160-json.sh b/test/T160-json.sh
index 4a797f6a..6f637a21 100755
--- a/test/T160-json.sh
+++ b/test/T160-json.sh
@@ -66,7 +66,7 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
  \"unread\"]}]"
 
 test_begin_subtest "Search message: json, 64-bit timestamp"
-if [ $NOTMUCH_HAVE_64BIT_TIME_T -ne 1 ]; then
+if [[ $NOTMUCH_HAVE_64BIT_TIME_T -ne 1 ]]; then
     test_subtest_known_broken
 fi
 add_message "[subject]=\"json-search-64bit-timestamp-subject\"" "[date]=\"Tue, 01 Jan 2999 12:00:00 -0000\"" "[body]=\"json-search-64bit-timestamp-message\""
diff --git a/test/T220-reply.sh b/test/T220-reply.sh
index 207f5788..a5a9a1df 100755
--- a/test/T220-reply.sh
+++ b/test/T220-reply.sh
@@ -24,7 +24,7 @@ test_begin_subtest "Basic reply"
 notmuch reply id:${gen_msg_id} >OUTPUT 2>&1 && echo OK >> OUTPUT
 test_expect_equal_file basic.expected OUTPUT
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     test_begin_subtest "Basic reply (query=sexp)"
     notmuch reply --query=sexp "(id ${gen_msg_id})" >OUTPUT 2>&1 && echo OK >> OUTPUT
diff --git a/test/T240-dump-restore.sh b/test/T240-dump-restore.sh
index a86f0fb7..b99a303e 100755
--- a/test/T240-dump-restore.sh
+++ b/test/T240-dump-restore.sh
@@ -118,7 +118,7 @@ notmuch dump -- from:cworth > dump-dash-cworth.actual
 test_expect_equal_file dump-cworth.expected dump-dash-cworth.actual
 
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     test_begin_subtest "dump --query=sexp -- '(from cworth)'"
     notmuch dump --query=sexp -- '(from cworth)' > dump-dash-cworth.actual2
diff --git a/test/T391-python-cffi.sh b/test/T391-python-cffi.sh
index 30872af0..59ad087f 100755
--- a/test/T391-python-cffi.sh
+++ b/test/T391-python-cffi.sh
@@ -2,11 +2,10 @@
 test_description="python bindings (pytest)"
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 -o $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]; then
+if [[ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 || $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]]; then
     test_done
 fi
 
-
 test_begin_subtest "python cffi tests (NOTMUCH_CONFIG set)"
 pytest_dir=$NOTMUCH_BUILDDIR/bindings/python-cffi/build/stage
 printf "[pytest]\nminversion = 3.0\naddopts = -ra\n" > $pytest_dir/pytest.ini
diff --git a/test/T392-python-cffi-notmuch.sh b/test/T392-python-cffi-notmuch.sh
index 15c8fc6b..c97da9b5 100755
--- a/test/T392-python-cffi-notmuch.sh
+++ b/test/T392-python-cffi-notmuch.sh
@@ -2,7 +2,7 @@
 test_description="python bindings (notmuch test suite)"
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 -o $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]; then
+if [[ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 || $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]]; then
     test_done
 fi
 
diff --git a/test/T520-show.sh b/test/T520-show.sh
index c7b73a6d..77620099 100755
--- a/test/T520-show.sh
+++ b/test/T520-show.sh
@@ -35,7 +35,7 @@ notmuch show --entire-thread=true --sort=oldest-first $QUERY > OUTPUT
 test_expect_equal_file EXPECTED OUTPUT
 
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     test_query_syntax '(and "wonderful" "wizard")' 'wonderful and wizard'
     test_query_syntax '(or "php" "wizard")' 'php or wizard'
diff --git a/test/T570-revision-tracking.sh b/test/T570-revision-tracking.sh
index a7480050..168cecbc 100755
--- a/test/T570-revision-tracking.sh
+++ b/test/T570-revision-tracking.sh
@@ -95,7 +95,7 @@ subtotal=$(notmuch count lastmod:..$lastmod)
 result=$(($subtotal == $total-1))
 test_expect_equal 1 "$result"
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
     test_begin_subtest 'exclude one message using negative lastmod (sexp)'
     total=$(notmuch count '*')
     notmuch tag +${RANDOM} id:4EFC743A.3060609@april.org
diff --git a/test/T700-reindex.sh b/test/T700-reindex.sh
index 347f8483..a884d89f 100755
--- a/test/T700-reindex.sh
+++ b/test/T700-reindex.sh
@@ -5,7 +5,7 @@ test_description='reindexing messages'
 add_email_corpus
 
 
-if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then
 
     count=$(notmuch count --lastmod '*' | cut -f 3)
     for query in '()' '(not)' '(and)' '(or ())' '(or (not))' '(or (and))' \
diff --git a/test/T800-asan.sh b/test/T800-asan.sh
index 5055c93e..463bd386 100755
--- a/test/T800-asan.sh
+++ b/test/T800-asan.sh
@@ -2,7 +2,7 @@
 test_description='run code with ASAN enabled against the library'
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_ASAN -ne 1 ]; then
+if [[ $NOTMUCH_HAVE_ASAN -ne 1 ]]; then
     printf "Skipping due to missing ASAN support\n"
     test_done
 fi
diff --git a/test/T810-tsan.sh b/test/T810-tsan.sh
index 7e877b27..c27ba167 100755
--- a/test/T810-tsan.sh
+++ b/test/T810-tsan.sh
@@ -8,7 +8,7 @@ test_description='run code with TSan enabled against the library'
 
 . "$test_directory"/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_TSAN -ne 1 ]; then
+if [[ $NOTMUCH_HAVE_TSAN -ne 1 ]]; then
     printf "Skipping due to missing TSan support\n"
     test_done
 fi
diff --git a/test/T850-git.sh b/test/T850-git.sh
index 55cec78a..d3d05b51 100755
--- a/test/T850-git.sh
+++ b/test/T850-git.sh
@@ -2,7 +2,7 @@
 test_description='"notmuch git" to save and restore tags'
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ $NOTMUCH_HAVE_SFSEXP -ne 1 ]; then
+if [[ $NOTMUCH_HAVE_SFSEXP -ne 1 ]]; then
     printf "Skipping due to missing sfsexp library\n"
     test_done
 fi
-- 
2.39.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/5] test: check for empty/missing files in test_expect_equal_message_body
  2023-04-09 14:26 v3 test notmuch as installed David Bremner
  2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
@ 2023-04-09 14:26 ` David Bremner
  2023-04-09 14:26 ` [PATCH v3 3/5] test: Guess a value for NOTMUCH_PYTHON David Bremner
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

Messages can have empty bodies, but empty files are not messages.
---
 test/test-lib.sh | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/test/test-lib.sh b/test/test-lib.sh
index 1a6525df..b5aa94dd 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -388,6 +388,14 @@ test_expect_equal_message_body () {
     test "$#" = 2 ||
 	error "bug in the test script: not 2 parameters to test_expect_equal_file"
 
+    for file in "$1" "$2"; do
+	if [ ! -s "$file" ]; then
+	    test_failure_ "Missing or zero length file: $file"
+	    inside_subtest=
+	    return $?
+	fi
+    done
+
     expected=$(sed '1,/^$/d' "$1")
     output=$(sed '1,/^$/d' "$2")
     test_expect_equal "$expected" "$output"
-- 
2.39.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/5] test: Guess a value for NOTMUCH_PYTHON
  2023-04-09 14:26 v3 test notmuch as installed David Bremner
  2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
  2023-04-09 14:26 ` [PATCH v3 2/5] test: check for empty/missing files in test_expect_equal_message_body David Bremner
@ 2023-04-09 14:26 ` David Bremner
  2023-04-09 14:26 ` [PATCH v3 4/5] test: support testing notmuch as installed David Bremner
  2023-04-09 14:26 ` [PATCH v3 5/5] debian: add autopkgtests David Bremner
  4 siblings, 0 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

python3 will work for many people, and reduce the friction to running
the tests without running configure first.
---
 test/test-lib-common.sh | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/test/test-lib-common.sh b/test/test-lib-common.sh
index 18fa29c0..4d14e0b3 100644
--- a/test/test-lib-common.sh
+++ b/test/test-lib-common.sh
@@ -323,6 +323,10 @@ rm -rf "$TMP_DIRECTORY" || {
 	exit 1
 }
 
+# Provide a guess at a usable Python, to support running tests without
+# running configure first.
+NOTMUCH_PYTHON=${NOTMUCH_PYTHON-python3}
+
 # A temporary home directory is needed by at least:
 # - emacs/"Sending a message via (fake) SMTP"
 # - emacs/"Reply within emacs"
-- 
2.39.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 4/5] test: support testing notmuch as installed
  2023-04-09 14:26 v3 test notmuch as installed David Bremner
                   ` (2 preceding siblings ...)
  2023-04-09 14:26 ` [PATCH v3 3/5] test: Guess a value for NOTMUCH_PYTHON David Bremner
@ 2023-04-09 14:26 ` David Bremner
  2023-04-09 14:26 ` [PATCH v3 5/5] debian: add autopkgtests David Bremner
  4 siblings, 0 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

We put some effort into testing the built copy rather than some
installed copy. On the other hand for people like packagers, testing
the installed copy is also of interest.

When NOTMUCH_TEST_INSTALLED is set to a nonempty value, tests do not
require a built notmuch tree or running configure.

Some of the tests marked as broken when running against installed
notmuch are probably fixable.
---
 test/README                    | 17 +++++++++++++++++
 test/T000-basic.sh             |  1 +
 test/T010-help-test.sh         |  5 ++++-
 test/T160-json.sh              |  2 ++
 test/T240-dump-restore.sh      |  2 ++
 test/T310-emacs.sh             |  2 ++
 test/T350-crypto.sh            |  1 +
 test/T360-symbol-hiding.sh     |  4 ++++
 test/T390-python.sh            |  4 ++++
 test/T391-python-cffi.sh       |  6 +++++-
 test/T395-ruby.sh              |  8 ++++++--
 test/T410-argument-parsing.sh  |  4 ++++
 test/T480-hex-escaping.sh      |  4 ++++
 test/T490-parse-time-string.sh |  4 ++++
 test/T550-db-features.sh       |  4 ++++
 test/T566-lib-message.sh       |  4 ++++
 test/T592-thread-breakage.sh   |  4 ++++
 test/T710-message-id.sh        |  4 ++++
 test/T800-asan.sh              |  5 +++++
 test/T850-git.sh               |  6 ++++++
 test/export-dirs.sh            |  2 +-
 test/notmuch-test              | 12 ++++++++++--
 test/test-lib-common.sh        | 13 ++++++++++---
 test/test-lib-emacs.sh         | 14 +++++++++++---
 test/test-lib.sh               | 27 +++++++++++++++++++++------
 25 files changed, 140 insertions(+), 19 deletions(-)

diff --git a/test/README b/test/README
index 10f127cb..a81808b1 100644
--- a/test/README
+++ b/test/README
@@ -137,6 +137,23 @@ detection of missing prerequisites. In the future we may treat tests
 unable to run because of missing prerequisites, but not explicitly
 skipped by the user, as failures.
 
+Testing installed notmuch
+-------------------------
+
+Systems integrators (e.g. Linux distros) may wish to test an installed
+version of notmuch.  This can be done be running
+
+     $ NOTMUCH_TEST_INSTALLED=1 ./test/notmuch-test
+
+In this scenario the test suite does not assume a built tree, and in
+particular cannot rely on the output of 'configure'. You may want to
+set certain feature environment variables ('NOTMUCH_HAVE_*') directly
+if you know those apply to your installed notmuch). Consider also
+setting TERM=dumb if the value of TERM cannot be used (e.g. in a
+chroot with missing terminfo). Note that having a built tree may cause
+surprising/broken results for NOTMUCH_TEST_INSTALLED, so consider
+cleaning first.
+
 Writing Tests
 -------------
 The test script is written as a shell script. It is to be named as
diff --git a/test/T000-basic.sh b/test/T000-basic.sh
index a2f4d93f..642f918d 100755
--- a/test/T000-basic.sh
+++ b/test/T000-basic.sh
@@ -66,6 +66,7 @@ test_begin_subtest 'NOTMUCH_CONFIG is set and points to an existing file'
 test_expect_success 'test -f "${NOTMUCH_CONFIG}"'
 
 test_begin_subtest 'PATH is set to build directory'
+test_subtest_broken_for_installed
 test_expect_equal \
     "$(dirname ${TEST_DIRECTORY})" \
     "$(echo $PATH|cut -f1 -d: | sed -e 's,/test/valgrind/bin$,,')"
diff --git a/test/T010-help-test.sh b/test/T010-help-test.sh
index da45d3ae..ae84c22d 100755
--- a/test/T010-help-test.sh
+++ b/test/T010-help-test.sh
@@ -12,13 +12,16 @@ test_expect_success 'notmuch help'
 test_begin_subtest 'notmuch --version'
 test_expect_success 'notmuch --version'
 
-if [ $NOTMUCH_HAVE_MAN -eq 1 ]; then
+if [[ $NOTMUCH_HAVE_MAN -eq 1 ]]; then
     test_begin_subtest 'notmuch --help tag'
     test_expect_success 'notmuch --help tag'
 
     test_begin_subtest 'notmuch help tag'
     test_expect_success 'notmuch help tag'
 else
+    if [[ -n $NOTMUCH_TEST_INSTALLED ]]; then
+	test_done
+    fi
     test_begin_subtest 'notmuch --help tag (man pages not available)'
     test_expect_success 'test_must_fail notmuch --help tag >/dev/null'
 
diff --git a/test/T160-json.sh b/test/T160-json.sh
index 6f637a21..b19058d7 100755
--- a/test/T160-json.sh
+++ b/test/T160-json.sh
@@ -65,6 +65,7 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
  \"tags\": [\"inbox\",
  \"unread\"]}]"
 
+if [[ -z NOTMUCH_TEST_INSTALLED ]]; then
 test_begin_subtest "Search message: json, 64-bit timestamp"
 if [[ $NOTMUCH_HAVE_64BIT_TIME_T -ne 1 ]]; then
     test_subtest_known_broken
@@ -81,6 +82,7 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
  \"query\": [\"id:$gen_msg_id\", null],
  \"tags\": [\"inbox\",
  \"unread\"]}]"
+fi
 
 test_begin_subtest "Format version: too low"
 test_expect_code 20 "notmuch search --format-version=0 \\*"
diff --git a/test/T240-dump-restore.sh b/test/T240-dump-restore.sh
index b99a303e..9072f636 100755
--- a/test/T240-dump-restore.sh
+++ b/test/T240-dump-restore.sh
@@ -139,6 +139,7 @@ notmuch dump --output=dump-outfile-dash-inbox.actual -- from:cworth
 test_expect_equal_file dump-cworth.expected dump-outfile-dash-inbox.actual
 
 test_begin_subtest "Check for a safe set of message-ids"
+test_subtest_broken_for_installed
 notmuch search --output=messages from:cworth | sed s/^id:// > EXPECTED
 notmuch search --output=messages from:cworth | sed s/^id:// |\
 	$TEST_DIRECTORY/hex-xcode --direction=encode > OUTPUT
@@ -246,6 +247,7 @@ notmuch dump --format=batch-tag > OUTPUT.$test_count
 test_expect_equal_file EXPECTED.$test_count OUTPUT.$test_count
 
 test_begin_subtest 'format=batch-tag, checking encoded output'
+test_subtest_broken_for_installed
 NOTMUCH_DUMP_TAGS --format=batch-tag -- from:cworth |\
 	 awk "{ print \"+$enc1 +$enc2 +$enc3 -- \" \$5 }" > EXPECTED.$test_count
 NOTMUCH_DUMP_TAGS --format=batch-tag -- from:cworth > OUTPUT.$test_count
diff --git a/test/T310-emacs.sh b/test/T310-emacs.sh
index 9d0df187..d3aa2e7d 100755
--- a/test/T310-emacs.sh
+++ b/test/T310-emacs.sh
@@ -258,6 +258,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "Verify that sent messages are saved/searchable (via FCC)"
+test_subtest_broken_for_installed
 notmuch new > /dev/null
 output=$(notmuch search 'subject:"testing message sent via SMTP"' | notmuch_search_sanitize)
 test_expect_equal "$output" "thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; Testing message sent via SMTP (inbox)"
@@ -350,6 +351,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "Reply within emacs"
+test_subtest_broken_for_installed
 test_emacs '(let ((message-hidden-headers ''()))
 	    (notmuch-search "subject:\"testing message sent via SMTP\"")
 	    (notmuch-test-wait)
diff --git a/test/T350-crypto.sh b/test/T350-crypto.sh
index 721cbfdd..27c0e86d 100755
--- a/test/T350-crypto.sh
+++ b/test/T350-crypto.sh
@@ -30,6 +30,7 @@ msg_file=$(notmuch search --output=files subject:signed-message-sent-via-SMTP)
 test_expect_equal_message_body sent_message "$msg_file"
 
 test_begin_subtest "signed part content-type indexing"
+test_subtest_broken_for_installed
 notmuch search mimetype:multipart/signed and mimetype:application/pgp-signature | notmuch_search_sanitize > OUTPUT
 cat <<EOF >EXPECTED
 thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; test signed message 001 (inbox signed)
diff --git a/test/T360-symbol-hiding.sh b/test/T360-symbol-hiding.sh
index 642457bf..5bf8da14 100755
--- a/test/T360-symbol-hiding.sh
+++ b/test/T360-symbol-hiding.sh
@@ -11,6 +11,10 @@ test_description='exception symbol hiding'
 
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 test_begin_subtest 'running test' run_test
 mkdir -p ${PWD}/fakedb/.notmuch
 $TEST_DIRECTORY/symbol-test ${PWD}/fakedb ${PWD}/nonexistent 2>&1 \
diff --git a/test/T390-python.sh b/test/T390-python.sh
index 9f71ce3c..710d2553 100755
--- a/test/T390-python.sh
+++ b/test/T390-python.sh
@@ -4,6 +4,10 @@ test_description="python bindings"
 
 test_require_external_prereq ${NOTMUCH_PYTHON}
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 add_email_corpus
 add_gnupg_home
 
diff --git a/test/T391-python-cffi.sh b/test/T391-python-cffi.sh
index 59ad087f..1fcdb46d 100755
--- a/test/T391-python-cffi.sh
+++ b/test/T391-python-cffi.sh
@@ -2,7 +2,11 @@
 test_description="python bindings (pytest)"
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [[ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 || $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]]; then
+if [[ -n $NOTMUCH_TEST_INSTALLED ]]; then
+    test_done
+fi
+
+if [ $NOTMUCH_HAVE_PYTHON3_CFFI -eq 0 -o $NOTMUCH_HAVE_PYTHON3_PYTEST -eq 0 ]; then
     test_done
 fi
 
diff --git a/test/T395-ruby.sh b/test/T395-ruby.sh
index c066c842..e902cdb3 100755
--- a/test/T395-ruby.sh
+++ b/test/T395-ruby.sh
@@ -2,7 +2,7 @@
 test_description="ruby bindings"
 . $(dirname "$0")/test-lib.sh || exit 1
 
-if [ "${NOTMUCH_HAVE_RUBY_DEV}" = "0" ]; then
+if [[ -z "${NOTMUCH_TEST_INSTALLED}" && "${NOTMUCH_HAVE_RUBY_DEV}" = "0" ]]; then
     test_subtest_missing_external_prereq_["ruby development files"]=t
 fi
 
@@ -15,7 +15,11 @@ test_ruby() {
 	db = Notmuch::Database.new()
 	EOF
 	cat
-    ) | $NOTMUCH_RUBY -I "$NOTMUCH_BUILDDIR/bindings/ruby"> OUTPUT
+    ) | if [[ -n "${NOTMUCH_TEST_INSTALLED}" ]]; then
+	ruby
+    else
+	$NOTMUCH_RUBY -I "$NOTMUCH_BUILDDIR/bindings/ruby"
+    fi> OUTPUT
     test_expect_equal_file EXPECTED OUTPUT
 }
 
diff --git a/test/T410-argument-parsing.sh b/test/T410-argument-parsing.sh
index d9aa8e2d..5af12916 100755
--- a/test/T410-argument-parsing.sh
+++ b/test/T410-argument-parsing.sh
@@ -2,6 +2,10 @@
 test_description="argument parsing"
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 test_begin_subtest "sanity check"
 $TEST_DIRECTORY/arg-test pos1 --keyword=one --boolean --string=foo pos2 --int=7 --flag=one --flag=three > OUTPUT
 cat <<EOF > EXPECTED
diff --git a/test/T480-hex-escaping.sh b/test/T480-hex-escaping.sh
index b2eb80b9..744d5042 100755
--- a/test/T480-hex-escaping.sh
+++ b/test/T480-hex-escaping.sh
@@ -2,6 +2,10 @@
 test_description="hex encoding and decoding"
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 test_begin_subtest "round trip"
 find $NOTMUCH_SRCDIR/test/corpora/default -type f -print | sort | xargs cat > EXPECTED
 $TEST_DIRECTORY/hex-xcode --direction=encode < EXPECTED | $TEST_DIRECTORY/hex-xcode --direction=decode > OUTPUT
diff --git a/test/T490-parse-time-string.sh b/test/T490-parse-time-string.sh
index f89755ed..fa7d547c 100755
--- a/test/T490-parse-time-string.sh
+++ b/test/T490-parse-time-string.sh
@@ -2,6 +2,10 @@
 test_description="date/time parser module"
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 # Sanity/smoke tests for the date/time parser independent of notmuch
 
 _date () {
diff --git a/test/T550-db-features.sh b/test/T550-db-features.sh
index 9d5a9e70..c3ece78b 100755
--- a/test/T550-db-features.sh
+++ b/test/T550-db-features.sh
@@ -3,6 +3,10 @@ test_description="database version and feature compatibility"
 
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 test_begin_subtest "future database versions abort open"
 ${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 9999 ""
 output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
diff --git a/test/T566-lib-message.sh b/test/T566-lib-message.sh
index 7f0e8eb0..d8922fa4 100755
--- a/test/T566-lib-message.sh
+++ b/test/T566-lib-message.sh
@@ -3,6 +3,10 @@ test_description="API tests for notmuch_message_*"
 
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 add_email_corpus
 
 test_begin_subtest "building database"
diff --git a/test/T592-thread-breakage.sh b/test/T592-thread-breakage.sh
index 92a70e3e..fd9e628b 100755
--- a/test/T592-thread-breakage.sh
+++ b/test/T592-thread-breakage.sh
@@ -21,6 +21,10 @@ test_description='thread breakage during reindexing'
 
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n ${NOTMUCH_TEST_INSTALLED} ]]; then
+    test_done
+fi
+
 message_a () {
     mkdir -p ${MAIL_DIR}/cur
     cat > ${MAIL_DIR}/cur/a <<EOF
diff --git a/test/T710-message-id.sh b/test/T710-message-id.sh
index 5129d84c..340ec426 100755
--- a/test/T710-message-id.sh
+++ b/test/T710-message-id.sh
@@ -3,6 +3,10 @@ test_description="message id parsing"
 
 . $(dirname "$0")/test-lib.sh || exit 1
 
+if [[ -n "${NOTMUCH_TEST_INSTALLED}" ]]; then
+    test_done
+fi
+
 test_begin_subtest "good message ids"
 ${TEST_DIRECTORY}/message-id-parse <<EOF >OUTPUT
 <018b1a8f2d1df62e804ce88b65401304832dfbbf.1346614915.git.jani@nikula.org>
diff --git a/test/T800-asan.sh b/test/T800-asan.sh
index 463bd386..db3eb8ba 100755
--- a/test/T800-asan.sh
+++ b/test/T800-asan.sh
@@ -7,6 +7,11 @@ if [[ $NOTMUCH_HAVE_ASAN -ne 1 ]]; then
     test_done
 fi
 
+if [ -n "$LD_PRELOAD" ]; then
+    printf "Skipping due to non-empty LD_PRELOAD\n"
+    test_done
+fi
+
 add_email_corpus
 
 TEST_CFLAGS="${TEST_CFLAGS:-} -fsanitize=address"
diff --git a/test/T850-git.sh b/test/T850-git.sh
index d3d05b51..fc9dc6eb 100755
--- a/test/T850-git.sh
+++ b/test/T850-git.sh
@@ -233,6 +233,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "invoke as nmbug sets defaults"
+test_subtest_broken_for_installed
 "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^\(prefix\|repository\)' | notmuch_dir_sanitize > OUTPUT
 cat <<EOF > EXPECTED
 prefix = notmuch::
@@ -241,6 +242,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "env variable NOTMUCH_GIT_DIR works when invoked as nmbug"
+test_subtest_broken_for_installed
 NOTMUCH_GIT_DIR=`pwd`/foo "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^repository' | notmuch_dir_sanitize > OUTPUT
 cat <<EOF > EXPECTED
 repository = CWD/foo
@@ -256,6 +258,7 @@ test_expect_equal_file EXPECTED OUTPUT
 
 
 test_begin_subtest "env variable NOTMUCH_GIT_DIR overrides config when invoked as 'nmbug'"
+test_subtest_broken_for_installed
 notmuch config set git.path `pwd`/bar
 NOTMUCH_GIT_DIR=`pwd`/remote.git  "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^repository' | notmuch_dir_sanitize > OUTPUT
 notmuch config set git.path
@@ -274,6 +277,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as 'nmbug'"
+test_subtest_broken_for_installed
 NOTMUCH_GIT_PREFIX=env:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT
 cat <<EOF > EXPECTED
 prefix = env::
@@ -281,6 +285,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as nmbug"
+test_subtest_broken_for_installed
 NOTMUCH_GIT_PREFIX=foo:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT
 cat <<EOF > EXPECTED
 prefix = foo::
@@ -288,6 +293,7 @@ EOF
 test_expect_equal_file EXPECTED OUTPUT
 
 test_begin_subtest "env variable NOTMUCH_GIT_PREFIX overrides config when invoked as 'nmbug'"
+test_subtest_broken_for_installed
 notmuch config set git.tag_prefix config::
 NOTMUCH_GIT_PREFIX=env:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT
 notmuch config set git.path
diff --git a/test/export-dirs.sh b/test/export-dirs.sh
index 0a048e1f..3109da88 100644
--- a/test/export-dirs.sh
+++ b/test/export-dirs.sh
@@ -24,7 +24,7 @@ find_builddir () {
 if [[ -z "${NOTMUCH_BUILDDIR}" ]]; then
 	export NOTMUCH_BUILDDIR="$(find_builddir "$(pwd)")"
 
-	if [[ -z "${NOTMUCH_BUILDDIR}" ]]; then
+	if [[ -z "${NOTMUCH_BUILDDIR}"  &&  -z "${NOTMUCH_TEST_INSTALLED}" ]]; then
 		echo "Run tests in a subdir of built notmuch tree." >&2
 		exit 1
 	fi
diff --git a/test/notmuch-test b/test/notmuch-test
index 14747bdb..5d27e4d1 100755
--- a/test/notmuch-test
+++ b/test/notmuch-test
@@ -20,6 +20,14 @@ fi
 
 set -eu
 
+# Where to run the tests
+# XXX FIXME this code is duplicated with test-lib.sh
+if [[ -n "${NOTMUCH_BUILDDIR}" ]]; then
+    TEST_DIRECTORY=$NOTMUCH_BUILDDIR/test
+else
+    TEST_DIRECTORY=$NOTMUCH_SRCDIR/test
+fi
+
 TESTS=
 for test in ${NOTMUCH_TESTS-}; do
     TESTS="$TESTS $NOTMUCH_SRCDIR/test/$test"
@@ -80,7 +88,7 @@ for file in $TESTS
 do
     file=${file##*/} # drop leading path components
     file=${file%.sh} # drop trailing '.sh'
-    RESULT_FILES="$RESULT_FILES $NOTMUCH_BUILDDIR/test/test-results/$file"
+    RESULT_FILES="$RESULT_FILES $TEST_DIRECTORY/test-results/$file"
 done
 
 echo
@@ -94,6 +102,6 @@ if [ -n "$META_FAILURE" ]; then
 fi
 
 # Clean up
-rm -rf $NOTMUCH_BUILDDIR/test/test-results
+rm -rf $TEST_DIRECTORY/test-results
 
 exit $ev
diff --git a/test/test-lib-common.sh b/test/test-lib-common.sh
index 4d14e0b3..5548f772 100644
--- a/test/test-lib-common.sh
+++ b/test/test-lib-common.sh
@@ -24,7 +24,7 @@
 #
 type die >/dev/null 2>&1 || die () { echo "$@" >&2; exit 1; }
 
-if [[ -z "$NOTMUCH_SRCDIR" ]] || [[ -z "$NOTMUCH_BUILDDIR" ]]; then
+if [[ -z "$NOTMUCH_SRCDIR" ]] || [[ -z "${NOTMUCH_TEST_INSTALLED}" && -z "$NOTMUCH_BUILDDIR" ]]; then
 	echo "internal: srcdir or builddir not set" >&2
 	exit 1
 fi
@@ -61,7 +61,9 @@ LD_LIBRARY_PATH=${TEST_DIRECTORY%/*}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
 export LD_LIBRARY_PATH
 
 # configure output
-. "$NOTMUCH_BUILDDIR/sh.config" || exit 1
+if [[ -z "${NOTMUCH_TEST_INSTALLED}" ]]; then
+   . "$NOTMUCH_BUILDDIR/sh.config" || exit 1
+fi
 
 # load OS specifics
 if [[ -e "$NOTMUCH_SRCDIR/test/test-lib-$PLATFORM.sh" ]]; then
@@ -315,7 +317,12 @@ export PATH MANPATH
 
 # Test repository
 test="tmp.$(basename "$0" .sh)"
-TMP_DIRECTORY="$TEST_DIRECTORY/$test"
+if [[ -z "${NOTMUCH_TEST_INSTALLED}" ]]; then
+    TMP_DIRECTORY="$TEST_DIRECTORY/$test"
+else
+    TMP_DIRECTORY=$(mktemp -d "${TMPDIR:-/tmp}/notmuch-$test.XXXXXX")
+fi
+
 test ! -z "$debug" || remove_tmp=$TMP_DIRECTORY
 rm -rf "$TMP_DIRECTORY" || {
 	GIT_EXIT_OK=t
diff --git a/test/test-lib-emacs.sh b/test/test-lib-emacs.sh
index ad4c4aeb..6843790b 100644
--- a/test/test-lib-emacs.sh
+++ b/test/test-lib-emacs.sh
@@ -30,6 +30,7 @@ test_require_emacs () {
 # to the message and encrypting/signing.
 emacs_deliver_message () {
     local subject body smtp_dummy_pid smtp_dummy_port
+    test_subtest_broken_for_installed
     subject="$1"
     body="$2"
     shift 2
@@ -144,6 +145,13 @@ emacs_generate_script () {
 	# Construct a little test script here for the benefit of the user,
 	# (who can easily run "run_emacs" to get the same emacs environment
 	# for investigating any failures).
+    if [ -z "${NOTMUCH_TEST_INSTALLED}" ]; then
+	find_notmuch_el='--directory "$NOTMUCH_BUILDDIR/emacs"'
+    else
+	### XXX FIXME: this should really use the installed emacs lisp files
+	find_notmuch_el='--directory "$NOTMUCH_SRCDIR/emacs"'
+    fi
+
 	cat <<EOF >"$TMP_DIRECTORY/run_emacs"
 #!/bin/sh
 export PATH=$PATH
@@ -158,12 +166,12 @@ export NOTMUCH_CONFIG=$NOTMUCH_CONFIG
 #
 # --load		Force loading of notmuch.el and test-lib.el
 
-exec ${TEST_EMACS} --quick \
-	--directory "$NOTMUCH_BUILDDIR/emacs" --load notmuch.el \
+exec ${TEST_EMACS} ${find_notmuch_el} --quick \
+	${EXTRA_DIR} --load notmuch.el \
 	--directory "$NOTMUCH_SRCDIR/test" --load test-lib.el \
 	"\$@"
 EOF
-	chmod a+x "$TMP_DIRECTORY/run_emacs"
+    chmod a+x "$TMP_DIRECTORY/run_emacs"
 }
 
 test_emacs () {
diff --git a/test/test-lib.sh b/test/test-lib.sh
index b5aa94dd..8628f6ac 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -29,8 +29,8 @@ shopt -u xpg_echo
 # Ensure NOTMUCH_SRCDIR and NOTMUCH_BUILDDIR are set.
 . $(dirname "$0")/export-dirs.sh || exit 1
 
-# It appears that people try to run tests without building...
-if [[ ! -x "$NOTMUCH_BUILDDIR/notmuch" ]]; then
+# We need either a built tree, or a promise of an installed notmuch
+if [[ -z "${NOTMUCH_TEST_INSTALLED}" && ! -x "$NOTMUCH_BUILDDIR/notmuch" ]]; then
 	echo >&2 'You do not seem to have built notmuch yet.'
 	exit 1
 fi
@@ -748,6 +748,12 @@ test_subtest_known_broken () {
 	test_subtest_known_broken_=t
 }
 
+test_subtest_broken_for_installed () {
+    if [[ -n "${NOTMUCH_TEST_INSTALLED}" ]]; then
+	test_subtest_known_broken_=t
+    fi
+}
+
 test_subtest_broken_for_root () {
    if [ "$EUID" = "0" ]; then
 	test_subtest_known_broken_=t
@@ -929,11 +935,16 @@ make_shim () {
 }
 
 notmuch_with_shim () {
-    local base_name shim_file
-    base_name="$1"
+    local base_name shim_file notmuch_cmd
+    if [[ -n "${NOTMUCH_TEST_INSTALLED}" ]]; then
+	notmuch_cmd="notmuch"
+    else
+	notmuch_cmd="notmuch-shared"
+    fi
+    base_name=$1
     shift
     shim_file="${base_name}.so"
-    LD_PRELOAD=${LD_PRELOAD:+:$LD_PRELOAD}:./${shim_file} notmuch-shared "$@"
+    LD_PRELOAD=${LD_PRELOAD:+:$LD_PRELOAD}:./${shim_file} $notmuch_cmd "$@"
 }
 
 # Creates a script that counts how much time it is executed and calls
@@ -985,7 +996,11 @@ test_init_ () {
 
 
 # Where to run the tests
-TEST_DIRECTORY=$NOTMUCH_BUILDDIR/test
+if [[ -n "${NOTMUCH_BUILDDIR}" ]]; then
+    TEST_DIRECTORY=$NOTMUCH_BUILDDIR/test
+else
+    TEST_DIRECTORY=$NOTMUCH_SRCDIR/test
+fi
 
 . "$NOTMUCH_SRCDIR/test/test-lib-common.sh" || exit 1
 
-- 
2.39.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 5/5] debian: add autopkgtests
  2023-04-09 14:26 v3 test notmuch as installed David Bremner
                   ` (3 preceding siblings ...)
  2023-04-09 14:26 ` [PATCH v3 4/5] test: support testing notmuch as installed David Bremner
@ 2023-04-09 14:26 ` David Bremner
  4 siblings, 0 replies; 10+ messages in thread
From: David Bremner @ 2023-04-09 14:26 UTC (permalink / raw)
  To: notmuch

We generate output to stderr for BROKEN tests, which are not failures,
so tell the test runner not to fail because of output on stderr.
---
 debian/tests/control | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 debian/tests/control

diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 00000000..87e00dc8
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,17 @@
+Test-command: env NOTMUCH_TEST_INSTALLED=1 TERM=dumb
+    NOTMUCH_HAVE_MAN=1 NOTMUCH_HAVE_SFSEXP=1 NOTMUCH_HAVE_XAPIAN_DB_RETRY_LOCK=1
+    NOTMUCH_HAVE_PYTHON3_CFFI=1 NOTMUCH_HAVE_PYTHON3_PYTEST=1
+    NOTMUCH_HAVE_ASAN=1 NOTMUCH_HAVE_TSAN=1
+    ./test/notmuch-test
+Restrictions: allow-stderr
+Depends: @,
+ build-essential,
+ dtach,
+ emacs-nox,
+ gdb,
+ git,
+ gnupg,
+ gpgsm,
+ libtalloc-dev,
+ man,
+ xapian-tools
-- 
2.39.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/5] test: use bash specific test for feature tests
  2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
@ 2023-04-13 12:22   ` Felipe Contreras
  2023-04-13 18:56     ` Tomi Ollila
  2023-04-13 19:24   ` Tomi Ollila
  1 sibling, 1 reply; 10+ messages in thread
From: Felipe Contreras @ 2023-04-13 12:22 UTC (permalink / raw)
  To: David Bremner; +Cc: notmuch

On Sun, Apr 9, 2023 at 9:26 AM David Bremner <david@tethera.net> wrote:
>
> It is desirable to have the tests consider these variables being
> undefined as equivalent to the feature not being present, and in
> particular for the tests not to generate errors.

This can be done easily with `[ ${FOO-0} -eq 1 ]`, or as I prefer: `[
"$FOO" = 1 ]`.

-- 
Felipe Contreras\r

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/5] test: use bash specific test for feature tests
  2023-04-13 12:22   ` Felipe Contreras
@ 2023-04-13 18:56     ` Tomi Ollila
  0 siblings, 0 replies; 10+ messages in thread
From: Tomi Ollila @ 2023-04-13 18:56 UTC (permalink / raw)
  To: Felipe Contreras, David Bremner; +Cc: notmuch

On Thu, Apr 13 2023, Felipe Contreras wrote:

> On Sun, Apr 9, 2023 at 9:26 AM David Bremner <david@tethera.net> wrote:
>>
>> It is desirable to have the tests consider these variables being
>> undefined as equivalent to the feature not being present, and in
>> particular for the tests not to generate errors.
>
> This can be done easily with `[ ${FOO-0} -eq 1 ]`, or as I prefer: `[
> "$FOO" = 1 ]`.

[ "${FOO-0}" = 1 ]

if $FOO is to have $IFS characters...

Tomi

>
> -- 
> Felipe Contreras\r

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/5] test: use bash specific test for feature tests
  2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
  2023-04-13 12:22   ` Felipe Contreras
@ 2023-04-13 19:24   ` Tomi Ollila
  2023-04-14  0:30     ` Felipe Contreras
  1 sibling, 1 reply; 10+ messages in thread
From: Tomi Ollila @ 2023-04-13 19:24 UTC (permalink / raw)
  To: David Bremner, notmuch

On Sun, Apr 09 2023, David Bremner wrote:

> It is desirable to have the tests consider these variables being
> undefined as equivalent to the feature not being present, and in
> particular for the tests not to generate errors.
>
> We know the test suite is tied to bash anyway, so this is a simple
> fix.
> ---
>  test/T060-count.sh               | 2 +-
>  test/T081-sexpr-search.sh        | 2 +-
>  test/T150-tagging.sh             | 2 +-
>  test/T160-json.sh                | 2 +-
>  test/T220-reply.sh               | 2 +-
>  test/T240-dump-restore.sh        | 2 +-
>  test/T391-python-cffi.sh         | 3 +--
>  test/T392-python-cffi-notmuch.sh | 2 +-
>  test/T520-show.sh                | 2 +-
>  test/T570-revision-tracking.sh   | 2 +-
>  test/T700-reindex.sh             | 2 +-
>  test/T800-asan.sh                | 2 +-
>  test/T810-tsan.sh                | 2 +-
>  test/T850-git.sh                 | 2 +-
>  14 files changed, 14 insertions(+), 15 deletions(-)
>
> diff --git a/test/T060-count.sh b/test/T060-count.sh
> index 48146706..4499b4cb 100755
> --- a/test/T060-count.sh
> +++ b/test/T060-count.sh
> @@ -157,7 +157,7 @@ print("4: {} messages".format(query.count_messages()))
>  EOF
>  test_expect_equal_file EXPECTED OUTPUT
>  
> -if [ $NOTMUCH_HAVE_SFSEXP -eq 1 ]; then
> +if [[ $NOTMUCH_HAVE_SFSEXP -eq 1 ]]; then

Hmm, I send reply to Felipe's email, before seeing this, so this is
followup ... which, at the end, reaches the same "conclusion" :D

anyway, while this is good progress the [[ $v -eq 1 ]] is still somewhat
fragile (using -eu shows some interesting behaviors):

the easy try: 

  $ bash -eu -c ' [[ $AAA -ne 1 ]] && echo 1 || echo 0'
  bash: line 1: AAA: unbound variable

weirder...:

  $ bash -eu -c 'a="x"; [[ $a -eq 2 ]]' 
  bash: line 1: x: unbound variable

wat, as $a is not numeric, it tries to re-eval $x ???

  $ bash -eu -c 'x=3; a="x"; [[ $a -eq 2 ]] && echo 1 || echo 0'
  0
  $ bash -eu -c 'x=2; a="x"; [[ $a -eq 2 ]] && echo 1 || echo 0' 
  1

for reference

  $ bash -eu -c 'a="2"; [[ $a -eq 2 ]] && echo 1 || echo 0'
  1


and again, w/ = instead of -eq

  $ bash -eu -c 'a="x"; [[ $a = 2 ]] && echo 1 || echo 0'
  0

and -- modified the first AAA case above:

  $ bash -eu -c ' AAA=b; [[ ${AAA-} = 1 ]] && echo 1 || echo 0'
  0

hmm, when using [[ ]] I recall == and != were to used... uh, see 
bash manual about the pattern matching and such... tried also
with (( ... )) (documenter before [[ ]] in bash manual page 
but now it fails even heavier..:

  $ bash -eu -c 'XXX="a"; (( ${XXX-} == 2 )) && echo 1 || echo 0'
  bash: line 1: a: unbound variable

  $ bash -eu -c 'a=2; XXX="a"; (( ${XXX-} == 2 )) && echo 1 || echo 0' 
  1

I would just use [ "${VAR-}" = 1 ] in shell script code (or barely
[[ ${VAR-0} == 1 ]] if desired not to have ""s around variables...but...)

... using [ "${VAR-}" = 1 ] is also good in a sense that someone may
use it as an example to write shell scripts with #!/bin/sh as a
hashbang -- and it works fine on Fedora since there /bin/sh is bash,
but would fail on Debian since there /bin/sh is dash.

HTH ;D

Tomi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 1/5] test: use bash specific test for feature tests
  2023-04-13 19:24   ` Tomi Ollila
@ 2023-04-14  0:30     ` Felipe Contreras
  0 siblings, 0 replies; 10+ messages in thread
From: Felipe Contreras @ 2023-04-14  0:30 UTC (permalink / raw)
  To: Tomi Ollila; +Cc: notmuch

On Thu, Apr 13, 2023 at 2:25 PM Tomi Ollila <tomi.ollila@iki.fi> wrote:
> On Sun, Apr 09 2023, David Bremner wrote:

> I would just use [ "${VAR-}" = 1 ] in shell script code (or barely
> [[ ${VAR-0} == 1 ]] if desired not to have ""s around variables...but...)
>
> ... using [ "${VAR-}" = 1 ] is also good in a sense that someone may
> use it as an example to write shell scripts with #!/bin/sh as a
> hashbang -- and it works fine on Fedora since there /bin/sh is bash,
> but would fail on Debian since there /bin/sh is dash.

Yeah, the world of shells is a universe, but long story short: you can
just use the above and it should work on all shells and all
configurations.

You can just do "$VAR", *but* it wouldn't work with `set -u`. I never
use -u, so I don't care, but if you do care, do "${VAR-}".

Cheers.

-- 
Felipe Contreras\r

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-04-14  0:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-09 14:26 v3 test notmuch as installed David Bremner
2023-04-09 14:26 ` [PATCH v3 1/5] test: use bash specific test for feature tests David Bremner
2023-04-13 12:22   ` Felipe Contreras
2023-04-13 18:56     ` Tomi Ollila
2023-04-13 19:24   ` Tomi Ollila
2023-04-14  0:30     ` Felipe Contreras
2023-04-09 14:26 ` [PATCH v3 2/5] test: check for empty/missing files in test_expect_equal_message_body David Bremner
2023-04-09 14:26 ` [PATCH v3 3/5] test: Guess a value for NOTMUCH_PYTHON David Bremner
2023-04-09 14:26 ` [PATCH v3 4/5] test: support testing notmuch as installed David Bremner
2023-04-09 14:26 ` [PATCH v3 5/5] debian: add autopkgtests David Bremner

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).