]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Check tests for core files regardless of test status
authorMichal Nowak <mnowak@isc.org>
Mon, 22 Jun 2020 17:55:40 +0000 (19:55 +0200)
committerMichal Nowak <mnowak@isc.org>
Mon, 20 Jul 2020 15:09:20 +0000 (17:09 +0200)
Failed test should be checked for core files et al. and have
backtrace generated.

bin/tests/system/run.sh

index da781b59cedb44ee41a545d1d7980c68e267d0bd..a6579e0d98829dc9c7f94751f4311bcad79aeb5f 100755 (executable)
@@ -194,57 +194,51 @@ 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
+    echoinfo "I:$systest:Core dump(s) found: $core_dumps"
+    echofail "R:$systest:FAIL"
+    get_core_dumps | while read -r coredump; do
+        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}/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}/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
+    echoinfo "I:$systest:$assertion_failures assertion failure(s) found"
+    find "$systest/" -name 'tsan.*' -print0 | xargs -0 grep "SUMMARY: " | sort -u | cat_d
+    echofail "R:$systest:FAIL"
+elif [ "$sanitizer_summaries" -ne 0 ]; then
+    echoinfo "I:$systest:$sanitizer_summaries sanitizer report(s) found"
     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
-        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
-               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}/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}/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
-        echoinfo "I:$systest:Test claims success despite $assertion_failures assertion failure(s)"
-        echofail "R:$systest:FAIL"
-        # Do not clean up - we need the evidence.
-    elif [ "$sanitizer_summaries" -ne 0 ]; then
-        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 test -d ../../../.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
+    echopass "R:$systest:PASS"
+    if $clean; then
+        ( cd $systest && $SHELL clean.sh "$@" )
+        if test -d ../../../.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