mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-07-20 05:48:22 +08:00
119 lines
5.3 KiB
Bash
Executable File
119 lines
5.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () { echo "$@" ; cleanup ; exit 1; }
|
|
|
|
WORK="$PWD/nvm_get_latest-work.$$"
|
|
TEST_BIN="$WORK/bin"
|
|
|
|
cleanup() {
|
|
unset -f curl wget
|
|
rm -rf "$WORK"
|
|
export PATH="$OLDPATH"
|
|
}
|
|
|
|
\. ../../../nvm.sh
|
|
|
|
\. ../../common.sh
|
|
|
|
OLDPATH="$PATH"
|
|
|
|
EXPECTED_VERSION="v12.3.456"
|
|
URL="https://github.com/nvm-sh/nvm/releases/tag/$EXPECTED_VERSION"
|
|
EXPECTED_CURL_ARGS="--compressed -q -w %{url_effective}\n -L -s -S https://latest.nvm.sh -o /dev/null"
|
|
EXPECTED_WGET_ARGS="-q https://latest.nvm.sh --server-response -O /dev/null"
|
|
export URL EXPECTED_CURL_ARGS EXPECTED_WGET_ARGS
|
|
|
|
VERSION_MESSAGE="
|
|
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
|
|
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
|
|
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets"
|
|
|
|
# fake curl/wget: `command curl` bypasses shell functions, so the mocks must be executables on PATH
|
|
make_fake_curl "$TEST_BIN" 'if [ "_$*" != "_$EXPECTED_CURL_ARGS" ]; then
|
|
echo >&2 "expected args ($EXPECTED_CURL_ARGS), got ($*)"
|
|
exit 1
|
|
fi
|
|
echo "$URL"'
|
|
|
|
cat > "$TEST_BIN/wget" <<'OUTER'
|
|
#!/bin/sh
|
|
if [ "_$*" != "_$EXPECTED_WGET_ARGS" ]; then
|
|
echo >&2 "expected args ($EXPECTED_WGET_ARGS), got ($*)"
|
|
exit 1
|
|
fi
|
|
cat >&2 <<CONTENTS
|
|
HTTP/1.1 301 Moved Permanently
|
|
Location: https://github.com/nvm-sh/nvm/releases/latest
|
|
Content-Type: text/html; charset=utf-8
|
|
Content-Length: 84
|
|
Date: Mon, 22 Dec 2014 02:11:15 GMT
|
|
HTTP/1.1 302 Found
|
|
Server: GitHub.com
|
|
Date: Mon, 22 Dec 2014 02:11:15 GMT
|
|
Content-Type: text/html; charset=utf-8
|
|
Transfer-Encoding: chunked
|
|
Status: 302 Found
|
|
X-XSS-Protection: 1; mode=block
|
|
X-Frame-Options: deny
|
|
Content-Security-Policy: default-src *; script-src assets-cdn.github.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com gist.github.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com www.google-analytics.com s3.amazonaws.com
|
|
Cache-Control: no-cache
|
|
Vary: X-PJAX
|
|
Location: $URL
|
|
X-UA-Compatible: IE=Edge,chrome=1
|
|
Set-Cookie: logged_in=no; domain=.github.com; path=/; expires=Fri, 22-Dec-2034 02:11:15 GMT; secure; HttpOnly
|
|
Set-Cookie: _gh_sess=eyJzZXNzaW9uX2lkIjoiNTMzNGNjZWUxM2VhZjNhN2M3MzIwZWUxNGYwNzhmNDkiLCJzcHlfcmVwbyI6ImNyZWF0aW9uaXgvbnZtIiwic3B5X3JlcG9fYXQiOjE0MTkyMTQyNzV9--e2fa4cf5305d61aa58c0e0bf21fdb335a9660dcf; path=/; secure; HttpOnly
|
|
X-Request-Id: 4b99bf200157dd845f76ab83e4093acc
|
|
X-Runtime: 0.030872
|
|
X-Rack-Cache: miss
|
|
X-GitHub-Request-Id: 45B56780:3913:880EF6:54977DC3
|
|
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
|
|
X-Content-Type-Options: nosniff
|
|
Vary: Accept-Encoding
|
|
X-Served-By: ef97014f01ea59c1ef337fe51a4d0331
|
|
HTTP/1.1 200 OK
|
|
Server: GitHub.com
|
|
Date: Mon, 22 Dec 2014 02:11:15 GMT
|
|
Content-Type: text/html; charset=utf-8
|
|
Transfer-Encoding: chunked
|
|
Status: 200 OK
|
|
X-XSS-Protection: 1; mode=block
|
|
X-Frame-Options: deny
|
|
Content-Security-Policy: default-src *; script-src assets-cdn.github.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com gist.github.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com www.google-analytics.com s3.amazonaws.com
|
|
Cache-Control: no-cache, private
|
|
Vary: X-PJAX
|
|
X-UA-Compatible: IE=Edge,chrome=1
|
|
Set-Cookie: _gh_sess=eyJzZXNzaW9uX2lkIjoiNTMzNGNjZWUxM2VhZjNhN2M3MzIwZWUxNGYwNzhmNDkiLCJzcHlfcmVwbyI6ImNyZWF0aW9uaXgvbnZtIiwic3B5X3JlcG9fYXQiOjE0MTkyMTQyNzUsIl9jc3JmX3Rva2VuIjoiemZTVDNIRGo0QzF0dzkyNXp6NFBRdGJVbTl4NSsxTGo1cngwVFQ3NDVwdz0ifQ%3D%3D--b72bfd5241907dcf557b226e74351ff39f0e9ede; path=/; secure; HttpOnly
|
|
X-Request-Id: 305b0d158bf8c0b3fa488a33d7687091
|
|
X-Runtime: 0.038544
|
|
X-Rack-Cache: miss
|
|
X-GitHub-Request-Id: 45B56780:3913:880F19:54977DC3
|
|
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
|
|
X-Content-Type-Options: nosniff
|
|
Vary: Accept-Encoding
|
|
X-Served-By: 926b734ea1992f8ee1f88ab967a93dac
|
|
CONTENTS
|
|
OUTER
|
|
chmod +x "$TEST_BIN/wget"
|
|
|
|
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 >&2 'the shadowing curl function was called'
|
|
return 1
|
|
}
|
|
wget() {
|
|
echo >&2 'the shadowing wget function was called'
|
|
return 1
|
|
}
|
|
|
|
try nvm_get_latest
|
|
[ "_$CAPTURED_STDOUT" = "_$EXPECTED_VERSION" ] \
|
|
|| die "success path did not return version '$EXPECTED_VERSION', got '$CAPTURED_STDOUT'"
|
|
[ "_$CAPTURED_EXIT_CODE" = "_0" ] \
|
|
|| die "success path did not exit with code 0, got $CAPTURED_EXIT_CODE"
|
|
|
|
|
|
cleanup
|