From: Michal Nowak Date: Mon, 22 Jun 2020 17:55:40 +0000 (+0200) Subject: Check tests for core files regardless of test status X-Git-Tag: v9.17.4~41^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1b13123c453da029815a8bcb860448f71e1e595d;p=thirdparty%2Fbind9.git Check tests for core files regardless of test status Failed test should be checked for core files et al. and have backtrace generated. --- diff --git a/bin/tests/system/run.sh.in b/bin/tests/system/run.sh.in index f927bed6d59..cff35deaaa5 100644 --- a/bin/tests/system/run.sh.in +++ b/bin/tests/system/run.sh.in @@ -250,66 +250,60 @@ get_core_dumps() { find "$systest/" \( -name 'core*' -or -name '*.core' \) ! -name '*.gz' ! -name '*.txt' | sort } -if [ $status != 0 ]; then +core_dumps=$(get_core_dumps | tr '\n' ' ') +assertion_failures=$(find "$systest/" -name named.run -print0 | xargs -0 grep "assertion failure" | wc -l) +sanitizer_summaries=$(find "$systest/" -name 'tsan.*' | wc -l) +if [ -n "$core_dumps" ]; then + status=1 + echoinfo "I:$systest:Core dump(s) found: $core_dumps" + get_core_dumps | while read -r coredump; do + export SYSTESTDIR="$systest" + echoinfo "D:$systest:backtrace from $coredump:" + echoinfo "D:$systest:--------------------------------------------------------------------------------" + binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s/Core was generated by \`//;s/ .*'.$//p;") + "${top_builddir}/libtool" --mode=execute gdb \ + -batch \ + -ex bt \ + -core="$coredump" \ + -- \ + "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d + echoinfo "D:$systest:--------------------------------------------------------------------------------" + coredump_backtrace=$(basename "${coredump}")-backtrace.txt + echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace" + "${top_builddir}/libtool" --mode=execute gdb \ + -batch \ + -command=run.gdb \ + -core="$coredump" \ + -- \ + "$binary" > "$coredump_backtrace" 2>&1 + echoinfo "D:$systest:core dump $coredump archived as $coredump.gz" + gzip -1 "${coredump}" + done +elif [ "$assertion_failures" -ne 0 ]; then + status=1 + SYSTESTDIR="$systest" + echoinfo "I:$systest:$assertion_failures assertion failure(s) found" + find "$systest/" -name 'tsan.*' -print0 | xargs -0 grep "SUMMARY: " | sort -u | cat_d +elif [ "$sanitizer_summaries" -ne 0 ]; then + status=1 + echoinfo "I:$systest:$sanitizer_summaries sanitizer report(s) found" +fi + +if [ $status -ne 0 ]; then echofail "R:$systest:FAIL" - # Do not clean up - we need the evidence. else - core_dumps=$(get_core_dumps | tr '\n' ' ') - assertion_failures=$(find "$systest/" -name named.run -print0 | xargs -0 grep "assertion failure" | wc -l) - sanitizer_summaries=$(find "$systest/" -name 'tsan.*' | wc -l) - if [ -n "$core_dumps" ]; then - status=1 - echoinfo "I:$systest:Test claims success despite crashes: $core_dumps" - echofail "R:$systest:FAIL" - # Do not clean up - we need the evidence. - get_core_dumps | while read -r coredump; do - export SYSTESTDIR="$systest" - echoinfo "D:$systest:backtrace from $coredump:" - echoinfo "D:$systest:--------------------------------------------------------------------------------" - binary=$(gdb --batch --core="$coredump" 2>/dev/null | sed -ne "s/Core was generated by \`//;s/ .*'.$//p;") - "${top_builddir}/libtool" --mode=execute gdb \ - -batch \ - -ex bt \ - -core="$coredump" \ - -- \ - "$binary" 2>/dev/null | sed -n '/^Core was generated by/,$p' | cat_d - echoinfo "D:$systest:--------------------------------------------------------------------------------" - coredump_backtrace=$(basename "${coredump}")-backtrace.txt - echoinfo "D:$systest:full backtrace from $coredump saved in $coredump_backtrace" - "${top_builddir}/libtool" --mode=execute gdb \ - -batch \ - -command=run.gdb \ - -core="$coredump" \ - -- \ - "$binary" > "$coredump_backtrace" 2>&1 - echoinfo "D:$systest:core dump $coredump archived as $coredump.gz" - gzip -1 "${coredump}" - done - elif [ "$assertion_failures" -ne 0 ]; then - status=1 - SYSTESTDIR="$systest" - echoinfo "I:$systest:Test claims success despite $assertion_failures assertion failure(s)" - find "$systest/" -name 'tsan.*' -print0 | xargs -0 grep "SUMMARY: " | sort -u | cat_d - echofail "R:$systest:FAIL" - # Do not clean up - we need the evidence. - elif [ "$sanitizer_summaries" -ne 0 ]; then - status=1 - echoinfo "I:$systest:Test claims success despite $sanitizer_summaries sanitizer reports(s)" - echofail "R:$systest:FAIL" - else - echopass "R:$systest:PASS" - if $clean; then - ( cd "${systest}" && $SHELL clean.sh "$@" ) - if [ "${srcdir}" != "${builddir}" ]; then - rm -rf "./${systest}" ## FIXME (this also removes compiled binaries) - fi - if test -d ${srcdir}/../../../.git; then - git status -su --ignored "${systest}" 2>/dev/null | \ - sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \ - -e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \ - -e 's|^!! \(.*/named.memstats\)$|I:file \1 not removed|p' - fi - fi + echopass "R:$systest:PASS" + if $clean; then + ( cd "${systest}" && $SHELL clean.sh "$@" ) + if [ "${srcdir}" != "${builddir}" ]; then + rm -rf "./${systest}" ## FIXME (this also removes compiled binaries) + fi + if test -d ${srcdir}/../../../.git; then + git status -su --ignored "${systest}" 2>/dev/null | \ + sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \ + -e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \ + -e 's|^!! \(.*/named.memstats\)$|I:file \1 not removed|p' + fi fi fi