Re: [PATCH v4 4/5] test: support testing notmuch as installed

Subject: Re: [PATCH v4 4/5] test: support testing notmuch as installed

Date: Tue, 11 Jul 2023 18:39:51 +0300

To: David Bremner, notmuch@notmuchmail.org

Cc:

From: Tomi Ollila


On Sun, Jul 09 2023, David Bremner wrote:

Note: I almost commented cases where it was not ensured that variable
is defined, to notice later that those were actually defined for sure
-- so in some previous mails in this series I may have missed
same cases. 

The comments for this message may be more accurate ;D

Tomi

> 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         |  3 +++
>  test/T160-json.sh              |  2 ++
>  test/T240-dump-restore.sh      |  2 ++
>  test/T310-emacs.sh             |  2 ++
>  test/T350-crypto.sh            |  1 +
>  test/T355-smime.sh             |  2 ++
>  test/T360-symbol-hiding.sh     |  4 ++++
>  test/T390-python.sh            |  4 ++++
>  test/T391-python-cffi.sh       |  4 ++++
>  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         | 12 ++++++++++--
>  test/test-lib.sh               | 27 +++++++++++++++++++++------
>  26 files changed, 139 insertions(+), 16 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 1fbc46a2..827edc14 100755
> --- a/test/T010-help-test.sh
> +++ b/test/T010-help-test.sh
> @@ -19,6 +19,9 @@ if [ "${NOTMUCH_HAVE_MAN-0}" = "1" ]; then
>      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 f61c3f2d..318c9788 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-0}" != "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 # NOTMUCH_TEST_INSTALLED undefined / empty
>  
>  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 80939030..c3f18839 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/T355-smime.sh b/test/T355-smime.sh
> index 3bd5a17e..d2118c04 100755
> --- a/test/T355-smime.sh
> +++ b/test/T355-smime.sh
> @@ -183,6 +183,7 @@ test_begin_subtest "show PKCS#7 SignedData outputs valid JSON"
>  output=$(notmuch show --format=json id:smime-onepart-signed@protected-headers.example)
>  test_valid_json "$output"
>  
> +if [ -z "${NOTMUCH_TEST_INSTALLED-}" ]; then
>  test_begin_subtest "Verify signature on PKCS#7 SignedData message"
>  if [ "${NOTMUCH_HAVE_64BIT_TIME_T-0}" != "1" ]; then
>      test_subtest_known_broken
> @@ -194,6 +195,7 @@ test_json_nodes <<<"$output" \
>                  'expires:[0][0][0]["crypto"]["signed"]["status"][0]["expires"]=2611032858' \
>                  'fingerprint:[0][0][0]["crypto"]["signed"]["status"][0]["fingerprint"]="702BA4B157F1E2B7D16B0C6A5FFC8A7DE2057DEB"' \
>                  'status:[0][0][0]["crypto"]["signed"]["status"][0]["status"]="good"'
> +fi # NOTMUCH_TEST_INSTALLED undefined / empty
>  
>  test_begin_subtest "Verify signature on PKCS#7 SignedData message signer User ID"
>  if [ $NOTMUCH_GMIME_X509_CERT_VALIDITY -ne 1 ]; then
> diff --git a/test/T360-symbol-hiding.sh b/test/T360-symbol-hiding.sh
> index 642457bf..ff06ff69 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..21912431 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 0ef9e0d3..0059b050 100755
> --- a/test/T391-python-cffi.sh
> +++ b/test/T391-python-cffi.sh
> @@ -2,6 +2,10 @@
>  test_description="python bindings (pytest)"
>  . $(dirname "$0")/test-lib.sh || exit 1
>  
> +if [ -n "${NOTMUCH_TEST_INSTALLED-}" ]; then
> +    test_done
> +fi
> +
>  if [ "${NOTMUCH_HAVE_PYTHON3_CFFI-0}" = "0" -o "${NOTMUCH_HAVE_PYTHON3_PYTEST-0}" = "0" ]; then
>      test_done
>  fi
> diff --git a/test/T395-ruby.sh b/test/T395-ruby.sh
> index c066c842..ea9977f8 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-}" -a "${NOTMUCH_HAVE_RUBY_DEV}" = "0" ]; then

the case where NOTMUCH_HAVE_RUBY_DEV not being defined does not cause a problem?
-- or is it always defined when getting this far (i.e. test-lib.sh defining it)

>      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..40b625fe 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..8bddf3e7 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..3b6e48c4 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..3048c7c4 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..69051937 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..2334fcaf 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..a2d8ec71 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 7c28dc7c..3a26b77e 100755
> --- a/test/T800-asan.sh
> +++ b/test/T800-asan.sh
> @@ -7,6 +7,11 @@ if [ "${NOTMUCH_HAVE_ASAN-0}" != "1" ]; then
>      test_done
>  fi
>  
> +if [ -n "${LD_PRELOAD-}" ]; then

Is it problem to chain LD_PRELOADs here ? I see later in this message
there is LD_PRELOAD's concatenated with :'s (in case non-empty) ?

> +    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 a063aacf..47314a1b 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..f0374387 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}"  -a "${NOTMUCH_TEST_INSTALLED-0}" = "0" ]; then

2 spaces before -a

>  		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..f5d72e12 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-}" -a -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..0ab58fc2 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,8 +166,8 @@ 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
> diff --git a/test/test-lib.sh b/test/test-lib.sh
> index b5aa94dd..8452fba2 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-}" -a ! -x  "$NOTMUCH_BUILDDIR/notmuch" ]; then

2 spaces after -x

>  	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 "$@"

hmm, should the "chaining" be done on other order (i.e. the shim_file 
before anything if there... (that could make the case where there is
value in LD_PRELOAD to work (commented above))

>  }
>  
>  # 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.40.1

_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: