unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] test: prepare test-lib.sh for possible test system debug session
@ 2014-09-21 18:06 Tomi Ollila
  2015-01-19  7:38 ` David Bremner
  0 siblings, 1 reply; 2+ messages in thread
From: Tomi Ollila @ 2014-09-21 18:06 UTC (permalink / raw)
  To: notmuch; +Cc: tomi.ollila

When something in tests fails one possibility to test is to run
the test script as `bash -x TXXX-testname.sh`. As stderr (fd 2) was
redirected to separate file during test execution also this set -x
(xtrace) output would also go there.
test-lib.sh saves the stderr to fd 7 from where it can be restored,
and bash has BASH_XTRACEFD variable, which is now given the same value
7, making bash to output all xtrade information (consistently) there.

This lib file used to save fd's 1 & 2 to 6 & 7 (respectively) in
test_begin_subtest(), but as those needs to be set *before* XTRACEFD
variable is set those are now saved at the beginning of the lib (once).
This is safe and simple thing to do.
To make xtrace output more verbose PS4 variable was set to contain the
source file, line number and if execution is in function, that function
name. Setting this variable has no effect when not xtracing.

As it is known that fd 6 is redirected stdout, printing status can now
use that fd, instead of saving stdout to fd 5 and use it.
---
 test/test-lib-common.sh |  2 +-
 test/test-lib.sh        | 21 ++++++++++++---------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/test/test-lib-common.sh b/test/test-lib-common.sh
index 4903038dd9ce..f99ed11162ad 100644
--- a/test/test-lib-common.sh
+++ b/test/test-lib-common.sh
@@ -122,7 +122,7 @@ esac
 test ! -z "$debug" || remove_tmp=$TMP_DIRECTORY
 rm -fr "$test" || {
 	GIT_EXIT_OK=t
-	echo >&5 "FATAL: Cannot prepare test area"
+	echo >&6 "FATAL: Cannot prepare test area"
 	exit 1
 }
 
diff --git a/test/test-lib.sh b/test/test-lib.sh
index b9b8fe8ca6ad..4c76fbb52c24 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -45,6 +45,12 @@ done,*)
 	;;
 esac
 
+# Save STDOUT to fd 6 and STDERR to fd 7.
+exec 6>&1 7>&2
+# Make xtrace debugging (when used) use redirected STDERR, with verbose lead:
+BASH_XTRACEFD=7
+export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
+
 # Keep the original TERM for say_color and test_emacs
 ORIGINAL_TERM=$TERM
 
@@ -204,8 +210,6 @@ then
 	print_test_description
 fi
 
-exec 5>&1
-
 test_failure=0
 test_count=0
 test_fixed=0
@@ -225,7 +229,7 @@ die () {
 	then
 		exit $code
 	else
-		exec >&5
+		exec >&6
 		say_color error '%-6s' FATAL
 		echo " $test_subtest_name"
 		echo
@@ -236,7 +240,7 @@ die () {
 
 die_signal () {
 	_die_common
-	echo >&5 "FATAL: $0: interrupted by signal" $((code - 128))
+	echo >&6 "FATAL: $0: interrupted by signal" $((code - 128))
 	exit $code
 }
 
@@ -544,11 +548,10 @@ test_begin_subtest ()
     fi
     test_subtest_name="$1"
     test_reset_state_
-    # Remember stdout and stderr file descriptors and redirect test
-    # output to the previously prepared file descriptors 3 and 4 (see
-    # below)
+    # Redirect test output to the previously prepared file descriptors
+    # 3 and 4 (see below)
     if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
-    exec 6>&1 7>&2 >&3 2>&4
+    exec >&3 2>&4
     inside_subtest=t
 }
 
@@ -938,7 +941,7 @@ test_expect_code () {
 test_external () {
 	test "$#" = 4 && { prereq=$1; shift; } || prereq=
 	test "$#" = 3 ||
-	error >&5 "bug in the test script: not 3 or 4 parameters to test_external"
+	error >&6 "bug in the test script: not 3 or 4 parameters to test_external"
 	test_subtest_name="$1"
 	shift
 	test_reset_state_
-- 
2.0.0

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

* Re: [PATCH] test: prepare test-lib.sh for possible test system debug session
  2014-09-21 18:06 [PATCH] test: prepare test-lib.sh for possible test system debug session Tomi Ollila
@ 2015-01-19  7:38 ` David Bremner
  0 siblings, 0 replies; 2+ messages in thread
From: David Bremner @ 2015-01-19  7:38 UTC (permalink / raw)
  To: Tomi Ollila, notmuch; +Cc: tomi.ollila

Tomi Ollila <tomi.ollila@iki.fi> writes:

> When something in tests fails one possibility to test is to run
> the test script as `bash -x TXXX-testname.sh`. As stderr (fd 2) was
> redirected to separate file during test execution also this set -x
> (xtrace) output would also go there.
> test-lib.sh saves the stderr to fd 7 from where it can be restored,
> and bash has BASH_XTRACEFD variable, which is now given the same value
> 7, making bash to output all xtrade information (consistently)

pushed.

d

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

end of thread, other threads:[~2015-01-19  7:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-21 18:06 [PATCH] test: prepare test-lib.sh for possible test system debug session Tomi Ollila
2015-01-19  7:38 ` 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).