mirror of
https://github.com/tw93/Mole.git
synced 2026-03-22 16:45:07 +00:00
Fix cleanup regressions and analyze navigation
Refs #605 #607 #608 #609 #610
This commit is contained in:
@@ -645,3 +645,74 @@ EOF
|
||||
[[ "$output" == *"FOUND: .hidden_dir"* ]]
|
||||
[[ "$output" == *"FOUND: regular_file.txt"* ]]
|
||||
}
|
||||
|
||||
@test "validate_external_volume_target canonicalizes root before comparing target" {
|
||||
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
|
||||
set -euo pipefail
|
||||
source "$PROJECT_ROOT/lib/core/common.sh"
|
||||
source "$PROJECT_ROOT/lib/clean/user.sh"
|
||||
|
||||
mock_bin="$HOME/bin"
|
||||
mkdir -p "$mock_bin"
|
||||
cat > "$mock_bin/diskutil" <<'MOCK'
|
||||
#!/bin/bash
|
||||
exit 0
|
||||
MOCK
|
||||
chmod +x "$mock_bin/diskutil"
|
||||
export PATH="$mock_bin:$PATH"
|
||||
|
||||
real_root="$(mktemp -d "$HOME/ext-real.XXXXXX")"
|
||||
link_root="$HOME/ext-link"
|
||||
ln -s "$real_root" "$link_root"
|
||||
mkdir -p "$link_root/USB"
|
||||
export MOLE_EXTERNAL_VOLUMES_ROOT="$link_root"
|
||||
|
||||
resolved=$(validate_external_volume_target "$link_root/USB")
|
||||
echo "RESOLVED=$resolved"
|
||||
EOF
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"RESOLVED="*"/USB"* ]]
|
||||
[[ "$output" != *"must be under"* ]]
|
||||
}
|
||||
|
||||
@test "clean_app_caches caps precise sandbox size scans when many containers exist" {
|
||||
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" DRY_RUN=true MOLE_CONTAINER_CACHE_PRECISE_SIZE_LIMIT=2 bash --noprofile --norc <<'EOF'
|
||||
set -euo pipefail
|
||||
source "$PROJECT_ROOT/lib/core/common.sh"
|
||||
source "$PROJECT_ROOT/lib/clean/user.sh"
|
||||
start_section_spinner() { :; }
|
||||
stop_section_spinner() { :; }
|
||||
safe_clean() { :; }
|
||||
clean_support_app_data() { :; }
|
||||
clean_group_container_caches() { :; }
|
||||
bytes_to_human() { echo "0B"; }
|
||||
note_activity() { :; }
|
||||
should_protect_data() { return 1; }
|
||||
is_critical_system_component() { return 1; }
|
||||
files_cleaned=0
|
||||
total_size_cleaned=0
|
||||
total_items=0
|
||||
|
||||
count_file="$HOME/size-count"
|
||||
get_path_size_kb() {
|
||||
local count
|
||||
count=$(cat "$count_file" 2> /dev/null || echo "0")
|
||||
count=$((count + 1))
|
||||
echo "$count" > "$count_file"
|
||||
echo "1"
|
||||
}
|
||||
|
||||
for i in $(seq 1 5); do
|
||||
mkdir -p "$HOME/Library/Containers/com.example.$i/Data/Library/Caches"
|
||||
touch "$HOME/Library/Containers/com.example.$i/Data/Library/Caches/file-$i.tmp"
|
||||
done
|
||||
|
||||
clean_app_caches
|
||||
echo "SIZE_CALLS=$(cat "$count_file")"
|
||||
EOF
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"Sandboxed app caches"* ]]
|
||||
[[ "$output" == *"SIZE_CALLS=2"* ]]
|
||||
}
|
||||
|
||||
@@ -237,6 +237,34 @@ EOF
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
@test "mo clean --help includes external volume option" {
|
||||
run env HOME="$HOME" "$PROJECT_ROOT/mole" clean --help
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"--external PATH"* ]]
|
||||
}
|
||||
|
||||
@test "mo clean --external accepts canonicalized custom root" {
|
||||
real_root="$(mktemp -d "$HOME/ext-real.XXXXXX")"
|
||||
link_root="$HOME/ext-link"
|
||||
ln -s "$real_root" "$link_root"
|
||||
mkdir -p "$link_root/USB/.Trashes"
|
||||
touch "$link_root/USB/.Trashes/cache.tmp"
|
||||
|
||||
mock_bin="$HOME/mock-bin"
|
||||
mkdir -p "$mock_bin"
|
||||
cat > "$mock_bin/diskutil" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x "$mock_bin/diskutil"
|
||||
|
||||
run env HOME="$HOME" PATH="$mock_bin:$PATH" MOLE_EXTERNAL_VOLUMES_ROOT="$link_root" \
|
||||
MOLE_TEST_NO_AUTH=1 "$PROJECT_ROOT/mole" clean --external "$link_root/USB" --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"Clean External Volume"* ]]
|
||||
[[ "$output" == *"External volume cleanup"* ]]
|
||||
}
|
||||
|
||||
@test "touchid status reflects pam file contents" {
|
||||
pam_file="$HOME/pam_test"
|
||||
cat >"$pam_file" <<'EOF'
|
||||
|
||||
@@ -141,6 +141,54 @@ EOF
|
||||
[[ "$output" == *"Font cache cleared"* ]]
|
||||
}
|
||||
|
||||
@test "opt_font_cache_rebuild skips when Firefox helpers are running" {
|
||||
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
|
||||
set -euo pipefail
|
||||
source "$PROJECT_ROOT/lib/core/common.sh"
|
||||
source "$PROJECT_ROOT/lib/optimize/tasks.sh"
|
||||
pgrep() {
|
||||
case "$*" in
|
||||
*"Firefox|org\\.mozilla\\.firefox|firefox .*contentproc|firefox .*plugin-container|firefox .*crashreporter"*)
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
export -f pgrep
|
||||
opt_font_cache_rebuild
|
||||
EOF
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"Skipped font cache rebuild because browsers or helpers are still running: Firefox"* ]]
|
||||
}
|
||||
|
||||
@test "browser_family_is_running does not treat generic renderer helpers as Zen Browser" {
|
||||
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
|
||||
set -euo pipefail
|
||||
source "$PROJECT_ROOT/lib/core/common.sh"
|
||||
source "$PROJECT_ROOT/lib/optimize/tasks.sh"
|
||||
pgrep() {
|
||||
case "$*" in
|
||||
*"renderer|gpu"*)
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
export -f pgrep
|
||||
if browser_family_is_running "Zen Browser"; then
|
||||
echo "MATCHED"
|
||||
fi
|
||||
EOF
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" != *"MATCHED"* ]]
|
||||
}
|
||||
|
||||
@test "opt_dock_refresh clears cache files" {
|
||||
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF'
|
||||
set -euo pipefail
|
||||
|
||||
Reference in New Issue
Block a user