mirror of
https://github.com/tw93/Mole.git
synced 2026-03-23 21:35:06 +00:00
fix: fall back to safe temp directories
This commit is contained in:
@@ -91,6 +91,26 @@ run_clean_dry_run() {
|
||||
[[ "$output" == *"full preview"* ]]
|
||||
}
|
||||
|
||||
@test "mo clean --dry-run survives an unwritable TMPDIR" {
|
||||
local blocked_tmp="$HOME/blocked-tmp"
|
||||
mkdir -p "$blocked_tmp"
|
||||
chmod 500 "$blocked_tmp"
|
||||
|
||||
set_mock_sudo_uncached
|
||||
local test_path="$PATH"
|
||||
if [[ -n "${TEST_MOCK_BIN:-}" ]]; then
|
||||
test_path="$TEST_MOCK_BIN:$PATH"
|
||||
fi
|
||||
|
||||
run env HOME="$HOME" TMPDIR="$blocked_tmp" MOLE_TEST_MODE=1 PATH="$test_path" \
|
||||
"$PROJECT_ROOT/mole" clean --dry-run
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" != *"mktemp:"* ]]
|
||||
[[ "$output" != *"Failed to create temporary file"* ]]
|
||||
[ -d "$HOME/.cache/mole/tmp" ]
|
||||
}
|
||||
|
||||
@test "mo clean --dry-run reports user cache without deleting it" {
|
||||
mkdir -p "$HOME/Library/Caches/TestApp"
|
||||
echo "cache data" > "$HOME/Library/Caches/TestApp/cache.tmp"
|
||||
|
||||
@@ -76,6 +76,61 @@ setup() {
|
||||
[ -d "$result" ]
|
||||
}
|
||||
|
||||
@test "get_mole_temp_root uses writable TMPDIR when available" {
|
||||
local writable_tmp="$HOME/custom-tmp"
|
||||
mkdir -p "$writable_tmp"
|
||||
|
||||
result=$(env HOME="$HOME" TMPDIR="$writable_tmp" bash -c "source '$PROJECT_ROOT/lib/core/base.sh'; get_mole_temp_root")
|
||||
[ "$result" = "$writable_tmp" ]
|
||||
}
|
||||
|
||||
@test "get_mole_temp_root falls back to user cache when TMPDIR is not writable" {
|
||||
local blocked_tmp="$HOME/blocked-tmp"
|
||||
mkdir -p "$blocked_tmp"
|
||||
chmod 500 "$blocked_tmp"
|
||||
|
||||
result=$(env HOME="$HOME" TMPDIR="$blocked_tmp" bash -c "source '$PROJECT_ROOT/lib/core/base.sh'; get_mole_temp_root")
|
||||
[ "$result" = "$HOME/.cache/mole/tmp" ]
|
||||
[ -d "$HOME/.cache/mole/tmp" ]
|
||||
}
|
||||
|
||||
@test "get_mole_temp_root caches the first resolved directory" {
|
||||
local first_tmp="$HOME/first-tmp"
|
||||
local second_tmp="$HOME/second-tmp"
|
||||
mkdir -p "$first_tmp" "$second_tmp"
|
||||
|
||||
result=$(env HOME="$HOME" TMPDIR="$first_tmp" bash -c "
|
||||
source '$PROJECT_ROOT/lib/core/base.sh'
|
||||
ensure_mole_temp_root
|
||||
first=\$MOLE_RESOLVED_TMPDIR
|
||||
export TMPDIR='$second_tmp'
|
||||
ensure_mole_temp_root
|
||||
second=\$MOLE_RESOLVED_TMPDIR
|
||||
printf '%s|%s\n' \"\$first\" \"\$second\"
|
||||
")
|
||||
|
||||
[ "$result" = "$first_tmp|$first_tmp" ]
|
||||
}
|
||||
|
||||
@test "get_mole_temp_root falls back to /tmp when TMPDIR and invoking home are unavailable" {
|
||||
result=$(env HOME="$HOME" TMPDIR="/var/empty" bash -c "
|
||||
source '$PROJECT_ROOT/lib/core/base.sh'
|
||||
get_invoking_home() { echo '/var/empty'; }
|
||||
get_mole_temp_root
|
||||
")
|
||||
|
||||
[ "$result" = "/tmp" ]
|
||||
}
|
||||
|
||||
@test "common.sh exports resolved TMPDIR for runtime callers" {
|
||||
local blocked_tmp="$HOME/common-blocked-tmp"
|
||||
mkdir -p "$blocked_tmp"
|
||||
chmod 500 "$blocked_tmp"
|
||||
|
||||
result=$(env HOME="$HOME" TMPDIR="$blocked_tmp" bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; printf '%s\n' \"\$TMPDIR\"")
|
||||
[ "$result" = "$HOME/.cache/mole/tmp" ]
|
||||
}
|
||||
|
||||
@test "get_user_home returns home for valid user" {
|
||||
current_user="${USER:-$(whoami)}"
|
||||
result=$(bash -c "source '$PROJECT_ROOT/lib/core/base.sh'; get_user_home '$current_user'")
|
||||
|
||||
Reference in New Issue
Block a user