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