X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=tests%2Futils%2Ftap-driver.sh;h=1e61e1f2870746a8d3aa11f6903f7e8a624235a7;hb=2a69bf1437eb7e81979a1410b1a66a960b52caeb;hp=65037ab65f5dfb03d729704d0132217b66091053;hpb=202486fa276e34e4c81d560bfd8897824c51af8c;p=lttng-tools.git diff --git a/tests/utils/tap-driver.sh b/tests/utils/tap-driver.sh index 65037ab65..1e61e1f28 100755 --- a/tests/utils/tap-driver.sh +++ b/tests/utils/tap-driver.sh @@ -117,6 +117,8 @@ else init_colors='' fi +TIME_SCRIPT="$(realpath -e -- "$(dirname "$0")")/tap/clock" + # :; is there to work around a bug in bash 3.2 (and earlier) which # does not always set '$?' properly on redirection failure. # See the Autoconf manual for more details. @@ -142,7 +144,13 @@ fi else exec 2>&3 fi - "$@" + # Since stderr and stdout may go to the same file and the script + # may run in situations with different types of buffering, enforce + # line buffering for both FDs. This helps to prevent interleave between + # the outputs in the resulting file for half written lines, eg. + # ok 93 - Tes# PERROR - xxxx + # t some function + stdbuf -eL -oL -- "$@" echo $? ) | LC_ALL=C ${AM_TAP_AWK-awk} \ -v me="$me" \ @@ -154,6 +162,7 @@ fi -v ignore_exit="$ignore_exit" \ -v comments="$comments" \ -v diag_string="$diag_string" \ + -v time_script="${TIME_SCRIPT}" \ ' # TODO: the usages of "cat >&3" below could be optimized when using # GNU awk, and/on on systems that supports /dev/fd/. @@ -211,6 +220,16 @@ function copy_in_global_log() return 0 } +function gettime_ns( r) +{ + r = "" + if (time_script | getline r) { + r = r + } + close(time_script) + return sprintf("%f", r) +} + function get_global_test_result() { if ("ERROR" in test_results_seen) @@ -482,6 +501,7 @@ function write_test_results() print ":global-test-result: " get_global_test_result() > trs_file print ":recheck: " yn(must_recheck()) > trs_file print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file + print ":time-taken: " sprintf("%f", gettime_ns() - TIME_START) > trs_file for (i = 0; i < test_results_index; i += 1) print ":test-result: " test_results_list[i] > trs_file close(trs_file); @@ -515,6 +535,7 @@ bailed_out = 0 # Whether a "Bail out!" directive has been seen. # it is ("early" is seen before any test result, "late" otherwise). plan_seen = NO_PLAN +TIME_START = gettime_ns(); ## --------- ## ## PARSING ## ## --------- ##