[PATCH] test: Make the emacsclient binary user-configurable

Tomi Ollila tomi.ollila at iki.fi
Wed Nov 28 00:05:12 PST 2012


On Wed, Nov 28 2012, Austin Clements <amdragon at MIT.EDU> wrote:

> And require that if TEST_EMACS is specified, so is TEST_EMACSCLIENT.
>
> Previously, the test framework always used "emacsclient", even if the
> Emacs in use was overridden by TEST_EMACS.  This causes problems if
> both Emacs 23 and Emacs 24 are installed, the Emacs 23 emacsclient is
> the system default, but TEST_EMACS is set to emacs24.  Specifically,
> with an Emacs 24 server and an Emacs 23 client, emacs tests that run
> very quickly may produce no output from emacsclient, causing the test
> to fail.
>
> The Emacs server uses a very simple line-oriented protocol in which
> the client sends a request to evaluate an expression and the server
> sends a request to print the result of evaluation.  Prior to Emacs bzr
> commit 107565 on March 11th, 2012 (released in Emacs 24.1), if
> multiple commands were sent to the emacsclient between when it sent
> the evaluation command and when it entered its receive loop, it would
> only process the first response command, ignoring the rest of the
> received buffer.  This wasn't a problem with the Emacs 23 server
> because it sent only the command to print the evaluation result.
> However, the Emacs 24 server first sends an unprompted command
> specifying the PID of the Emacs server, then processes the evaluation
> request, then sends the command to print the result.  If the
> evaluation is fast enough, it can send both of these commands before
> emacsclient enters the receive loop.  Hence, if an Emacs 24 server is
> used with an Emacs 23 emacsclient, it may miss the response printing
> command, ultimately causing intermittent notmuch test failures.
> ---

Looks good to me (especially commit message)

I guess buildbot configuration needs to be fixed to set
TEST_EMACSCLIENT too (now that it is possible as it probably
sets TEST_EMACS already...)

Tomi


>  test/README      |   10 +++++-----
>  test/test-lib.sh |   12 +++++++++---
>  2 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/test/README b/test/README
> index 6dc3034..81c232d 100644
> --- a/test/README
> +++ b/test/README
> @@ -69,12 +69,12 @@ can be specified as follows:
>  
>  	make test OPTIONS="--verbose"
>  
> -You can choose an emacs binary to run the tests in one of the
> -following ways.
> +You can choose an emacs binary (and corresponding emacsclient) to run
> +the tests in one of the following ways.
>  
> -	TEST_EMACS=my-special-emacs make test
> -	TEST_EMACS=my-special-emacs ./emacs
> -	make test TEST_EMACS=my-special-emacs
> +	TEST_EMACS=my-special-emacs TEST_EMACSCLIENT=my-emacsclient make test
> +	TEST_EMACS=my-special-emacs TEST_EMACSCLIENT=my-emacsclient ./emacs
> +	make test TEST_EMACS=my-special-emacs TEST_EMACSCLIENT=my-emacsclient
>  
>  Skipping Tests
>  --------------
> diff --git a/test/test-lib.sh b/test/test-lib.sh
> index 467b83c..e092231 100644
> --- a/test/test-lib.sh
> +++ b/test/test-lib.sh
> @@ -49,7 +49,13 @@ TZ=UTC
>  TERM=dumb
>  export LANG LC_ALL PAGER TERM TZ
>  GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
> +if [[ ( -n "$TEST_EMACS" && -z "$TEST_EMACSCLIENT" ) || \
> +      ( -z "$TEST_EMACS" && -n "$TEST_EMACSCLIENT" ) ]]; then
> +    echo "error: must specify both or neither of TEST_EMACS and TEST_EMACSCLIENT" >&2
> +    exit 1
> +fi
>  TEST_EMACS=${TEST_EMACS:-${EMACS:-emacs}}
> +TEST_EMACSCLIENT=${TEST_EMACSCLIENT:-emacsclient}
>  
>  # Protect ourselves from common misconfiguration to export
>  # CDPATH into the environment
> @@ -969,7 +975,7 @@ test_emacs () {
>  	missing_dependencies=
>  	test_require_external_prereq dtach || missing_dependencies=1
>  	test_require_external_prereq emacs || missing_dependencies=1
> -	test_require_external_prereq emacsclient || missing_dependencies=1
> +	test_require_external_prereq ${TEST_EMACSCLIENT} || missing_dependencies=1
>  	test -z "$missing_dependencies" || return
>  
>  	if [ -z "$EMACS_SERVER" ]; then
> @@ -1005,7 +1011,7 @@ test_emacs () {
>  	rm -f OUTPUT
>  	touch OUTPUT
>  
> -	emacsclient --socket-name="$EMACS_SERVER" --eval "(progn $@)"
> +	${TEST_EMACSCLIENT} --socket-name="$EMACS_SERVER" --eval "(progn $@)"
>  }
>  
>  test_python() {
> @@ -1158,7 +1164,7 @@ rm -f y
>  # declare prerequisites for external binaries used in tests
>  test_declare_external_prereq dtach
>  test_declare_external_prereq emacs
> -test_declare_external_prereq emacsclient
> +test_declare_external_prereq ${TEST_EMACSCLIENT}
>  test_declare_external_prereq gdb
>  test_declare_external_prereq gpg
>  test_declare_external_prereq python
> -- 
> 1.7.10.4
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list