87 lines
2.1 KiB
Bash
Executable File
87 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
tmp=$(mktemp -d)
|
|
trap 'rm -rf "$tmp"' EXIT HUP INT TERM
|
|
log="$tmp/docker.log"
|
|
marker_file="$tmp/marker"
|
|
|
|
mkdir -p "$tmp/bin"
|
|
cat >"$tmp/bin/docker" <<'EOF'
|
|
#!/bin/sh
|
|
set -eu
|
|
printf '%s\n' "$*" >>"$FAKE_DOCKER_LOG"
|
|
|
|
case " $* " in
|
|
*" port frontend 8080 "*) printf '%s\n' '127.0.0.1:49152' ;;
|
|
*" exec -T core sh -c "*"printf"*)
|
|
for last do :; done
|
|
printf '%s\n' "$last" >"$FAKE_MARKER_FILE"
|
|
;;
|
|
*" exec -T core sh -c "*"cat /data/.compose-smoke-marker"*)
|
|
cat "$FAKE_MARKER_FILE"
|
|
;;
|
|
esac
|
|
EOF
|
|
cat >"$tmp/bin/curl" <<'EOF'
|
|
#!/bin/sh
|
|
set -eu
|
|
header_file=""
|
|
for arg do
|
|
if [ "${previous:-}" = "--dump-header" ]; then header_file=$arg; fi
|
|
previous=$arg
|
|
done
|
|
if [ -n "$header_file" ]; then
|
|
case "$*" in
|
|
*"/events"*) printf 'HTTP/1.1 200 OK\r\nContent-Type: text/event-stream\r\nCache-Control: no-cache\r\n\r\n' >"$header_file" ;;
|
|
*) printf 'HTTP/1.1 200 OK\r\nContent-Type: application/json; charset=utf-8\r\n\r\n' >"$header_file" ;;
|
|
esac
|
|
fi
|
|
case "$*" in
|
|
*"/health"*) printf '%s\n' '{"status":"ok"}' ;;
|
|
esac
|
|
EOF
|
|
chmod +x "$tmp/bin/docker" "$tmp/bin/curl"
|
|
|
|
run_smoke() {
|
|
PATH="$tmp/bin:$PATH" \
|
|
FAKE_DOCKER_LOG="$log" \
|
|
FAKE_MARKER_FILE="$marker_file" \
|
|
SMOKE_PROJECT="$1" \
|
|
KEEP_SMOKE_RESOURCES="${2:-0}" \
|
|
./scripts/docker-smoke.sh
|
|
}
|
|
|
|
run_smoke thothii-smoke-dynamic
|
|
|
|
while IFS= read -r invocation; do
|
|
case "$invocation" in
|
|
"compose --project-name thothii-smoke-dynamic "*) ;;
|
|
*) echo "Compose invocation escaped the smoke project: $invocation" >&2; exit 1 ;;
|
|
esac
|
|
done <"$log"
|
|
grep -q ' down --volumes$' "$log"
|
|
if grep -q -- '--remove-orphans' "$log"; then
|
|
echo "smoke cleanup must not remove operator orphans" >&2
|
|
exit 1
|
|
fi
|
|
|
|
: >"$log"
|
|
run_smoke thothii-smoke-kept 1
|
|
if grep -q ' down ' "$log"; then
|
|
echo "KEEP_SMOKE_RESOURCES=1 unexpectedly cleaned the project" >&2
|
|
exit 1
|
|
fi
|
|
|
|
: >"$log"
|
|
if PATH="$tmp/bin:$PATH" FAKE_DOCKER_LOG="$log" FAKE_MARKER_FILE="$marker_file" \
|
|
SMOKE_PROJECT=thothii ./scripts/docker-smoke.sh >/dev/null 2>&1; then
|
|
echo "reserved operator project was accepted" >&2
|
|
exit 1
|
|
fi
|
|
test ! -s "$log"
|
|
|
|
echo "docker-smoke dynamic isolation contract passed."
|