valgrind: rework run-test-valgrind.sh script not to print unrelated message
authorThomas Haller <thaller@redhat.com>
Thu, 4 Jun 2015 15:24:08 +0000 (17:24 +0200)
committerThomas Haller <thaller@redhat.com>
Thu, 4 Jun 2015 15:48:34 +0000 (17:48 +0200)
If the valgrind logfile is empty, don't log an error message with
the location of the logfile.

Also, if the test didn't fail due to memleaks, log a different message.

tools/run-test-valgrind.sh

index cd53306..ff5bc44 100755 (executable)
@@ -3,6 +3,7 @@
 LIBTOOL="$1"; shift
 VALGRIND="$1"; shift
 SUPPRESSIONS="$1"; shift
+VALGRIND_ERROR=37
 if [ "$1" = "--launch-dbus" ]; then
     # Spawn DBus
     eval `dbus-launch --sh-syntax`
@@ -22,7 +23,7 @@ export G_SLICE=always-malloc
 export G_DEBUG=gc-friendly
 $LIBTOOL --mode=execute "$VALGRIND" \
        --quiet \
-       --error-exitcode=1 \
+       --error-exitcode=$VALGRIND_ERROR \
        --leak-check=full \
        --gen-suppressions=all \
        --suppressions="$SUPPRESSIONS" \
@@ -31,28 +32,39 @@ $LIBTOOL --mode=execute "$VALGRIND" \
        "$@"
 RESULT=$?
 
-if [ $RESULT -eq 0 -a "$(wc -c "$LOGFILE" | awk '{print$1}')" -ne 0 ]; then
-       echo "valgrind succeeded, but log is not empty: $LOGFILE"
-       exit 1
-fi
+test -s "$LOGFILE"
+HAS_ERRORS=$?
 
 if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then
-       echo "valgrind failed! Check the log at '`realpath $LOGFILE`'." >&2
-       UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq)
-       if [ -n "$UNRESOLVED" ]; then
-               echo Some addresses could not be resolved into symbols. >&2
-               echo The errors might get suppressed when you install the debuging symbols. >&2
-               if [ -x /usr/bin/dnf ]; then
-                       echo Hint: dnf debuginfo-install $UNRESOLVED >&2
-               elif [ -x /usr/bin/debuginfo-install ]; then
-                       echo Hint: debuginfo-install $UNRESOLVED >&2
-               else
-                       echo Files without debugging symbols: $UNRESOLVED >&2
+       if [ $HAS_ERRORS -ne 0 ]; then
+               rm -f "$LOGFILE"
+       elif [ $RESULT -ne $VALGRIND_ERROR ]; then
+               # the test (probably) didn't fail due to valgrind.
+               echo "The test failed. Also check the valgrind log at '`realpath "$LOGFILE"`'" >&2
+       else
+               echo "valgrind failed! Check the log at '`realpath "$LOGFILE"`'" >&2
+               UNRESOLVED=$(awk -F: '/obj:\// {print $NF}' "$LOGFILE" | sort | uniq)
+               if [ -n "$UNRESOLVED" ]; then
+                       echo Some addresses could not be resolved into symbols. >&2
+                       echo The errors might get suppressed when you install the debuging symbols. >&2
+                       if [ -x /usr/bin/dnf ]; then
+                               echo Hint: dnf debuginfo-install $UNRESOLVED >&2
+                       elif [ -x /usr/bin/debuginfo-install ]; then
+                               echo Hint: debuginfo-install $UNRESOLVED >&2
+                       else
+                               echo Files without debugging symbols: $UNRESOLVED >&2
+                       fi
                fi
        fi
        exit $RESULT
 fi
 
-find -name "$LOGFILE" -size 0 -delete
+if [ $HAS_ERRORS -eq 0 ]; then
+       # shouldn't actually happen...
+       echo "valgrind succeeded, but log is not empty: '`realpath "$LOGFILE"`'" >&2
+       exit 1
+fi
+
+rm -f "$LOGFILE"
 
 exit $RESULT