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