| #!/bin/bash |
| |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| export LC_ALL=C |
| |
| # 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. |
| # |
| |
| QPID_NO_MODULE_DIR=1 |
| QPID_DATA_DIR= |
| |
| # Use temporary directory if $HOME does not exist |
| if [ ! -e "$HOME" ]; then |
| QPID_DATA_DIR=/tmp/qpid |
| QPID_PID_DIR=/tmp/qpid |
| fi |
| |
| export QPID_DATA_DIR QPID_NO_MODULE_DIR QPID_PID_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 |
| } |
| |
| normalize() { echo `cd $1 && pwd`; } |
| |
| verify() { |
| FAIL= |
| arg=$1 |
| srcdir=$(normalize $2) |
| builddir=$(normalize $3) |
| if [ -d $arg ]; then dir=$(normalize $arg); script=verify; |
| else dir=$(normalize `dirname $arg`); script=`basename $arg`; fi |
| |
| # if the example is in the "cpp" area, make sure we run from the build directory, not the source dir. |
| rundir=${dir/$srcdir\/cpp/$builddir/} |
| cd $rundir || return 1 |
| rm -f *.out |
| { source $dir/$script && diff -ac $script.out $dir/$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 |
| |
| topsrcdir=$1 |
| topbuilddir=$2 |
| shift 2 |
| |
| for example in "$@"; do |
| echo "== $example" |
| if ( verify $example $topsrcdir $topbuilddir; ) then echo "PASS"; else echo "FAIL"; RET=1; fi |
| done |
| exit $RET |