gerrit/tools/util/query_tester.sh
Dan McGregor 26c0d09bfd Don't hardcode bash location
bash may not be installed in /bin, so don't make that assumption.

Change-Id: I04ae786c7558f829ddf9649c127cbba1457dcfd3
2015-08-26 09:03:24 -06:00

82 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
usage() {
cat <<EOF
query_suite run -h <host> -i <suite_dir> -o <output_dir> [-s <suite>]
Run query test suites
A query test suite must be a subdirectory of suite_dir and contain
either files with queries in them, or if the suite name looks like
"values_operator", the files must contain values for the operator
instead of full queries.
The query outputs for each suite will be stored in files named
after their suites and input file names under the output_dir.
EOF
exit
}
e() { [ -n "$VERBOSE" ] && echo "$@" >&2 ; "$@" ; }
query() { # host query
local host=$1 query="$2"
e ssh -p 29418 "$host" gerrit query --format json "$query"
}
run_suite() { # host idir odir suite operator
local host=$1 idir=$2 odir=$3 suite=$4 operator=$5 qfile files
mkdir -p "$odir/$suite"
echo "$suite" | grep -q "^values_" && operator=$(echo "$suite" | sed '-es/^values_//')
if [ -z "$suite" ] ; then
files=($(cd "$idir" ; echo *))
else
files=($(cd "$idir" ; echo $suite/*))
fi
for qfile in "${files[@]}" ; do
if [ -d "$idir/$qfile" ] ; then
run_suite "$host" "$idir" "$odir" "$qfile" "$operator"
else
if [ -n "$operator" ] ; then
query "$host" "$operator:{$(< "$idir/$qfile")}" > "$odir/$qfile"
else
query "$host" "$(< "$idir/$qfile")" > "$odir/$qfile"
fi
fi
done
}
cmd=''
while [ $# -gt 0 ] ; do
case "$1" in
-v) VERBOSE=$1 ;;
-h) shift ; HOST=$1 ;;
-s) shift ; SUITE=$1 ;;
-i) shift ; IDIR=$1 ;;
-o) shift ; ODIR=$1 ;;
run) cmd=$1 ;;
--exec) shift ; "$@" ; exit ;;
*) usage ;;
esac
shift
done
case "$cmd" in
run)
[ -z "$HOST" ] && usage
[ -z "$IDIR" ] && usage
[ -z "$ODIR" ] && usage
[ -z "$SUITE" ] && SUITE=""
run_suite "$HOST" "$IDIR" "$ODIR" "$SUITE" ; exit
;;
esac