ci: annotate leaks and stop a leak-sanitizer script at its first failure
A leak is only discovered once, at the end of a whole script, well
after every test has already reported ok, and it gets no annotation at
all, so a leak-sanitizer job's only visible failure is:
Process completed with exit code 1.
Give a leak its own annotation, naming the script it turned up in, the
exact line isn't known, only which script:
memory leak logged in t1060 (t1060-object-corruption.sh)
Put the sanitizer report in a log group next to it, so it stays
visible.
Once a script has one leak, it keeps running: the sanitizer log
directory is never cleared between tests, so every later test in the
same script sees the same leftover log entries and also reports "not
ok", burying the one real failure in copies of itself. Stop a
leak-sanitizer script at its first failure with --immediate instead.
A failing test already gets its own annotation once its script
finishes, but --immediate exits as soon as that test fails, before
reaching the code that writes it. Write the annotation first, so
turning on --immediate here does not silently drop it.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
parent
a018953688
commit
cc97a912eb
|
|
@ -382,6 +382,7 @@ linux-leaks|linux-reftable-leaks)
|
|||
export NO_CVS_TESTS=LetsSaveSomeTime
|
||||
export NO_SVN_TESTS=LetsSaveSomeTime
|
||||
export NO_P4_TESTS=LetsSaveSomeTime
|
||||
GIT_TEST_OPTS="$GIT_TEST_OPTS --immediate"
|
||||
;;
|
||||
linux-asan-ubsan)
|
||||
export SANITIZE=address,undefined
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ start_test_output () {
|
|||
github_markup_output="${GIT_TEST_TEE_OUTPUT_FILE%.out}.markup"
|
||||
>$github_markup_output
|
||||
GIT_TEST_TEE_OFFSET=0
|
||||
github_markup_script_name=${0##*/}
|
||||
}
|
||||
|
||||
# No need to override start_test_case_output
|
||||
|
|
@ -53,4 +54,13 @@ finalize_test_case_output () {
|
|||
echo >>$github_markup_output "::endgroup::"
|
||||
}
|
||||
|
||||
finalize_test_leak_output () {
|
||||
echo >>$github_markup_output \
|
||||
"::error::memory leak logged in $this_test ($github_markup_script_name)"
|
||||
|
||||
echo >>$github_markup_output "::group::leak: $this_test.$test_count"
|
||||
cat "$TEST_RESULTS_SAN_FILE".* >>$github_markup_output
|
||||
echo >>$github_markup_output "::endgroup::"
|
||||
}
|
||||
|
||||
# No need to override finalize_test_output
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ mark_option_requires_arg () {
|
|||
start_test_output () { :; }
|
||||
start_test_case_output () { :; }
|
||||
finalize_test_case_output () { :; }
|
||||
finalize_test_leak_output () { :; }
|
||||
finalize_test_output () { :; }
|
||||
|
||||
parse_option () {
|
||||
|
|
@ -822,6 +823,9 @@ test_failure_ () {
|
|||
say_color error "not ok $test_count - ${pfx:+$pfx }$1"
|
||||
shift
|
||||
printf '%s\n' "$*" | sed -e 's/^/# /'
|
||||
# Write the annotation before either --immediate exit path below,
|
||||
# both of which call exit and would otherwise skip it.
|
||||
finalize_test_case_output failure "$failure_label" "$@"
|
||||
if test -n "$immediate"
|
||||
then
|
||||
say_color error "1..$test_count"
|
||||
|
|
@ -835,7 +839,6 @@ test_failure_ () {
|
|||
check_test_results_san_file_ "$test_failure"
|
||||
_error_exit
|
||||
fi
|
||||
finalize_test_case_output failure "$failure_label" "$@"
|
||||
}
|
||||
|
||||
test_known_broken_ok_ () {
|
||||
|
|
@ -1218,6 +1221,7 @@ check_test_results_san_file_ () {
|
|||
return
|
||||
fi &&
|
||||
say_color >&4 error "$(cat "$TEST_RESULTS_SAN_FILE".*)" &&
|
||||
finalize_test_leak_output &&
|
||||
|
||||
if test "$test_failure" = 0
|
||||
then
|
||||
|
|
|
|||
Loading…
Reference in New Issue