diff options
Diffstat (limited to 'tests/util/xmalloc-t.in')
-rw-r--r-- | tests/util/xmalloc-t.in | 107 |
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" |