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