annotate libtests/test-utils.sh @ 366:521812d63516 gcc-4.3-cleanups

check return values of read() and write(), erroring out on an error return value or a short read/write. (A stylish implementation of CHECKED_FOO() would detect short reads/writes and retry the failed portion, but...)
author mas01cr
date Wed, 12 Nov 2008 15:23:29 +0000
parents 94c18f128ce8
children
rev   line source
mas01ik@355 1 # no shebang line: this file should be sourced by run-test.sh files
mas01ik@355 2
mas01ik@355 3 set -E
mas01ik@355 4
mas01ik@355 5 trap "exit 1" ERR
mas01ik@355 6
mas01ik@355 7 if [ -z "${AUDIODB}" ]; then
mas01ik@355 8 AUDIODB=../../audioDB
mas01ik@355 9 #AUDIODB=/Datastore/group/omras2/releases/bin_x86-64_linux/audioDB
mas01ik@355 10 fi
mas01ik@355 11
mas01ik@355 12 echo "AUDIODB:"
mas01ik@355 13
mas01ik@355 14 echo ${AUDIODB}
mas01ik@355 15
mas01ik@355 16
mas01ik@355 17
mas01ik@355 18
mas01ik@355 19 # FIXME: maybe generalize to multiple arguments? Also, implement it
mas01ik@355 20 # properly, rather than just for a few floats that we know how to
mas01ik@355 21 # encode. This might involve writing some C code, as Bash doesn't do
mas01ik@355 22 # Floating Point. (scanf() is probably enough).
mas01ik@355 23
mas01ik@355 24 expect_clean_error_exit() {
mas01ik@355 25 trap - ERR
mas01ik@355 26 "$@"
mas01ik@355 27 exit_code=$?
mas01ik@355 28
mas01ik@355 29 trap "exit 1" ERR
mas01ik@355 30 if [ $exit_code -eq 0 ]; then
mas01ik@355 31 exit 1
mas01ik@355 32 elif [ $exit_code -ge 126 ]; then
mas01ik@355 33 exit 1
mas01ik@355 34 fi
mas01ik@355 35 }
mas01ik@355 36
mas01ik@355 37 floatstring() {
mas01ik@355 38 for arg in "$@"; do
mas01ik@355 39 case ${arg} in
mas01ik@355 40 0)
mas01ik@355 41 printf "\x00\x00\x00\x00\x00\x00\x00\x00";;
mas01ik@355 42 -0.5)
mas01ik@355 43 printf "\x00\x00\x00\x00\x00\x00\xe0\xbf";;
mas01ik@355 44 0.5)
mas01ik@355 45 printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";;
mas01ik@355 46 -1)
mas01ik@355 47 printf "\x00\x00\x00\x00\x00\x00\xf0\xbf";;
mas01ik@355 48 1)
mas01ik@355 49 printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";;
mas01ik@355 50 *)
mas01ik@355 51 echo "bad arg to floatstring(): ${arg}"
mas01ik@355 52 exit 1;;
mas01ik@355 53 esac
mas01ik@355 54 done
mas01ik@355 55 }
mas01ik@355 56
mas01ik@355 57 # FIXME: likewise. And endianness issues (which are a reflection of
mas01ik@355 58 # the endianness of audioDB as of 2007-09-18, unfortunately).
mas01ik@355 59
mas01ik@355 60 intstring() {
mas01ik@355 61 # works up to 9 for now
mas01ik@355 62 if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi
mas01ik@355 63 printf "%b\x00\x00\x00" "\\x${1}"
mas01ik@355 64 }
mas01ik@355 65
mas01ik@355 66 # Web services utilities
mas01ik@355 67 start_server() {
mas01ik@355 68 $1 -s $2 &
mas01ik@355 69 # HACK: deal with race on process creation
mas01ik@355 70 sleep 1
mas01ik@355 71 trap 'kill $!; exit 1' ERR
mas01ik@355 72 }
mas01ik@355 73
mas01ik@355 74 stop_server() {
mas01ik@355 75 grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
mas01ik@355 76 kill $1
mas01ik@355 77 # HACK: deal with race on process exit
mas01ik@355 78 sleep 1
mas01ik@355 79 expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline
mas01ik@355 80 }
mas01ik@355 81
mas01ik@355 82 check_server() {
mas01ik@355 83 grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
mas01ik@355 84 }
mas01ik@355 85
mas01ik@355 86 expect_client_failure() {
mas01ik@355 87 # FIXME: work out whether and how the client should report server
mas01ik@355 88 # errors. At present, the client exits with a zero exit code.
mas01ik@355 89 "$@"
mas01ik@355 90 }