Files
nvm/test/fast/Unit tests/nvm_download and curl helpers bypass shadowed curl
T
Jordan Harband 04fef13bdc [Fix] use command to bypass curl/wget shell functions and aliases
zsh (and interactive bash with `expand_aliases`) bakes a preexisting `curl` alias into nvm's function bodies at source time,
and shell functions named `curl`/`wget` shadow the binaries at call time - either one breaks downloads.
Prefixing invocations with `command` bypasses both: here, `nvm_download`'s dispatch, `nvm_curl_version`, `nvm_curl_libz_support`, and the wget branch of `nvm_get_latest`;
the remaining bare `curl` invocations in `nvm_get_latest` and the install script are prefixed in a followup commit.

The tests that previously mocked curl/wget as shell functions now install fake executables on PATH instead,
via a shared `make_fake_curl` helper in `test/common.sh`,
and a new test asserts the bypass.

Refs #2923
2026-07-08 13:02:41 -07:00

49 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
WORK="$PWD/shadowed-curl-work.$$"
TEST_BIN="$WORK/bin"
ARGV_LOG="$WORK/argv.log"
cleanup () {
unset -f die cleanup curl wget
rm -rf "$WORK"
export PATH="$OLDPATH"
}
die () { echo "$@" ; cleanup ; exit 1; }
NVM_ENV=testing \. ../../../nvm.sh
\. ../../common.sh
OLDPATH="$PATH"
# real-looking curl on PATH; calling the shadowing shell function below instead is a failure
make_fake_curl "$TEST_BIN" ': > "$ARGV_LOG"
for a in "$@"; do printf "%s\n" "$a" >> "$ARGV_LOG"; done'
VERSION_MESSAGE="curl 7.99.0 (fake)
Features: libz"
export ARGV_LOG
export PATH="$TEST_BIN:$OLDPATH"
# shadowing shell functions, like aliases baked into a user's shell, must be
# bypassed in favor of the executables on PATH (https://github.com/nvm-sh/nvm/issues/2923)
curl() {
echo 'curl 0.0.0-shadowed'
return 1
}
wget() {
return 1
}
[ "$(nvm_curl_version)" = '7.99.0' ] || die "nvm_curl_version used the shadowing curl function; got $(nvm_curl_version)"
nvm_curl_libz_support || die 'nvm_curl_libz_support used the shadowing curl function'
nvm_download -s 'http://example.com/' -o /dev/null || die 'nvm_download used the shadowing curl function and failed'
grep -Fxq 'http://example.com/' "$ARGV_LOG" || die "nvm_download did not invoke the curl executable; got: $(cat "$ARGV_LOG")"
cleanup