scripts/verify-install-test.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
set -euo pipefail
root="$(cd "$(dirname "$0")/.." && pwd -P)"
fixture="$(mktemp -d "${TMPDIR:-/tmp}/verify-install-test.XXXXXX")"
trap 'rm -rf "$fixture"' EXIT
mkdir -p "$fixture/bin" "$fixture/tmp" "$fixture/home"
real_path="$PATH"
run_verifier() {
env -i HOME="$fixture/home" TMPDIR="$fixture/tmp" PATH="$fixture/bin:$real_path" \
VERIFY_INSTALL_TIMEOUT=2 "$root/scripts/verify-install.sh" 2>&1
}
cat >"$fixture/bin/curl" <<'SH'
#!/usr/bin/env bash
case "$*" in
*api.github.com*/releases*)
while [ "$#" -gt 0 ]; do
if [ "$1" = -o ]; then shift; : >"$1"; fi
shift
done
printf '403'
;;
*) exit 1 ;;
esac
SH
chmod 0755 "$fixture/bin/curl"
if output="$(run_verifier)"; then
printf 'expected failed release discovery\n' >&2
exit 1
fi
case "$output" in
*"release discovery"*"403"*"rate limit"*) ;;
*) printf 'missing classified discovery error:\n%s\n' "$output" >&2; exit 1 ;;
esac
case "$output" in
*Traceback* | *JSONDecodeError*) printf 'leaked parser traceback:\n%s\n' "$output" >&2; exit 1 ;;
esac
sed -i 's/printf '\''403'\''/printf '\''404'\''/' "$fixture/bin/curl"
if output="$(run_verifier)"; then
printf 'expected missing release metadata failure\n' >&2
exit 1
fi
case "$output" in
*"release discovery got HTTP 404"*"private or missing"*) ;;
*) printf 'missing private or missing classification:\n%s\n' "$output" >&2; exit 1 ;;
esac
cat >"$fixture/bin/curl" <<'SH'
#!/usr/bin/env bash
case "$*" in
*api.github.com*/releases*)
output=""
while [ "$#" -gt 0 ]; do
if [ "$1" = -o ]; then shift; output="$1"; fi
shift
done
printf '%s\n' '{not-json' >"$output"
printf '200'
;;
*) exit 1 ;;
esac
SH
chmod 0755 "$fixture/bin/curl"
if output="$(run_verifier)"; then
printf 'expected invalid release metadata failure\n' >&2
exit 1
fi
case "$output" in
*"release discovery returned invalid JSON"*) ;;
*) printf 'missing invalid metadata classification:\n%s\n' "$output" >&2; exit 1 ;;
esac
case "$output" in
*Traceback* | *JSONDecodeError*) printf 'leaked parser traceback:\n%s\n' "$output" >&2; exit 1 ;;
esac
cat >"$fixture/bin/curl" <<'SH'
#!/usr/bin/env bash
case "$*" in
*api.github.com*/releases*)
output=""
while [ "$#" -gt 0 ]; do
if [ "$1" = -o ]; then shift; output="$1"; fi
shift
done
printf '%s\n' '[{"tag_name":"v0.2.0","assets":[{"name":"checksums.txt"},{"name":"self-host_0.2.0_linux_amd64.tar.gz"}]},{"tag_name":"v0.10.0","assets":[{"name":"checksums.txt"},{"name":"self-host_0.10.0_linux_amd64.tar.gz"}]},{"tag_name":"v9.0.0","prerelease":true,"assets":[{"name":"checksums.txt"},{"name":"self-host_9.0.0_linux_amd64.tar.gz"}]}]' >"$output"
printf '200'
;;
*self-host.fyi/install*) printf '%s\n' 'exit 1' ;;
*) exit 1 ;;
esac
SH
chmod 0755 "$fixture/bin/curl"
if output="$(run_verifier)"; then
printf 'fixture installer unexpectedly passed\n' >&2
exit 1
fi
case "$output" in
*"Latest CLI release: 0.10.0"*"FAIL curl | bash failed"*"FAIL pinned install"*) ;;
*) printf 'valid metadata did not select latest and continue checks:\n%s\n' "$output" >&2; exit 1 ;;
esac
if find "$fixture/tmp" -maxdepth 1 -name 'self-host-verify.*' -print -quit | grep -q .; then
printf 'verifier left disposable state behind\n' >&2
exit 1
fi
printf 'verify-install fixtures: pass\n'