mas01cr@78
|
1 # no shebang line: this file should be sourced by run-test.sh files
|
mas01cr@78
|
2
|
mas01cr@107
|
3 set -E
|
mas01cr@107
|
4
|
mas01cr@78
|
5 trap "exit 1" ERR
|
mas01cr@78
|
6
|
mas01cr@200
|
7 if [ -z "${AUDIODB}" ]; then
|
mas01cr@78
|
8 AUDIODB=../../audioDB
|
mas01cr@78
|
9 fi
|
mas01cr@78
|
10
|
mas01cr@78
|
11 # FIXME: maybe generalize to multiple arguments? Also, implement it
|
mas01cr@78
|
12 # properly, rather than just for a few floats that we know how to
|
mas01cr@78
|
13 # encode. This might involve writing some C code, as Bash doesn't do
|
mas01cr@78
|
14 # Floating Point. (scanf() is probably enough).
|
mas01cr@78
|
15
|
mas01cr@78
|
16 expect_clean_error_exit() {
|
mas01cr@78
|
17 trap - ERR
|
mas01cr@78
|
18 "$@"
|
mas01cr@78
|
19 exit_code=$?
|
mas01cr@78
|
20 trap "exit 1" ERR
|
mas01cr@78
|
21 if [ $exit_code -eq 0 ]; then
|
mas01cr@78
|
22 exit 1
|
mas01cr@78
|
23 elif [ $exit_code -ge 126 ]; then
|
mas01cr@78
|
24 exit 1
|
mas01cr@78
|
25 fi
|
mas01cr@78
|
26 }
|
mas01cr@78
|
27
|
mas01cr@78
|
28 floatstring() {
|
mas01cr@78
|
29 for arg in "$@"; do
|
mas01cr@78
|
30 case ${arg} in
|
mas01cr@78
|
31 0)
|
mas01cr@78
|
32 printf "\x00\x00\x00\x00\x00\x00\x00\x00";;
|
mas01cr@195
|
33 -0.5)
|
mas01cr@195
|
34 printf "\x00\x00\x00\x00\x00\x00\xe0\xbf";;
|
mas01cr@78
|
35 0.5)
|
mas01cr@78
|
36 printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";;
|
mas01cr@195
|
37 -1)
|
mas01cr@195
|
38 printf "\x00\x00\x00\x00\x00\x00\xf0\xbf";;
|
mas01cr@78
|
39 1)
|
mas01cr@78
|
40 printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";;
|
mas01cr@78
|
41 *)
|
mas01cr@78
|
42 echo "bad arg to floatstring(): ${arg}"
|
mas01cr@78
|
43 exit 1;;
|
mas01cr@78
|
44 esac
|
mas01cr@78
|
45 done
|
mas01cr@78
|
46 }
|
mas01cr@78
|
47
|
mas01cr@78
|
48 # FIXME: likewise. And endianness issues (which are a reflection of
|
mas01cr@78
|
49 # the endianness of audioDB as of 2007-09-18, unfortunately).
|
mas01cr@78
|
50
|
mas01cr@78
|
51 intstring() {
|
mas01cr@78
|
52 # works up to 9 for now
|
mas01cr@78
|
53 if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi
|
mas01cr@78
|
54 printf "%b\x00\x00\x00" "\\x${1}"
|
mas01cr@78
|
55 }
|
mas01cr@107
|
56
|
mas01cr@107
|
57 # Web services utilities
|
mas01cr@107
|
58 start_server() {
|
mas01cr@107
|
59 $1 -s $2 &
|
mas01cr@107
|
60 # HACK: deal with race on process creation
|
mas01cr@107
|
61 sleep 1
|
mas01cr@107
|
62 trap 'kill $!; exit 1' ERR
|
mas01cr@107
|
63 }
|
mas01cr@107
|
64
|
mas01cr@107
|
65 stop_server() {
|
mas01cr@200
|
66 grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
|
mas01cr@107
|
67 kill $1
|
mas01cr@107
|
68 # HACK: deal with race on process exit
|
mas01cr@107
|
69 sleep 1
|
mas01cr@107
|
70 expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline
|
mas01cr@107
|
71 }
|
mas01cr@107
|
72
|
mas01cr@107
|
73 check_server() {
|
mas01cr@200
|
74 grep "${AUDIODB}" /proc/$1/cmdline > /dev/null
|
mas01cr@107
|
75 }
|
mas01cr@107
|
76
|
mas01cr@107
|
77 expect_client_failure() {
|
mas01cr@107
|
78 # FIXME: work out whether and how the client should report server
|
mas01cr@107
|
79 # errors. At present, the client exits with a zero exit code.
|
mas01cr@107
|
80 "$@"
|
mas01cr@107
|
81 }
|