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