]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Process core dump from named which failed to start
authorMichal Nowak <mnowak@isc.org>
Tue, 4 May 2021 10:58:23 +0000 (12:58 +0200)
committerMichal Nowak <mnowak@isc.org>
Fri, 16 Jul 2021 14:37:57 +0000 (16:37 +0200)
When named failed to start and produced core dump, the core file wasn't
processed by GDB because of run.sh script exiting immediately. This
remedies the limitation, simplifies the surrounding code, and makes the
script shellcheck clean.

bin/tests/system/run.sh.in

index 7d38c0e3e6929f708f4cc91bee64989f367c4159..5caaced6b1fa625ed37105ae8011da6e8f25b9fe 100644 (file)
@@ -115,20 +115,14 @@ eval "$(cd "${srcdir}" && ./get_ports.sh -p "$baseport" -t "$systest")"
 
 restart=false
 
-start_servers_failed() {
-    echoinfo "I:$systest:starting servers failed"
-    echofail "R:$systest:FAIL"
-    echoend  "E:$systest:$(date_with_args)"
-    exit 1
-}
-
 start_servers() {
     echoinfo "I:$systest:starting servers"
     if $restart; then
-        $PERL start.pl --restart --port "$PORT" "$systest" || start_servers_failed
-    else
-        restart=true
-        $PERL start.pl --port "$PORT" "$systest" || start_servers_failed
+        restart_opt="--restart"
+    fi
+    if ! $PERL start.pl ${restart_opt} --port "$PORT" "$systest"; then
+        echoinfo "I:$systest:starting servers failed"
+        return 1
     fi
 }
 
@@ -205,29 +199,38 @@ status=0
 run=0
 # Run the tests
 if [ -r "$systest/tests.sh" ]; then
-    start_servers
-    ( cd "$systest" && $SHELL tests.sh "$@" )
-    status=$?
-    run=$((run+1))
-    stop_servers || status=1
+    if start_servers; then
+        ( cd "$systest" && $SHELL tests.sh "$@" )
+        status=$?
+        run=$((run+1))
+        stop_servers || status=1
+    else
+        status=1
+    fi
 fi
 
-if [ -n "$PYTEST" ]; then
-    run=$((run+1))
-    for test in $(cd "${systest}" && find . -name "tests*.py"); do
-        start_servers
-        rm -f "$systest/$test.status"
-        test_status=0
-        (cd "$systest" && "$PYTEST" -v "$test" "$@" || echo "$?" > "$test.status") | SYSTESTDIR="$systest" cat_d
-        if [ -f "$systest/$test.status" ]; then
-            echo_i "FAILED"
-            test_status=$(cat "$systest/$test.status")
-        fi
-        status=$((status+test_status))
-        stop_servers || status=1
-    done
-else
-    echoinfo "I:$systest:pytest not installed, skipping python tests"
+if [ $status -eq 0 ]; then
+    if [ -n "$PYTEST" ]; then
+        run=$((run+1))
+        for test in $(cd "${systest}" && find . -name "tests*.py"); do
+            if start_servers; then
+                rm -f "$systest/$test.status"
+                test_status=0
+                (cd "$systest" && "$PYTEST" -v "$test" "$@" || echo "$?" > "$test.status") | SYSTESTDIR="$systest" cat_d
+                if [ -f "$systest/$test.status" ]; then
+                    echo_i "FAILED"
+                    test_status=$(cat "$systest/$test.status")
+                fi
+                status=$((status+test_status))
+                stop_servers || status=1
+            else
+                status=1
+                break
+            fi
+        done
+    else
+        echoinfo "I:$systest:pytest not installed, skipping python tests"
+    fi
 fi
 
 if [ "$run" -eq "0" ]; then
@@ -291,9 +294,9 @@ fi
 print_outstanding_files() {
     if test -d ${srcdir}/../../../.git; then
         git status -su --ignored "${systest}/" 2>/dev/null | \
-        sed -n -e 's|^?? \(.*\)|I:'${systest}':file \1 not removed|p' \
-            -e 's|^!! \(.*/named.run\)$|I:'${systest}':file \1 not removed|p' \
-            -e 's|^!! \(.*/named.memstats\)$|I:'${systest}':file \1 not removed|p'
+        sed -n -e 's|^?? \(.*\)|I:'"${systest}"':file \1 not removed|p' \
+            -e 's|^!! \(.*/named.run\)$|I:'"${systest}"':file \1 not removed|p' \
+            -e 's|^!! \(.*/named.memstats\)$|I:'"${systest}"':file \1 not removed|p'
     fi
 }