Files
creator-hub/docs/deployment_stop_test.sh
T

114 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
cd "$(dirname "$0")/.."
extract_block() {
awk -v wanted="$1" '
/^```bash$/ {
in_code = 1
strict = ""
wrapper = ""
next
}
in_code && /^\($/ { wrapper = $0 }
in_code && /^[[:space:]]*set -Eeuo pipefail$/ { strict = $0 }
/^[[:space:]]*list_running_browsers\(\) \{/ {
count++
capture = count == wanted
if (capture) {
if (wrapper) print wrapper
print strict
}
}
capture { print }
capture && /^[[:space:]]*docker compose stop/ {
capture = 0
if (!wrapper) exit
closing = 1
}
closing && /^\)$/ { print; exit }
/^```$/ { in_code = 0 }
' docs/deployment.md
}
docker() {
printf '%s\n' "$*" >>"$calls"
case "$1" in
ps)
[[ "$*" == 'ps --quiet --filter name=^creatorhub-browser- --filter label=io.creatorhub.managed=true --filter label=io.creatorhub.runtime-id' ]] || return 64
query_count=0
[[ ! -e "$state/query-count" ]] || read -r query_count <"$state/query-count"
((query_count += 1))
printf '%s\n' "$query_count" >"$state/query-count"
[[ "$mode:$query_count" != query_failure:1 && "$mode:$query_count" != recheck_failure:2 ]] || return 42
[[ -e "$state/stopped" || -e "$state/removed" ]] || printf '%s\n' browser-1
;;
stop)
case "$mode" in
stop_success) : >"$state/stopped" ;;
stop_failure) return 1 ;;
stop_timeout) return 124 ;;
esac
;;
rm)
[[ "$*" == 'rm --force browser-1' ]] || return 64
: >"$state/removed"
;;
compose)
[[ "$*" == 'compose stop' || "$*" == 'compose stop creator-hub docker-gateway' ]] || return 64
;;
esac
}
export -f docker
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
query='ps --quiet --filter name=^creatorhub-browser- --filter label=io.creatorhub.managed=true --filter label=io.creatorhub.runtime-id'
scenario_count=0
for block_number in 1 2; do
block="$(extract_block "$block_number")"
bash -n <<<"$block"
[[ "$block" == *'set -Eeuo pipefail'* ]]
if [[ $block_number -eq 1 ]]; then
[[ "${block%%$'\n'*}" == '(' && "${block##*$'\n'}" == ')' ]]
compose='compose stop creator-hub docker-gateway'
else
[[ "${block%%$'\n'*}" == 'set -Eeuo pipefail' ]]
compose='compose stop'
fi
for mode in stop_success stop_failure stop_timeout query_failure recheck_failure; do
state="$work/$block_number-$mode"
calls="$state/calls"
mkdir "$state"
export mode state calls
status=0
bash -c "$block" || status=$?
case "$mode" in
stop_success)
[[ $status -eq 0 ]]
diff -u <(printf '%s\n' "$query" 'stop browser-1' "$query" "$compose") "$calls"
;;
stop_failure | stop_timeout)
[[ $status -eq 0 ]]
diff -u <(printf '%s\n' "$query" 'stop browser-1' 'rm --force browser-1' "$query" "$compose") "$calls"
;;
query_failure)
[[ $status -eq 1 ]]
diff -u <(printf '%s\n' "$query") "$calls"
;;
recheck_failure)
[[ $status -eq 1 ]]
diff -u <(printf '%s\n' "$query" 'stop browser-1' "$query") "$calls"
;;
esac
scenario_count=$((scenario_count + 1))
done
done
[[ $scenario_count -eq 10 ]]