Mercurial > hg > audiodb
view tests/test-utils.sh @ 133:a5d5a55a412d
Friendlier Actionscript/SOAP behaviour.
As suggested in the gsoap documentation, we wrap the struct that we
actually want to return inside a response structure. (It should be said
that I didn't understand a _word_ of the gsoap documentation; I want in
particular to highlight section 8.1.1 of the gsoap 2.7.6 user guide,
which reads in its entirety
"If the single output parameter of a remote method is a complex data
type such as a struct or class it is necessary to specify the response
element of the remote method as a struct or class at all times.
Otherwise, the output parameter will be considered the response
element (!), because of the response element specification convention
used by gSOAP, as discussed in 8.1.7."
and tells me absolutely nothing of use.)
Nevertheless, cargo-cult from the documentation...
author | mas01cr |
---|---|
date | Tue, 23 Oct 2007 17:21:08 +0000 |
parents | e6cdee24d6c3 |
children | 94502600a049 |
line wrap: on
line source
# no shebang line: this file should be sourced by run-test.sh files set -E trap "exit 1" ERR if [ -z ${AUDIODB} ]; then AUDIODB=../../audioDB fi # FIXME: maybe generalize to multiple arguments? Also, implement it # properly, rather than just for a few floats that we know how to # encode. This might involve writing some C code, as Bash doesn't do # Floating Point. (scanf() is probably enough). expect_clean_error_exit() { trap - ERR "$@" exit_code=$? trap "exit 1" ERR if [ $exit_code -eq 0 ]; then exit 1 elif [ $exit_code -ge 126 ]; then exit 1 fi } floatstring() { for arg in "$@"; do case ${arg} in 0) printf "\x00\x00\x00\x00\x00\x00\x00\x00";; 0.5) printf "\x00\x00\x00\x00\x00\x00\xe0\x3f";; 1) printf "\x00\x00\x00\x00\x00\x00\xf0\x3f";; *) echo "bad arg to floatstring(): ${arg}" exit 1;; esac done } # FIXME: likewise. And endianness issues (which are a reflection of # the endianness of audioDB as of 2007-09-18, unfortunately). intstring() { # works up to 9 for now if [ $1 -ge 10 ]; then echo "intstring() arg too large: ${1}"; exit 1; fi printf "%b\x00\x00\x00" "\\x${1}" } # Web services utilities start_server() { $1 -s $2 & # HACK: deal with race on process creation sleep 1 trap 'kill $!; exit 1' ERR } stop_server() { grep ${AUDIODB} /proc/$1/cmdline > /dev/null kill $1 # HACK: deal with race on process exit sleep 1 expect_clean_error_exit grep ${AUDIODB} /proc/$1/cmdline } check_server() { grep ${AUDIODB} /proc/$1/cmdline > /dev/null } expect_client_failure() { # FIXME: work out whether and how the client should report server # errors. At present, the client exits with a zero exit code. "$@" }