Merge branch 'js/ci-github-workflow-markup'
Update the GitHub workflow support to make it quicker to get to the failing test. * js/ci-github-workflow-markup: ci: call `finalize_test_case_output` a little later ci(github): mention where the full logs can be found ci: use `--github-workflow-markup` in the GitHub workflow ci(github): avoid printing test case preamble twice ci(github): skip the logs of the successful test cases ci: optionally mark up output in the GitHub workflow ci/run-build-and-tests: add some structure to the GitHub workflow output ci: make it easier to find failed tests' logs in the GitHub workflow ci/run-build-and-tests: take a more high-level view test(junit): avoid line feeds in XML attributes tests: refactor --write-junit-xml code ci: fix code style
This commit is contained in:
128
t/test-lib.sh
128
t/test-lib.sh
@ -137,6 +137,12 @@ mark_option_requires_arg () {
|
||||
store_arg_to=$2
|
||||
}
|
||||
|
||||
# These functions can be overridden e.g. to output JUnit XML
|
||||
start_test_output () { :; }
|
||||
start_test_case_output () { :; }
|
||||
finalize_test_case_output () { :; }
|
||||
finalize_test_output () { :; }
|
||||
|
||||
parse_option () {
|
||||
local opt="$1"
|
||||
|
||||
@ -196,7 +202,10 @@ parse_option () {
|
||||
tee=t
|
||||
;;
|
||||
--write-junit-xml)
|
||||
write_junit_xml=t
|
||||
. "$TEST_DIRECTORY/test-lib-junit.sh"
|
||||
;;
|
||||
--github-workflow-markup)
|
||||
. "$TEST_DIRECTORY/test-lib-github-workflow-markup.sh"
|
||||
;;
|
||||
--stress)
|
||||
stress=t ;;
|
||||
@ -664,7 +673,7 @@ exec 6<&0
|
||||
exec 7>&2
|
||||
|
||||
_error_exit () {
|
||||
finalize_junit_xml
|
||||
finalize_test_output
|
||||
GIT_EXIT_OK=t
|
||||
exit 1
|
||||
}
|
||||
@ -774,35 +783,13 @@ trap '{ code=$?; set +x; } 2>/dev/null; exit $code' INT TERM HUP
|
||||
# the test_expect_* functions instead.
|
||||
|
||||
test_ok_ () {
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
write_junit_xml_testcase "$*"
|
||||
fi
|
||||
test_success=$(($test_success + 1))
|
||||
say_color "" "ok $test_count - $@"
|
||||
finalize_test_case_output ok "$@"
|
||||
}
|
||||
|
||||
test_failure_ () {
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
junit_insert="<failure message=\"not ok $test_count -"
|
||||
junit_insert="$junit_insert $(xml_attr_encode "$1")\">"
|
||||
junit_insert="$junit_insert $(xml_attr_encode \
|
||||
"$(if test -n "$GIT_TEST_TEE_OUTPUT_FILE"
|
||||
then
|
||||
test-tool path-utils skip-n-bytes \
|
||||
"$GIT_TEST_TEE_OUTPUT_FILE" $GIT_TEST_TEE_OFFSET
|
||||
else
|
||||
printf '%s\n' "$@" | sed 1d
|
||||
fi)")"
|
||||
junit_insert="$junit_insert</failure>"
|
||||
if test -n "$GIT_TEST_TEE_OUTPUT_FILE"
|
||||
then
|
||||
junit_insert="$junit_insert<system-err>$(xml_attr_encode \
|
||||
"$(cat "$GIT_TEST_TEE_OUTPUT_FILE")")</system-err>"
|
||||
fi
|
||||
write_junit_xml_testcase "$1" " $junit_insert"
|
||||
fi
|
||||
failure_label=$1
|
||||
test_failure=$(($test_failure + 1))
|
||||
say_color error "not ok $test_count - $1"
|
||||
shift
|
||||
@ -812,24 +799,19 @@ test_failure_ () {
|
||||
say_color error "1..$test_count"
|
||||
_error_exit
|
||||
fi
|
||||
finalize_test_case_output failure "$failure_label" "$@"
|
||||
}
|
||||
|
||||
test_known_broken_ok_ () {
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
write_junit_xml_testcase "$* (breakage fixed)"
|
||||
fi
|
||||
test_fixed=$(($test_fixed+1))
|
||||
say_color error "ok $test_count - $@ # TODO known breakage vanished"
|
||||
finalize_test_case_output fixed "$@"
|
||||
}
|
||||
|
||||
test_known_broken_failure_ () {
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
write_junit_xml_testcase "$* (known breakage)"
|
||||
fi
|
||||
test_broken=$(($test_broken+1))
|
||||
say_color warn "not ok $test_count - $@ # TODO known breakage"
|
||||
finalize_test_case_output broken "$@"
|
||||
}
|
||||
|
||||
test_debug () {
|
||||
@ -1104,10 +1086,7 @@ test_start_ () {
|
||||
test_count=$(($test_count+1))
|
||||
maybe_setup_verbose
|
||||
maybe_setup_valgrind
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
junit_start=$(test-tool date getnanos)
|
||||
fi
|
||||
start_test_case_output "$@"
|
||||
}
|
||||
|
||||
test_finish_ () {
|
||||
@ -1158,15 +1137,10 @@ test_skip () {
|
||||
|
||||
case "$to_skip" in
|
||||
t)
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
message="$(xml_attr_encode "$skipped_reason")"
|
||||
write_junit_xml_testcase "$1" \
|
||||
" <skipped message=\"$message\" />"
|
||||
fi
|
||||
|
||||
say_color skip "ok $test_count # skip $1 ($skipped_reason)"
|
||||
: true
|
||||
finalize_test_case_output skip "$@"
|
||||
;;
|
||||
*)
|
||||
false
|
||||
@ -1179,53 +1153,6 @@ test_at_end_hook_ () {
|
||||
:
|
||||
}
|
||||
|
||||
write_junit_xml () {
|
||||
case "$1" in
|
||||
--truncate)
|
||||
>"$junit_xml_path"
|
||||
junit_have_testcase=
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
printf '%s\n' "$@" >>"$junit_xml_path"
|
||||
}
|
||||
|
||||
xml_attr_encode () {
|
||||
printf '%s\n' "$@" | test-tool xml-encode
|
||||
}
|
||||
|
||||
write_junit_xml_testcase () {
|
||||
junit_attrs="name=\"$(xml_attr_encode "$this_test.$test_count $1")\""
|
||||
shift
|
||||
junit_attrs="$junit_attrs classname=\"$this_test\""
|
||||
junit_attrs="$junit_attrs time=\"$(test-tool \
|
||||
date getnanos $junit_start)\""
|
||||
write_junit_xml "$(printf '%s\n' \
|
||||
" <testcase $junit_attrs>" "$@" " </testcase>")"
|
||||
junit_have_testcase=t
|
||||
}
|
||||
|
||||
finalize_junit_xml () {
|
||||
if test -n "$write_junit_xml" && test -n "$junit_xml_path"
|
||||
then
|
||||
test -n "$junit_have_testcase" || {
|
||||
junit_start=$(test-tool date getnanos)
|
||||
write_junit_xml_testcase "all tests skipped"
|
||||
}
|
||||
|
||||
# adjust the overall time
|
||||
junit_time=$(test-tool date getnanos $junit_suite_start)
|
||||
sed -e "s/\(<testsuite.*\) time=\"[^\"]*\"/\1/" \
|
||||
-e "s/<testsuite [^>]*/& time=\"$junit_time\"/" \
|
||||
-e '/^ *<\/testsuite/d' \
|
||||
<"$junit_xml_path" >"$junit_xml_path.new"
|
||||
mv "$junit_xml_path.new" "$junit_xml_path"
|
||||
|
||||
write_junit_xml " </testsuite>" "</testsuites>"
|
||||
write_junit_xml=
|
||||
fi
|
||||
}
|
||||
|
||||
test_atexit_cleanup=:
|
||||
test_atexit_handler () {
|
||||
# In a succeeding test script 'test_atexit_handler' is invoked
|
||||
@ -1248,7 +1175,7 @@ test_done () {
|
||||
# removed, so the commands can access pidfiles and socket files.
|
||||
test_atexit_handler
|
||||
|
||||
finalize_junit_xml
|
||||
finalize_test_output
|
||||
|
||||
if test -z "$HARNESS_ACTIVE"
|
||||
then
|
||||
@ -1539,22 +1466,7 @@ fi
|
||||
# in subprocesses like git equals our $PWD (for pathname comparisons).
|
||||
cd -P "$TRASH_DIRECTORY" || exit 1
|
||||
|
||||
if test -n "$write_junit_xml"
|
||||
then
|
||||
junit_xml_dir="$TEST_OUTPUT_DIRECTORY/out"
|
||||
mkdir -p "$junit_xml_dir"
|
||||
junit_xml_base=${0##*/}
|
||||
junit_xml_path="$junit_xml_dir/TEST-${junit_xml_base%.sh}.xml"
|
||||
junit_attrs="name=\"${junit_xml_base%.sh}\""
|
||||
junit_attrs="$junit_attrs timestamp=\"$(TZ=UTC \
|
||||
date +%Y-%m-%dT%H:%M:%S)\""
|
||||
write_junit_xml --truncate "<testsuites>" " <testsuite $junit_attrs>"
|
||||
junit_suite_start=$(test-tool date getnanos)
|
||||
if test -n "$GIT_TEST_TEE_OUTPUT_FILE"
|
||||
then
|
||||
GIT_TEST_TEE_OFFSET=0
|
||||
fi
|
||||
fi
|
||||
start_test_output "$0"
|
||||
|
||||
# Convenience
|
||||
# A regexp to match 5 and 35 hexdigits
|
||||
|
Reference in New Issue
Block a user