Mercurial > hg > audiodb
annotate libtests/test-utils.sh @ 355:94c18f128ce8
First version of the API, committed to the main trunk. Thanks Christophe, for all the help!
author | mas01ik |
---|---|
date | Wed, 12 Nov 2008 10:21:06 +0000 |
parents | |
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 } |