blob: 251097930e18780204f4755e6f7fde225c759b17 [file]
#!/bin/sh
# Driver script to verify installed examples (also used for build tests.)
#
# Usage: verify example_dir [ example_dir ...]
# Where each example_dir must contain a verify sub-script to include.
#
# If $QPIDD is set, run a private QPIDD and use it.
# If $QPID_HOST or $QPID_PORT are set, use them to connect.
#
export QPID_DATA_DIR=
cleanup() {
test -n "$QPIDD" && $QPIDD -q # Private broker
kill %% > /dev/null 2>&1 # Leftover background jobs
}
trap cleanup EXIT
ARGS="${QPID_HOST:-localhost} $QPID_PORT"
outfile() {
file=$1
while [ -f $file.out ]; do file="${file}X"; done
echo $file.out
}
fail() { test -n "$*" && echo $* 1>&2 ; FAIL=1; return 1; }
client() { "$@" $ARGS > `outfile $*` || fail; }
clients() { for cmd in "$@"; do client $cmd; done; }
waitfor() { until grep -a -l "$2" $1 >/dev/null 2>&1 ; do sleep 1 ; done ; }
background() {
pattern=$1; shift
out=`outfile $*`
eval "$* $ARGS > $out &" || { fail; return 1; }
waitfor $out "$pattern"
}
name() {
for x in $*; do name="$name `basename $x`"; done
echo $name;
}
outputs() {
wait 2> /dev/null # Wait for all backgroud processes to complete
rm -f $script.out
for f in "$@"; do
{ echo "==== `name $f`"; eval "cat $f"; } >> $script.out || fail
done
}
verify() {
FAIL=
if [ -d $1 ]; then dir=$1; script=verify;
else dir=`dirname $1`; script=`basename $1`; fi
cd $dir || return 1
rm -f *.out
{ source ./$script && diff -ac $script.out $script.in ; } || fail
test -z "$FAIL" && rm -f *.out
return $FAIL
}
HEX="[a-fA-F0-9]"
remove_uuid() {
sed "s/$HEX\{8\}-$HEX\{4\}-$HEX\{4\}-$HEX\{4\}-$HEX\{12\}//g" $*
}
remove_uuid64() {
sed 's/[-A-Za-z0-9_]\{22\}==//g' $*
}
# Start private broker if QPIDD is set.
if [ -n "$QPIDD" ] ; then
export QPID_PORT=`$QPIDD -dp0` || { echo "Cannot start $QPIDD" ; exit 1; }
trap "$QPIDD -q" EXIT
fi
for example in "$@"; do
echo "== $example "
if ( verify $example; ) then echo "PASS"; else echo "FAIL"; RET=1; fi
done
exit $RET