aboutsummaryrefslogtreecommitdiff
path: root/tests/util/xmalloc-t.in
diff options
context:
space:
mode:
Diffstat (limited to 'tests/util/xmalloc-t.in')
-rw-r--r--tests/util/xmalloc-t.in107
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/util/xmalloc-t.in b/tests/util/xmalloc-t.in
new file mode 100644
index 0000000..e4e971d
--- /dev/null
+++ b/tests/util/xmalloc-t.in
@@ -0,0 +1,107 @@
+#! /bin/sh
+# $Id$
+#
+# Test suite for xmalloc and friends.
+
+# The count starts at 1 and is updated each time ok is printed. printcount
+# takes "ok" or "not ok".
+count=1
+printcount () {
+ echo "$1 $count $2"
+ count=`expr $count + 1`
+}
+
+# Run a program expected to succeed, and print ok if it does.
+runsuccess () {
+ output=`$xmalloc "$1" "$2" "$3" 2>&1 >/dev/null`
+ status=$?
+ if test $status = 0 && test -z "$output" ; then
+ printcount "ok"
+ else
+ if test $status = 2 ; then
+ printcount "ok" "# skip no data limit support"
+ else
+ printcount "not ok"
+ echo " $output"
+ fi
+ fi
+}
+
+# Run a program expected to fail and make sure it fails with an exit status
+# of 2 and the right failure message. Strip the colon and everything after
+# it off the error message since it's system-specific.
+runfailure () {
+ output=`$xmalloc "$1" "$2" "$3" 2>&1 >/dev/null`
+ status=$?
+ output=`echo "$output" | sed 's/:.*//' \
+ | sed 's% [^ ]*/xmalloc.c% xmalloc.c%'`
+ if test $status = 1 && test x"$output" = x"$4" ; then
+ printcount "ok"
+ else
+ if test $status = 2 ; then
+ printcount "ok" "# skip no data limit support"
+ else
+ printcount "not ok"
+ echo " saw: $output"
+ echo " not: $4"
+ fi
+ fi
+}
+
+# Find where the helper program is.
+xmalloc="@abs_top_builddir@/tests/util/xmalloc"
+
+# Total tests.
+echo 36
+
+# First run the tests expected to succeed.
+runsuccess "m" "21" "0"
+runsuccess "m" "128000" "0"
+runsuccess "m" "0" "0"
+runsuccess "r" "21" "0"
+runsuccess "r" "128000" "0"
+runsuccess "s" "21" "0"
+runsuccess "s" "128000" "0"
+runsuccess "n" "21" "0"
+runsuccess "n" "128000" "0"
+runsuccess "c" "24" "0"
+runsuccess "c" "128000" "0"
+runsuccess "a" "24" "0"
+runsuccess "a" "128000" "0"
+runsuccess "v" "24" "0"
+runsuccess "v" "128000" "0"
+
+# Now limit our memory to 120KB and then try the large ones again, all of
+# which should fail.
+runfailure "m" "128000" "120000" \
+ "failed to malloc 128000 bytes at xmalloc.c line 54"
+runfailure "r" "128000" "120000" \
+ "failed to realloc 128000 bytes at xmalloc.c line 80"
+runfailure "s" "64000" "120000" \
+ "failed to strdup 64000 bytes at xmalloc.c line 109"
+runfailure "n" "64000" "120000" \
+ "failed to strndup 64000 bytes at xmalloc.c line 133"
+runfailure "c" "128000" "120000" \
+ "failed to calloc 128000 bytes at xmalloc.c line 155"
+runfailure "a" "64000" "120000" \
+ "failed to asprintf 64000 bytes at xmalloc.c line 177"
+runfailure "v" "64000" "120000" \
+ "failed to vasprintf 64000 bytes at xmalloc.c line 196"
+
+# Check our custom error handler.
+runfailure "M" "128000" "120000" "malloc 128000 xmalloc.c 54"
+runfailure "R" "128000" "120000" "realloc 128000 xmalloc.c 80"
+runfailure "S" "64000" "120000" "strdup 64000 xmalloc.c 109"
+runfailure "N" "64000" "120000" "strndup 64000 xmalloc.c 133"
+runfailure "C" "128000" "120000" "calloc 128000 xmalloc.c 155"
+runfailure "A" "64000" "120000" "asprintf 64000 xmalloc.c 177"
+runfailure "V" "64000" "120000" "vasprintf 64000 xmalloc.c 196"
+
+# Check the smaller ones again just for grins.
+runsuccess "m" "21" "96000"
+runsuccess "r" "32" "96000"
+runsuccess "s" "64" "96000"
+runsuccess "n" "20" "96000"
+runsuccess "c" "24" "96000"
+runsuccess "a" "30" "96000"
+runsuccess "v" "35" "96000"