aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2025-08-25 00:12:16 +0200
committerRodrigo Arias Mallo <rodarima@gmail.com>2025-08-25 00:12:16 +0200
commit6bbab7570134379aca32722350da6690f999d6cc (patch)
tree676aba335a94415568732e48d064038a4022b412 /test
parente962fd66595e363576c860ba5e4c7b90a9fa019a (diff)
Detect leaks in test suite with Asan
Leaks from libfontconfig.so are excluded for now, as it doesn't seem to be our fault. The gcc mechanism to suppress leaks doesn't seem to be working, so we fallback to awk. In the presence of leaks, that specific test will fail by returning non-zero, but this will not be what we want for those tests that are currently failing with XPASS. We will only consider the ones that are passing as those targeted for leak detection.
Diffstat (limited to 'test')
-rw-r--r--test/html/Makefile.am1
-rwxr-xr-xtest/html/driver.sh15
-rw-r--r--test/html/leakfilter.awk14
3 files changed, 27 insertions, 3 deletions
diff --git a/test/html/Makefile.am b/test/html/Makefile.am
index 29fb39f3..648d96c9 100644
--- a/test/html/Makefile.am
+++ b/test/html/Makefile.am
@@ -7,6 +7,7 @@ LOG_COMPILER = $(srcdir)/driver.sh
EXTRA_DIST = \
driver.sh \
+ leakfilter.awk \
manual \
render
diff --git a/test/html/driver.sh b/test/html/driver.sh
index e4fbc739..de753196 100755
--- a/test/html/driver.sh
+++ b/test/html/driver.sh
@@ -2,7 +2,7 @@
#
# File: driver.sh
#
-# Copyright (C) 2023-2024 Rodrigo Arias Mallo <rodarima@gmail.com>
+# Copyright (C) 2023-2025 Rodrigo Arias Mallo <rodarima@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -13,6 +13,10 @@ set -e
set -x
DILLOBIN=${DILLOBIN:-$TOP_BUILDDIR/src/dillo}
+LEAKFILTER=${LEAKFILTER:-$TOP_SRCDIR/test/html/leakfilter.awk}
+
+# Clean asan options if set
+unset ASAN_OPTIONS
if [ ! -e $DILLOBIN ]; then
echo missing dillo binary, set DILLOBIN with the path to dillo
@@ -28,7 +32,7 @@ function render_page() {
htmlfile="$1"
outpic="$2"
- "$DILLOBIN" -f "$htmlfile" &
+ "$DILLOBIN" -f "$htmlfile" 2> dillo.err &
dillopid=$!
# TODO: We need a better system to determine when the page loaded
@@ -53,7 +57,12 @@ function render_page() {
fi
xwd -id "$winid" -silent | ${magick_bin} xwd:- png:${outpic}
- kill "$dillopid"
+ # Exit cleanly
+ kill -USR2 "$dillopid"
+
+ # Dillo may fail due to leaks, but we will check them manually
+ wait "$dillopid" || true
+ awk -f "$LEAKFILTER" < dillo.err
}
function test_file() {
diff --git a/test/html/leakfilter.awk b/test/html/leakfilter.awk
new file mode 100644
index 00000000..381ed0a7
--- /dev/null
+++ b/test/html/leakfilter.awk
@@ -0,0 +1,14 @@
+# Detect beginning of leak message
+/^Direct leak/ { msg=msg "\n" $0; inleak=1; next }
+
+# Ignore anything coming from libfontconfig.so
+inleak && /libfontconfig.so/ { inleak=0; msg="" }
+
+# Store leak line
+inleak && /^ +#/ { msg=msg "\n" $0; next }
+
+# End of the leak lines, print and finish
+inleak { inleak=0; print msg; msg=""; nleaks++ }
+
+# At exit count filtered leaks and fail accordingly
+END { printf "\n==== Total leaks after filter: %d ====\n\n", nleaks; if (nleaks > 0) { exit 1 } }