#!/bin/bash set -euo pipefail printf '%s\n' "$*" >> "${FAKE_DOCKER_LOG:?}" command_line=" $* " if [[ "$command_line" == *" pg_dump "* ]]; then case "${FAKE_DOCKER_MODE:-success}" in dump-fail) printf 'pg_dump failed\n' >&2 exit 42 ;; dump-partial-fail) printf '%s\n' '-- incomplete dump --' printf 'pg_dump failed after output\n' >&2 exit 42 ;; empty) exit 0 ;; concurrent) barrier="${FAKE_DOCKER_BARRIER:?}" mkdir -p "$barrier" touch "$barrier/$$" for _ in {1..500}; do count="$(find "$barrier" -type f | wc -l | tr -d '[:space:]')" if ((count >= 2)); then break fi sleep 0.01 done if ((count < 2)); then printf 'concurrent backup barrier timed out\n' >&2 exit 46 fi ;; esac printf '%s\n' '-- fake PostgreSQL dump --' 'CREATE TABLE example(id integer);' exit 0 fi if [[ "$command_line" == *" createdb "* ]]; then exit 0 fi if [[ "$command_line" == *" dropdb "* ]]; then exit 0 fi if [[ "$command_line" == *" psql "* && "$command_line" == *" ON_ERROR_STOP=1 "* ]]; then cat > "${FAKE_RESTORE_INPUT:?}" if [[ "${FAKE_DOCKER_MODE:-success}" == "restore-fail" ]]; then printf 'restore failed\n' >&2 exit 43 fi if [[ "$command_line" != *" -o /dev/null "* ]]; then printf '%s\n' 'SET' 'CREATE TABLE' fi exit 0 fi if [[ "$command_line" == *" psql "* && "$command_line" == *" SELECT count(*) FROM public."* ]]; then database="" query="" while (($#)); do case "$1" in -d) database="$2" shift 2 ;; -c) query="$2" shift 2 ;; *) shift ;; esac done table="${query#*public.}" table="${table%%;*}" case "$table" in download_jobs) count=3 ;; subscriptions) count=2 ;; known_episodes) count=5 ;; schema_migrations) count=3 ;; *) printf 'unexpected table: %s\n' "$table" >&2; exit 44 ;; esac if [[ "${FAKE_DOCKER_MODE:-success}" == "count-mismatch" && "$database" == "${RESTORE_DB:-tver_restore_test}" && "$table" == "known_episodes" ]]; then count=4 fi printf '%s\n' "$count" exit 0 fi printf 'unexpected docker invocation: %s\n' "$*" >&2 exit 45