#!/usr/bin/env bash set -x if [[ -v BENCHMARK_CONNSTR ]]; then uri_no_proto="${BENCHMARK_CONNSTR#postgres://}" uri_no_proto="${uri_no_proto#postgresql://}" if [[ $uri_no_proto == *\?* ]]; then base="${uri_no_proto%%\?*}" # before '?' else base="$uri_no_proto" fi if [[ $base =~ ^([^:]+):([^@]+)@([^:/]+):?([0-9]*)/(.+)$ ]]; then export PGUSER="${BASH_REMATCH[1]}" export PGPASSWORD="${BASH_REMATCH[2]}" export PGHOST="${BASH_REMATCH[3]}" export PGPORT="${BASH_REMATCH[4]:-5432}" export PGDATABASE="${BASH_REMATCH[5]}" echo export PGUSER="${BASH_REMATCH[1]}" echo export PGPASSWORD="${BASH_REMATCH[2]}" echo export PGHOST="${BASH_REMATCH[3]}" echo export PGPORT="${BASH_REMATCH[4]:-5432}" echo export PGDATABASE="${BASH_REMATCH[5]}" else echo "Invalid PostgreSQL base URI" exit 1 fi fi REGULAR_USER=false PARALLEL_COMPUTES=${PARALLEL_COMPUTES:-1} while getopts pr arg; do case ${arg} in r) REGULAR_USER=true shift $((OPTIND-1)) ;; *) : ;; esac done extdir=${1} cd "${extdir}" || exit 2 FAILED= export FAILED_FILE=/tmp/failed rm -f ${FAILED_FILE} mapfile -t LIST < <( (echo -e "${SKIP//","/"\n"}"; ls) | sort | uniq -u) if [[ ${PARALLEL_COMPUTES} -gt 1 ]]; then # Avoid errors if RUN_FIRST is not defined RUN_FIRST=${RUN_FIRST:-} # Move entries listed in the RUN_FIRST variable to the beginning ORDERED_LIST=$(printf "%s\n" "${LIST[@]}" | grep -x -Ff <(echo -e "${RUN_FIRST//,/$'\n'}"); printf "%s\n" "${LIST[@]}" | grep -vx -Ff <(echo -e "${RUN_FIRST//,/$'\n'}")) parallel -j"${PARALLEL_COMPUTES}" "[[ -d {} ]] || exit 0 export PGHOST=compute{%} if ! psql -c 'select 1'>/dev/null; then exit 1 fi echo Running on \${PGHOST} if [[ -f ${extdir}/{}/neon-test.sh ]]; then echo Running from script ${extdir}/{}/neon-test.sh || echo {} >> ${FAILED_FILE}; else echo Running using make; USE_PGXS=1 make -C {} installcheck || echo {} >> ${FAILED_FILE}; fi" ::: ${ORDERED_LIST} [[ ! -f ${FAILED_FILE} ]] && exit 0 else for d in "${LIST[@]}"; do [ -d "${d}" ] || continue if ! psql -w -c "select 1" >/dev/null; then FAILED="${d} ${FAILED}" break fi if [[ ${REGULAR_USER} = true ]] && [ -f "${d}"/regular-test.sh ]; then "${d}/regular-test.sh" || FAILED="${d} ${FAILED}" continue fi if [ -f "${d}/neon-test.sh" ]; then "${d}/neon-test.sh" || FAILED="${d} ${FAILED}" else USE_PGXS=1 make -C "${d}" installcheck || FAILED="${d} ${FAILED}" fi done [[ -z ${FAILED} ]] && exit 0 fi for d in ${FAILED} $([[ ! -f ${FAILED_FILE} ]] || cat ${FAILED_FILE}); do cat "$(find $d -name regression.diffs)" done for postgis_diff in /tmp/pgis_reg/*_diff; do echo "${postgis_diff}:" cat "${postgis_diff}" done echo "${FAILED}" cat ${FAILED_FILE} exit 1