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 }
|