mas01cr@78: # no shebang line: this file should be sourced by run-test.sh files mas01cr@78: mas01cr@107: set -E mas01cr@107: mas01cr@78: trap "exit 1" ERR mas01cr@78: mas01cr@200: if [ -z "${AUDIODB}" ]; then mas01cr@78: AUDIODB=../../audioDB mas01cr@78: fi mas01cr@78: mas01cr@78: # FIXME: maybe generalize to multiple arguments? Also, implement it mas01cr@78: # properly, rather than just for a few floats that we know how to mas01cr@78: # encode. This might involve writing some C code, as Bash doesn't do mas01cr@78: # Floating Point. (scanf() is probably enough). mas01cr@78: mas01cr@78: expect_clean_error_exit() { mas01cr@78: trap - ERR mas01cr@78: "$@" mas01cr@78: exit_code=$? mas01cr@78: trap "exit 1" ERR mas01cr@78: if [ $exit_code -eq 0 ]; then mas01cr@78: exit 1 mas01cr@78: elif [ $exit_code -ge 126 ]; then mas01cr@78: exit 1 mas01cr@78: fi mas01cr@78: } mas01cr@78: mas01cr@78: floatstring() { mas01cr@78: for arg in "$@"; do mas01cr@78: case ${arg} in mas01cr@78: 0) mas01cr@78: printf "\x00\x00\x00\x00\x00\x00\x00\x00";; mas01cr@195: -0.5) mas01cr@195: printf "\x00\x00\x00\x00\x00\x00\xe0\xbf";; mas01cr@78: 0.5) mas01cr@78: printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";; mas01cr@195: -1) mas01cr@195: printf "\x00\x00\x00\x00\x00\x00\xf0\xbf";; mas01cr@78: 1) mas01cr@78: printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";; mas01cr@78: *) mas01cr@78: echo "bad arg to floatstring(): ${arg}" mas01cr@78: exit 1;; mas01cr@78: esac mas01cr@78: done mas01cr@78: } mas01cr@78: mas01cr@78: # FIXME: likewise. And endianness issues (which are a reflection of mas01cr@78: # the endianness of audioDB as of 2007-09-18, unfortunately). mas01cr@78: mas01cr@78: intstring() { mas01cr@78: # works up to 9 for now mas01cr@78: if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi mas01cr@78: printf "%b\x00\x00\x00" "\\x${1}" mas01cr@78: } mas01cr@107: mas01cr@107: # Web services utilities mas01cr@107: start_server() { mas01cr@107: $1 -s $2 & mas01cr@107: # HACK: deal with race on process creation mas01cr@107: sleep 1 mas01cr@107: trap 'kill $!; exit 1' ERR mas01cr@107: } mas01cr@107: mas01cr@107: stop_server() { mas01cr@200: grep "${AUDIODB}" /proc/$1/cmdline > /dev/null mas01cr@107: kill $1 mas01cr@107: # HACK: deal with race on process exit mas01cr@107: sleep 1 mas01cr@107: expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline mas01cr@107: } mas01cr@107: mas01cr@107: check_server() { mas01cr@200: grep "${AUDIODB}" /proc/$1/cmdline > /dev/null mas01cr@107: } mas01cr@107: mas01cr@107: expect_client_failure() { mas01cr@107: # FIXME: work out whether and how the client should report server mas01cr@107: # errors. At present, the client exits with a zero exit code. mas01cr@107: "$@" mas01cr@107: }