-
-
Notifications
You must be signed in to change notification settings - Fork 8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Fix]
nvm_get_arch
: proper value for alpine linux
- Loading branch information
1 parent
b64e547
commit 44f91d0
Showing
3 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
#!/bin/sh | ||
|
||
# Save the PATH as it was when the test started to restore it when it finishes | ||
ORIG_PATH="${PATH}" | ||
|
||
cleanup() { | ||
# Restore the PATH as it was when the test started | ||
export PATH="${ORIG_PATH}" | ||
rm -rf "${TMP_DIR}" | ||
} | ||
|
||
die() { | ||
cleanup | ||
echo "$@" | ||
exit 1 | ||
} | ||
|
||
. ../../../nvm.sh | ||
|
||
# Sets the PATH for these tests to include the symlinks to the mocked binaries | ||
export PATH=".:${PATH}" | ||
|
||
TMP_DIR=$(mktemp -d) | ||
CHROOT_WITH_ALPINE="$TMP_DIR/with_alpine" | ||
CHROOT_WITHOUT_ALPINE="$TMP_DIR/without_alpine" | ||
|
||
setup_chroot() { | ||
chroot_dir=$1 | ||
|
||
# Directories | ||
mkdir -p "${chroot_dir}/etc" | ||
mkdir -p "${chroot_dir}/bin" | ||
mkdir -p "${chroot_dir}/usr/bin" | ||
mkdir -p "${chroot_dir}/lib64" | ||
mkdir -p "${chroot_dir}/dev" | ||
|
||
# Files and binaries | ||
cp ../../../nvm.sh "${chroot_dir}/" | ||
cp /bin/sh /usr/bin/dirname "${chroot_dir}/bin/" | ||
[ "${chroot_dir}" = "${CHROOT_WITH_ALPINE}" ] && touch "${chroot_dir}/etc/alpine-release" | ||
|
||
# Libraries | ||
for binary in /bin/sh /usr/bin/dirname; do | ||
for lib in $(ldd $binary | awk '{print $3}' | grep "^/"); do | ||
dir=$(dirname "${lib}") | ||
mkdir -p "${chroot_dir}${dir}" | ||
cp "${lib}" "${chroot_dir}${dir}/" | ||
done | ||
done | ||
|
||
# Dynamic linker | ||
cp /lib64/ld-linux-x86-64.so.2 "${chroot_dir}/lib64/" | ||
|
||
# /dev/null | ||
sudo mknod "${chroot_dir}/dev/null" c 1 3 | ||
} | ||
|
||
setup_chroot "${CHROOT_WITH_ALPINE}" | ||
setup_chroot "${CHROOT_WITHOUT_ALPINE}" | ||
|
||
# Run tests in chroot environments | ||
ARCH_WITH_ALPINE=$(sudo chroot "${CHROOT_WITH_ALPINE}" /bin/sh -c ". ./nvm.sh && nvm_get_arch") | ||
[ "${ARCH_WITH_ALPINE}" = "x64-musl" ] || die "Expected x64-musl for alpine environment but got ${ARCH_WITH_ALPINE}" | ||
|
||
ARCH_WITHOUT_ALPINE=$(sudo chroot "${CHROOT_WITHOUT_ALPINE}" /bin/sh -c ". ./nvm.sh && nvm_get_arch") | ||
[ "${ARCH_WITHOUT_ALPINE}" != "x64-musl" ] || die "Did not expect x64-musl for non-alpine environment" | ||
|
||
# Run tests for nvm ls-remote | ||
test_default_ls_remote() { | ||
mock_response='N/A' | ||
result=$(NVM_NODEJS_ORG_MIRROR='http://nonexistent-url' nvm ls-remote 18) | ||
if [ "${result}" = "${mock_response}" ]; then | ||
die "Test failed: Expected '${mock_response}' for but got '${result}'" | ||
else | ||
echo "Test passed" | ||
fi | ||
} | ||
|
||
test_unofficial_mirror_ls_remote() { | ||
mock_response='v18.18.0 (LTS: Hydrogen)' | ||
result=$(NVM_NODEJS_ORG_MIRROR='https://unofficial-builds.nodejs.org/download/release' nvm ls-remote 18.18.0 | sed -e 's/^[[:space:]]*//') | ||
result=$(echo "${result}" | sed 's/\x1b\[[0-9;]*m//g') | ||
|
||
if [ "${result}" = "${mock_response}" ]; then | ||
echo "Test passed" | ||
else | ||
die "Test failed: Expected '${mock_response}' but got '${result}'" | ||
fi | ||
} | ||
|
||
test_default_ls_remote | ||
test_unofficial_mirror_ls_remote | ||
|
||
cleanup |