mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-06-07 06:47:08 +08:00
Container-based suites and the `nvm_download` httpbin check hard-fail whenever DockerHub is briefly unreachable (observed: `dial tcp ...:443: connect: connection refused` while pulling images), even though the change under test is fine. This is unrelated to any test logic. - tests-xenial / tests-installation-node: retry the `docker pull` up to 5 times before `docker run`, mirroring the existing apt-get retry - `nvm_download` test: retry the httpbin pull and skip the auth-header checks (rather than fail) when the image cannot be pulled or run, and make cleanup tolerant of a missing container.
43 lines
1.7 KiB
Bash
Executable File
43 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
cleanup () {
|
|
unset -f die cleanup
|
|
docker rm -f httpbin >/dev/null 2>&1 || true
|
|
}
|
|
die () { echo "$@" ; cleanup ; exit 1; }
|
|
|
|
: nvm.sh
|
|
\. ../../../nvm.sh
|
|
|
|
set -ex
|
|
|
|
# nvm_download install.sh
|
|
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/dev/null || die "nvm_download unable to download install.sh"
|
|
|
|
# nvm_download should fail to download wrong_install.sh
|
|
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
|
|
|
|
# the auth header checks need a local httpbin container; retry the pull, and
|
|
# skip (rather than fail) if the image cannot be pulled or run, so a transient
|
|
# Docker registry outage does not fail the suite
|
|
httpbin_pulled=0
|
|
for i in 1 2 3 4 5; do
|
|
if docker pull kennethreitz/httpbin; then httpbin_pulled=1; break; fi
|
|
echo "docker pull httpbin failed, attempt $i/5"
|
|
sleep $((i * 5))
|
|
done
|
|
if [ "${httpbin_pulled}" = 1 ] && SHELL=bash docker run -d --name httpbin -p 80:80 kennethreitz/httpbin; then
|
|
sleep 1 # wait for httpbin to start
|
|
# nvm_download should pass when calling with auth header
|
|
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
|
|
# nvm_download should fail when calling without auth header
|
|
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
|
|
else
|
|
echo 'skipping auth header checks: unable to pull or run httpbin'
|
|
fi
|
|
|
|
# ensure quoted extra args remain quoted
|
|
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted" || die 'command failed'
|
|
|
|
cleanup
|