#!/bin/sh # # 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_DATA_DIR= QPID_NO_MODULE_DIR=1 export QPID_DATA_DIR QPID_NO_MODULE_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