Files
nvm/test/fast/Unit tests/nvm_download
Jordan Harband dd13968c1e [Tests] reduce CI flakiness from transient Docker registry failures
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.
2026-06-03 13:12:31 -07:00

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