|  | #!/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 |