Files
nvm/test/fast/Aliases/nvm_alias handles unreadable alias file
T
Jordan Harband dd61ae4bc8 [Robustness] nvm_alias: explicitly succeed when the alias file is unreadable
The sed/awk pipeline exits with awk's status,
so an existing-but-unreadable alias file produces empty output with status 0 - but only by accident,
alongside sed's read error on stderr.
Make that contract explicit:
a nonzero status here would flip `nvm_ensure_default_set` from "default is already set" to recreating it,
silently overwriting a write-only default alias.
2026-07-09 15:43:56 -07:00

39 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
die () { echo "$@" ; cleanup ; exit 1; }
cleanup() {
chmod 644 ../../../alias/test-edge-unreadable 2>/dev/null
rm -f ../../../alias/test-edge-unreadable
}
export NVM_DIR="$(cd ../../.. && pwd)"
: nvm.sh
\. "${NVM_DIR}/nvm.sh"
# Create an alias file that exists but can not be read
echo 'v0.0.1' > ../../../alias/test-edge-unreadable
chmod 000 ../../../alias/test-edge-unreadable
# root (and some containers) can read mode-000 files; nothing to assert there
if [ -r ../../../alias/test-edge-unreadable ]; then
cleanup
exit 0
fi
# like the sed/awk pipeline this replaced: empty output, success status, so
# that `nvm_ensure_default_set` does not overwrite an unreadable default alias
OUTPUT="$(nvm_alias test-edge-unreadable 2>/dev/null)"
EXIT_CODE=$?
[ "${EXIT_CODE}" = '0' ] || die "expected exit code 0 for unreadable alias file, got ${EXIT_CODE}"
[ -z "${OUTPUT}" ] || die "expected empty output for unreadable alias file, got >${OUTPUT}<"
STDERR="$(nvm_alias test-edge-unreadable 2>&1 >/dev/null)"
case "${STDERR}" in
*'not readable'*) ;;
*) die "expected a not-readable warning on stderr, got >${STDERR}<" ;;
esac
cleanup