#!/usr/bin/env bats setup_file() { PROJECT_ROOT="$(cd "${BATS_TEST_DIRNAME}/.." && pwd)" export PROJECT_ROOT ORIGINAL_HOME="${HOME:-}" export ORIGINAL_HOME HOME="$(mktemp -d "${BATS_TEST_DIRNAME}/tmp-optimize.XXXXXX")" export HOME mkdir -p "$HOME" } teardown_file() { if [[ "$HOME" == "${BATS_TEST_DIRNAME}/tmp-"* ]]; then rm -rf "$HOME" fi if [[ -n "${ORIGINAL_HOME:-}" ]]; then export HOME="$ORIGINAL_HOME" fi } @test "needs_permissions_repair returns true when home not writable" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" USER="tester" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" stat() { echo "root"; } export -f stat if needs_permissions_repair; then echo "needs" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"needs"* ]] } @test "is_ac_power detects AC power" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" pmset() { echo "AC Power"; } export -f pmset if is_ac_power; then echo "ac" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"ac"* ]] } @test "is_memory_pressure_high detects warning" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" memory_pressure() { echo "warning"; } export -f memory_pressure if is_memory_pressure_high; then echo "high" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"high"* ]] } @test "opt_system_maintenance reports DNS and Spotlight" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" flush_dns_cache() { return 0; } mdutil() { echo "Indexing enabled."; } opt_system_maintenance EOF [ "$status" -eq 0 ] [[ "$output" == *"DNS cache flushed"* ]] [[ "$output" == *"Spotlight index verified"* ]] } @test "opt_network_optimization refreshes DNS" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" flush_dns_cache() { return 0; } opt_network_optimization EOF [ "$status" -eq 0 ] [[ "$output" == *"DNS cache refreshed"* ]] [[ "$output" == *"mDNSResponder restarted"* ]] } @test "fix_broken_preferences repairs only non-Apple preference plists" { 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/maintenance.sh" CALL_LOG="$HOME/fix-broken-preferences.log" prefs="$HOME/Library/Preferences" mkdir -p "$prefs/ByHost" touch \ "$prefs/com.example.broken.plist" \ "$prefs/com.apple.broken.plist" \ "$prefs/loginwindow.plist" \ "$prefs/ByHost/com.example.byhost.plist" \ "$prefs/ByHost/loginwindow.plist" plutil() { echo "lint:$2" >> "$CALL_LOG" return 1 } safe_remove() { echo "remove:$1" >> "$CALL_LOG" } count=$(fix_broken_preferences) echo "count=$count" cat "$CALL_LOG" EOF [ "$status" -eq 0 ] [[ "$output" == *"count=3"* ]] [[ "$output" == *"remove:$HOME/Library/Preferences/com.example.broken.plist"* ]] [[ "$output" == *"remove:$HOME/Library/Preferences/ByHost/com.example.byhost.plist"* ]] [[ "$output" == *"remove:$HOME/Library/Preferences/ByHost/loginwindow.plist"* ]] [[ "$output" != *"lint:$HOME/Library/Preferences/com.apple.broken.plist"* ]] [[ "$output" != *"lint:$HOME/Library/Preferences/loginwindow.plist"* ]] } @test "fix_broken_preferences does not count safe_remove failures" { 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/maintenance.sh" prefs="$HOME/Library/Preferences" mkdir -p "$prefs" touch "$prefs/com.example.broken.plist" plutil() { return 1; } safe_remove() { return 1; } count=$(fix_broken_preferences) echo "count=$count" EOF [ "$status" -eq 0 ] [[ "$output" == *"count=0"* ]] } @test "fix_broken_preferences does not count protected Adobe plists" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MO_DEBUG=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/maintenance.sh" prefs="$HOME/Library/Preferences" plist="$prefs/com.adobe.Photoshop.uxp_com.adobe.ccx.start.plist" mkdir -p "$prefs" touch "$plist" plutil() { return 1; } count=$(fix_broken_preferences) echo "count=$count" [[ -f "$plist" ]] && echo "still-present" EOF [ "$status" -eq 0 ] [[ "$output" == *"count=0"* ]] [[ "$output" == *"still-present"* ]] } @test "opt_cache_refresh reuses measured cache sizes for deletion" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" CALL_LOG="$HOME/cache-refresh.log" cache_dir="$HOME/Library/Caches/com.apple.QuickLook.thumbnailcache" mkdir -p "$cache_dir" touch "$cache_dir/test.db" get_path_size_kb() { echo "size:$1" >> "$CALL_LOG" echo "42" } should_protect_path() { return 1 } safe_remove() { echo "remove:$1:${3:-missing}" >> "$CALL_LOG" } opt_cache_refresh echo "cleaned=${OPTIMIZE_CACHE_CLEANED_KB:-missing}" cat "$CALL_LOG" EOF [ "$status" -eq 0 ] [[ "$output" == *"QuickLook thumbnails refreshed"* ]] [[ "$output" == *"cleaned=42"* ]] [[ "$output" == *"remove:$HOME/Library/Caches/com.apple.QuickLook.thumbnailcache:42"* ]] [ "$(grep -c "size:$HOME/Library/Caches/com.apple.QuickLook.thumbnailcache" <<< "$output")" -eq 1 ] } @test "opt_quarantine_cleanup reports clean when no database" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" opt_quarantine_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"already clean"* ]] } @test "opt_quarantine_cleanup reports entries in dry-run" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Stub whitelist check to always allow. should_protect_path() { return 1; } # Create a mock quarantine database with entries. mkdir -p "$HOME/Library/Preferences" local_db="$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2" sqlite3 "$local_db" "CREATE TABLE IF NOT EXISTS LSQuarantineEvent (id TEXT);" sqlite3 "$local_db" "INSERT INTO LSQuarantineEvent VALUES ('test1');" sqlite3 "$local_db" "INSERT INTO LSQuarantineEvent VALUES ('test2');" opt_quarantine_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"Quarantine history cleared"* ]] [[ "$output" == *"2 entries"* ]] } @test "opt_quarantine_cleanup skips when sqlite3 unavailable" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" /bin/bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" export PATH="/nonexistent" opt_quarantine_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"sqlite3 unavailable"* ]] } @test "execute_optimization dispatches quarantine_cleanup" { 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" opt_quarantine_cleanup() { echo "quarantine"; } execute_optimization quarantine_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"quarantine"* ]] } @test "opt_sqlite_vacuum reports sqlite3 unavailable" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" /bin/bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" export PATH="/nonexistent" opt_sqlite_vacuum EOF [ "$status" -eq 0 ] [[ "$output" == *"sqlite3 unavailable"* ]] } @test "optimize does not auto-fix Gatekeeper anymore" { run grep -n "spctl --master-enable\\|SECURITY_FIXES+=([\"']gatekeeper|" "$PROJECT_ROOT/bin/optimize.sh" [ "$status" -eq 1 ] } @test "opt_dock_refresh reports refresh" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" opt_dock_refresh EOF [ "$status" -eq 0 ] [[ "$output" == *"Dock refreshed"* ]] } @test "opt_prevent_network_dsstore dry-run reports enabled" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" defaults() { case "$1" in read) return 1 ;; write) return 0 ;; esac } opt_prevent_network_dsstore EOF [ "$status" -eq 0 ] [[ "$output" == *".DS_Store prevention enabled"* ]] } @test "opt_prevent_network_dsstore idempotent when already set" { 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" defaults() { if [[ "$1" == "read" ]]; then echo "1" return 0 fi return 0 } opt_prevent_network_dsstore EOF [ "$status" -eq 0 ] [[ "$output" == *"already enabled"* ]] } @test "prevent_network_dsstore is optional in optimize health json" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/check/health_json.sh" json="$(generate_health_json | tr '\n' ' ')" if printf '%s\n' "$json" | grep -q '"action": "prevent_network_dsstore".*"safe": false'; then echo "optional" fi if printf '%s\n' "$json" | grep -q 'persistent Finder preference'; then echo "described" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"optional"* ]] [[ "$output" == *"described"* ]] } @test "execute_optimization dispatches actions" { 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" opt_dock_refresh() { echo "dock"; } execute_optimization dock_refresh EOF [ "$status" -eq 0 ] [[ "$output" == *"dock"* ]] } @test "execute_optimization rejects unknown action" { 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" execute_optimization unknown_action EOF [ "$status" -eq 1 ] [[ "$output" == *"Unknown action"* ]] } @test "opt_prune_spotlight_orphan_rules removes orphan but keeps system, apple and installed rules" { 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" PLIST="$HOME/Library/Preferences/com.apple.spotlight.plist" mkdir -p "$(dirname "$PLIST")" rm -f "$PLIST" /usr/libexec/PlistBuddy \ -c "Add :EnabledPreferenceRules array" \ -c "Add :EnabledPreferenceRules:0 string System.iphoneApps" \ -c "Add :EnabledPreferenceRules:1 string com.apple.Safari" \ -c "Add :EnabledPreferenceRules:2 string com.installed.App" \ -c "Add :EnabledPreferenceRules:3 string com.lm.william.TwinklingCard" \ "$PLIST" >/dev/null 2>&1 defaults() { case "$1" in read) return 0 ;; write | delete) echo "DEFAULTS: $*" ;; esac } bundle_has_installed_app() { [[ "$1" == "com.installed.App" ]]; } opt_prune_spotlight_orphan_rules EOF [ "$status" -eq 0 ] [[ "$output" == *"Removed 1 orphan"* ]] [[ "$output" == *"DEFAULTS: write"* ]] [[ "$output" == *"System.iphoneApps"* ]] [[ "$output" == *"com.apple.Safari"* ]] [[ "$output" == *"com.installed.App"* ]] [[ "$output" != *"com.lm.william.TwinklingCard"* ]] } @test "opt_prune_spotlight_orphan_rules dry-run reports but does not write" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" PLIST="$HOME/Library/Preferences/com.apple.spotlight.plist" mkdir -p "$(dirname "$PLIST")" rm -f "$PLIST" /usr/libexec/PlistBuddy \ -c "Add :EnabledPreferenceRules array" \ -c "Add :EnabledPreferenceRules:0 string System.iphoneApps" \ -c "Add :EnabledPreferenceRules:1 string com.lm.william.TwinklingCard" \ "$PLIST" >/dev/null 2>&1 defaults() { case "$1" in read) return 0 ;; write | delete) echo "DEFAULTS: $*" ;; esac } bundle_has_installed_app() { return 1; } opt_prune_spotlight_orphan_rules EOF [ "$status" -eq 0 ] [[ "$output" == *"Would remove 1 orphan"* ]] [[ "$output" != *"DEFAULTS: write"* ]] [[ "$output" != *"DEFAULTS: delete"* ]] } @test "opt_prune_spotlight_orphan_rules reports clean when every rule still has its app" { 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" PLIST="$HOME/Library/Preferences/com.apple.spotlight.plist" mkdir -p "$(dirname "$PLIST")" rm -f "$PLIST" /usr/libexec/PlistBuddy \ -c "Add :EnabledPreferenceRules array" \ -c "Add :EnabledPreferenceRules:0 string System.iphoneApps" \ -c "Add :EnabledPreferenceRules:1 string com.apple.Safari" \ -c "Add :EnabledPreferenceRules:2 string com.installed.App" \ "$PLIST" >/dev/null 2>&1 defaults() { case "$1" in read) return 0 ;; write | delete) echo "DEFAULTS: $*" ;; esac } bundle_has_installed_app() { return 0; } opt_prune_spotlight_orphan_rules EOF [ "$status" -eq 0 ] [[ "$output" == *"already clean"* ]] [[ "$output" != *"DEFAULTS: write"* ]] } @test "opt_prune_spotlight_orphan_rules reports clean when rules key is absent" { 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" defaults() { return 1; } opt_prune_spotlight_orphan_rules EOF [ "$status" -eq 0 ] [[ "$output" == *"already clean"* ]] } @test "execute_optimization dispatches spotlight_orphan_rules_cleanup" { 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" opt_prune_spotlight_orphan_rules() { echo "pruned"; } execute_optimization spotlight_orphan_rules_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"pruned"* ]] } @test "opt_launch_services_rebuild handles missing lsregister without exiting" { 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" get_lsregister_path() { echo "" return 0 } opt_launch_services_rebuild echo "survived" EOF [ "$status" -eq 0 ] [[ "$output" == *"lsregister not found"* ]] [[ "$output" == *"survived"* ]] } @test "opt_launch_agents_cleanup reports healthy when no directory" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" opt_launch_agents_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"Launch Agents all healthy"* ]] } @test "opt_launch_agents_cleanup detects broken agents" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Create mock LaunchAgents with a broken binary reference. mkdir -p "$HOME/Library/LaunchAgents" cat > "$HOME/Library/LaunchAgents/com.test.broken.plist" <<'PLIST' Label com.test.broken ProgramArguments /nonexistent/binary PLIST safe_remove() { return 0; } opt_launch_agents_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"Cleaned 1 broken Launch Agent"* ]] } @test "opt_launch_agents_cleanup skips healthy agents" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Clean up any leftover plists from previous tests. rm -f "$HOME/Library/LaunchAgents"/*.plist 2>/dev/null || true # Create mock LaunchAgent pointing to an existing binary. mkdir -p "$HOME/Library/LaunchAgents" cat > "$HOME/Library/LaunchAgents/com.test.healthy.plist" < Label com.test.healthy ProgramArguments /bin/bash PLIST opt_launch_agents_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"Launch Agents all healthy"* ]] } @test "opt_launch_agents_cleanup spares agents on unmounted volumes" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Clean up any leftover plists from previous tests. rm -f "$HOME/Library/LaunchAgents"/*.plist 2>/dev/null || true # A program on an unplugged /Volumes/ is missing but not broken; # the volume is simply unmounted, so the agent must be left alone. mkdir -p "$HOME/Library/LaunchAgents" cat > "$HOME/Library/LaunchAgents/com.test.external.plist" <<'PLIST' Label com.test.external ProgramArguments /Volumes/MoleNonexistentDisk/tool PLIST opt_launch_agents_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"Launch Agents all healthy"* ]] } @test "execute_optimization dispatches launch_agents_cleanup" { 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" opt_launch_agents_cleanup() { echo "launch_agents"; } execute_optimization launch_agents_cleanup EOF [ "$status" -eq 0 ] [[ "$output" == *"launch_agents"* ]] } @test "opt_periodic_maintenance reports current when log is fresh" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" periodic() { true; } export -f periodic tmplog="$(mktemp /tmp/mole-test-daily.XXXXXX)" touch "$tmplog" MOLE_PERIODIC_LOG="$tmplog" opt_periodic_maintenance rm -f "$tmplog" EOF [ "$status" -eq 0 ] [[ "$output" == *"already current"* ]] } @test "opt_periodic_maintenance ignores non-BSD stat earlier in PATH" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" periodic() { true; } export -f periodic tmpdir="$(mktemp -d /tmp/mole-test-stat-path.XXXXXX)" mkdir -p "$tmpdir/bin" cat > "$tmpdir/bin/stat" <<'STAT' #!/usr/bin/env bash echo " File: /var/log/daily.out" STAT chmod +x "$tmpdir/bin/stat" tmplog="$tmpdir/daily.out" touch "$tmplog" PATH="$tmpdir/bin:$PATH" MOLE_PERIODIC_LOG="$tmplog" opt_periodic_maintenance rm -rf "$tmpdir" EOF [ "$status" -eq 0 ] [[ "$output" == *"already current"* ]] [[ "$output" != *"unbound variable"* ]] } @test "opt_periodic_maintenance triggers in dry-run when log is stale" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" periodic() { true; } export -f periodic tmplog="$(mktemp /tmp/mole-test-daily.XXXXXX)" touch -t "$(date -v-10d +%Y%m%d%H%M.%S)" "$tmplog" MOLE_PERIODIC_LOG="$tmplog" opt_periodic_maintenance rm -f "$tmplog" EOF [ "$status" -eq 0 ] [[ "$output" == *"Periodic maintenance triggered"* ]] } @test "opt_periodic_maintenance triggers in dry-run when log is missing" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" periodic() { true; } export -f periodic MOLE_PERIODIC_LOG="/tmp/mole-test-nonexistent-daily.out" opt_periodic_maintenance EOF [ "$status" -eq 0 ] [[ "$output" == *"Periodic maintenance triggered"* ]] } @test "run_optimize_diagnostics flags sustained CloudShell as primary bottleneck" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'120 /Applications/AliEntSafe.app/Contents/Services/CloudShell.app/Contents/MacOS/CloudShell --type=event-capture\n35 /usr/libexec/syspolicyd\n20 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'140 /Applications/AliEntSafe.app/Contents/Services/CloudShell.app/Contents/MacOS/CloudShell --type=event-processor\n30 /usr/libexec/syspolicyd\n18 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { return 1; } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"Likely bottleneck: CloudShell / AliEntSafe"* ]] [[ "$output" == *"Mole will not terminate enterprise security processes"* ]] } @test "run_optimize_diagnostics treats CoreSimulator images as informational for syspolicyd" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'55 /usr/libexec/syspolicyd\n12 /usr/libexec/diskimagesiod' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'60 /usr/libexec/syspolicyd\n10 /Library/Developer/PrivateFrameworks/CoreSimulator.framework/Resources/bin/simdiskimaged' \ MOLE_OPTIMIZE_SPCTL_STATUS="assessments enabled" \ MOLE_OPTIMIZE_HDIUTIL_INFO=$'================================================\nimage-path : /System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/example.asset/AssetData/Restore/000.dmg\n/dev/disk8s1\t/Library/Developer/CoreSimulator/Volumes/iOS_23E244\n' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { return 1; } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"Likely bottleneck: syspolicyd"* ]] [[ "$output" == *"Gatekeeper status: assessments enabled"* ]] [[ "$output" == *"Only system-managed CoreSimulator images are mounted"* ]] [[ "$output" != *"Mounted image detach candidates"* ]] } @test "run_optimize_diagnostics suppresses one-off CPU spikes" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'180 /Applications/AliEntSafe.app/Contents/Services/CloudShell.app/Contents/MacOS/CloudShell --type=event-capture' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'5 /Applications/AliEntSafe.app/Contents/Services/CloudShell.app/Contents/MacOS/CloudShell --type=event-capture' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { return 1; } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"No obvious sustained high-CPU bottleneck detected"* ]] } @test "run_optimize_diagnostics lists user-mounted image detach candidates in dry-run" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'1 /usr/sbin/distnoted' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'1 /usr/sbin/distnoted' \ MOLE_OPTIMIZE_HDIUTIL_INFO=$'================================================\nimage-path : /Users/test/Downloads/TestInstaller.dmg\n/dev/disk14s1\t/Volumes/Test Installer\n' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { return 1; } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"Mounted image detach candidates:"* ]] [[ "$output" == *"/Volumes/Test Installer"* ]] [[ "$output" == *"Would offer detach for 1 mounted image"* ]] } @test "run_optimize_diagnostics skips protected mounted images" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 \ MOLE_OPTIMIZE_HDIUTIL_INFO=$'================================================\nimage-path : /Users/test/Downloads/KeepMe.dmg\n/dev/disk15s1\t/Volumes/KeepMe\n' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { [[ "$1" == "/Volumes/KeepMe" ]] } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" != *"Mounted image detach candidates:"* ]] } @test "run_optimize_diagnostics honors optimize whitelist paths for mounted images (#977)" { mkdir -p "$HOME/.config/mole" cat > "$HOME/.config/mole/whitelist_optimize" <<'EOF' system_maintenance /Volumes/EXT3/Mail/TB.dmg /Volumes/mail EOF run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'1 /usr/sbin/distnoted' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'1 /usr/sbin/distnoted' \ MOLE_OPTIMIZE_HDIUTIL_INFO=$'================================================\nimage-path : /Volumes/EXT3/Mail/TB.dmg\n/dev/disk6s2 Apple_HFS /Volumes/mail\n' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/manage/whitelist.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" load_whitelist optimize run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"No obvious sustained high-CPU bottleneck detected"* ]] [[ "$output" != *"Mounted image detach candidates:"* ]] [[ "$output" != *"Would offer detach"* ]] } @test "run_optimize_diagnostics stays quiet when nothing matches" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" \ MOLE_OPTIMIZE_PS_SAMPLE_1=$'4 /usr/sbin/distnoted\n3 /usr/libexec/coreaudiod' \ MOLE_OPTIMIZE_PS_SAMPLE_2=$'5 /usr/sbin/distnoted\n2 /usr/libexec/coreaudiod' \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/diagnostics.sh" is_path_whitelisted() { return 1; } run_optimize_diagnostics EOF [ "$status" -eq 0 ] [[ "$output" == *"No obvious sustained high-CPU bottleneck detected"* ]] } @test "opt_periodic_maintenance skips when periodic command missing" { 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" command() { if [[ "$1" == "-v" && "$2" == "periodic" ]]; then return 1 fi builtin command "$@" } export -f command opt_periodic_maintenance EOF [ "$status" -eq 0 ] [[ "$output" == *"Periodic maintenance skipped (not available on this macOS version)"* ]] } @test "execute_optimization dispatches periodic_maintenance" { 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" opt_periodic_maintenance() { echo "periodic"; } execute_optimization periodic_maintenance EOF [ "$status" -eq 0 ] [[ "$output" == *"periodic"* ]] } @test "execute_optimization skips whitelisted task ids" { 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" is_whitelisted() { [[ "$1" == "dock_refresh" ]]; } opt_dock_refresh() { echo "UNEXPECTED_DOCK"; } execute_optimization dock_refresh EOF [ "$status" -eq 0 ] [[ "$output" == *"Skipped (whitelisted): dock_refresh"* ]] [[ "$output" != *"UNEXPECTED_DOCK"* ]] } @test "optimize whitelist is loaded before system health checks" { run env PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail load_line=$(awk '/load_whitelist "optimize"/ { print NR; exit }' "$PROJECT_ROOT/bin/optimize.sh") health_line=$(awk '/^[[:space:]]*show_system_health / { print NR; exit }' "$PROJECT_ROOT/bin/optimize.sh") if [[ "$load_line" -lt "$health_line" ]]; then echo "ordered" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"ordered"* ]] } @test "optimize whitelist items include task ids" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/manage/whitelist.sh" get_optimize_whitelist_items EOF [ "$status" -eq 0 ] [[ "$output" == *"Permission Repair|disk_permissions_repair|optimize_task"* ]] [[ "$output" == *"Login Items Audit|login_items_audit|optimize_task"* ]] } @test "_login_item_app_exists finds nested helper app bundles" { local helper="$HOME/Applications/Roon.app/Contents/RoonServer.app" mkdir -p "$helper" 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" mdfind() { return 1; } sfltool() { return 1; } export -f mdfind sfltool if _login_item_app_exists "RoonServer"; then echo "found" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"found"* ]] } @test "_login_item_app_exists finds nested helper apps by bundle display name" { local helper="$HOME/Applications/Adobe Acrobat DC.app/Contents/Helpers/AdobeResourceSynchronizer.app" mkdir -p "$helper/Contents" cat > "$helper/Contents/Info.plist" <<'PLIST' CFBundleDisplayName Acrobat Collaboration Synchronizer CFBundleName AdobeResourceSynchronizer PLIST 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" mdfind() { return 1; } sfltool() { return 1; } export -f mdfind sfltool if _login_item_app_exists "Acrobat Collaboration Synchronizer"; then echo "found" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"found"* ]] } @test "_login_item_app_exists trusts an existing System Events login item path" { local helper="$HOME/Applications/Adobe Acrobat DC.app/Contents/Helpers/AdobeResourceSynchronizer.app" mkdir -p "$helper" run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MO_DEBUG=1 HELPER_PATH="$helper" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" mdfind() { return 1; } sfltool() { return 1; } export -f mdfind sfltool if _login_item_app_exists "Acrobat Collaboration Synchronizer" "$HELPER_PATH" 2>&1; then echo "found" fi EOF [ "$status" -eq 0 ] [[ "$output" == *"found"* ]] [[ "$output" == *"resolved by login item path"* ]] } @test "optimize_sudo_available returns false when sudo session was denied" { run env PROJECT_ROOT="$PROJECT_ROOT" MOLE_OPTIMIZE_SUDO_AVAILABLE="false" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" if optimize_sudo_available; then echo "WRONG: returned true under denied sudo" exit 1 fi echo "ok" EOF [ "$status" -eq 0 ] [[ "$output" == *"ok"* ]] } @test "optimize_sudo_available returns false in test mode regardless of optimize entrypoint" { # Ad-hoc task invocation under MOLE_TEST_NO_AUTH must hard-deny sudo # even when MOLE_OPTIMIZE_SUDO_AVAILABLE was never set by bin/optimize.sh. run env PROJECT_ROOT="$PROJECT_ROOT" MOLE_TEST_NO_AUTH=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" unset MOLE_OPTIMIZE_SUDO_AVAILABLE if optimize_sudo_available; then echo "WRONG: leaked sudo to test-mode caller" exit 1 fi echo "ok" EOF [ "$status" -eq 0 ] [[ "$output" == *"ok"* ]] } @test "flush_dns_cache does not invoke sudo under MOLE_TEST_NO_AUTH" { # Reproduces the reported regression: ad-hoc flush_dns_cache under test # mode used to fall through optimize_sudo_available and reach `sudo dscacheutil`. run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_TEST_NO_AUTH=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" unset MOLE_OPTIMIZE_SUDO_AVAILABLE trace="$HOME/sudo_calls.log" : > "$trace" sudo() { printf 'SUDO_CALLED:%s\n' "$*" >> "$trace" return 0 } export -f sudo flush_dns_cache 2>&1 || true if [[ -s "$trace" ]]; then echo "WRONG: sudo invoked under test mode:" cat "$trace" exit 1 fi echo "ok" EOF [ "$status" -eq 0 ] [[ "$output" == *"ok"* ]] } @test "sudo-required optimize tasks short-circuit without invoking sudo when access denied" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" \ MOLE_OPTIMIZE_SUDO_AVAILABLE="false" \ MOLE_DRY_RUN="0" \ bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/core/common.sh" source "$PROJECT_ROOT/lib/optimize/tasks.sh" trace="$HOME/sudo_calls.log" : > "$trace" sudo() { printf 'sudo %s\n' "$*" >> "$trace" return 0 } export -f sudo # Force the "needs work" branch so each task reaches its sudo block. is_memory_pressure_high() { return 0; } needs_permissions_repair() { return 0; } has_active_vpn_interface() { return 1; } route() { return 1; } dscacheutil() { return 1; } mdutil() { echo "Indexing enabled."; } mdfind() { sleep 4; } get_epoch_seconds() { date +%s; } is_ac_power() { return 0; } pgrep() { return 1; } system_profiler() { return 1; } plutil() { return 1; } defaults() { return 1; } get_path_size_kb() { echo "0"; } debug_log() { :; } opt_msg() { :; } start_inline_spinner() { :; } stop_inline_spinner() { :; } opt_memory_pressure_relief 2>&1 || true opt_network_stack_optimize 2>&1 || true opt_disk_permissions_repair 2>&1 || true opt_periodic_maintenance 2>&1 || true flush_dns_cache 2>&1 || true if [[ -s "$trace" ]]; then echo "WRONG: sudo invoked while denied:" cat "$trace" exit 1 fi echo "ok" EOF [ "$status" -eq 0 ] [[ "$output" == *"ok"* ]] } @test "opt_diag_parse_image_mount_pairs ignores image-alias/icon-path lines (#960)" { 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/diagnostics.sh" # Sample hdiutil info block reproducing the issue from #960. The image-alias # line carries an absolute path identical to image-path, which the previous # extract_mount regex incorrectly accepted as a mount point. Only the # /dev/disk* line is a real mount. sample=$(cat <<'HDIUTIL' ================================================ image-path : /Volumes/EXT3/Mail/TB.dmg image-alias : /Volumes/EXT3/Mail/TB.dmg shadow-path : icon-path : /System/Library/PrivateFrameworks/DiskImages.framework/Resources/CDiskImage.icns image-type : read-only /dev/disk6 Apple_partition_scheme /dev/disk6s1 Apple_partition_map /dev/disk6s2 Apple_HFS /Volumes/mail HDIUTIL ) opt_diag_parse_image_mount_pairs "$sample" EOF [ "$status" -eq 0 ] # Expect exactly one pair: image=/Volumes/EXT3/Mail/TB.dmg mount=/Volumes/mail line_count=$(printf '%s\n' "$output" | awk 'NF' | wc -l | tr -d ' ') [ "$line_count" = "1" ] [[ "$output" == *"/Volumes/EXT3/Mail/TB.dmg"$'\t'"/Volumes/mail"* ]] # Critical regression guard: image-alias line must not surface as a mount. [[ "$output" != *"/Volumes/EXT3/Mail/TB.dmg"$'\t'"/Volumes/EXT3/Mail/TB.dmg"* ]] } @test "has_active_vpn_interface respects MOLE_ASSUME_VPN_ACTIVE override" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_ASSUME_VPN_ACTIVE=1 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Force scutil/route to fail loudly so the env override is the only path. scutil() { echo "should not be called" >&2; return 1; } route() { echo "should not be called" >&2; return 1; } export -f scutil route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"vpn"* ]] [[ "$output" != *"no_vpn"* ]] [[ "$output" != *"should not be called"* ]] } @test "has_active_vpn_interface returns false when MOLE_ASSUME_VPN_ACTIVE=0" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_ASSUME_VPN_ACTIVE=0 bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" # scutil/route should not run when env says no. scutil() { echo "should not be called" >&2; return 1; } route() { echo "should not be called" >&2; return 1; } export -f scutil route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"no_vpn"* ]] [[ "$output" != *"should not be called"* ]] } @test "has_active_vpn_interface detects scutil Connected entry" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" scutil() { cat <<'NC' * (Disconnected) AA1B2C3D-1111-2222-3333-444455556666 PPP (L2TP) "Office VPN" [L2TP] * (Connected) 87654321-aaaa-bbbb-cccc-dddddddddddd IPSec (IKEv2) "Remote Office"[IKEv2] NC } export -f scutil # Default route should NOT be consulted once scutil already proved a VPN active. route() { echo "should not be called" >&2; return 1; } export -f route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"vpn"* ]] [[ "$output" != *"should not be called"* ]] } @test "has_active_vpn_interface ignores scutil entries that are all Disconnected" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" scutil() { cat <<'NC' * (Disconnected) AA1B2C3D-1111-2222-3333-444455556666 PPP (L2TP) "Office VPN" [L2TP] * (Disconnected) 87654321-aaaa-bbbb-cccc-dddddddddddd IPSec (IKEv2) "Remote Office"[IKEv2] NC } # Default route via en0 (no VPN). This is the user's case in #959. route() { cat <<'ROUTE' route to: default destination: default mask: default gateway: 192.168.1.1 interface: en0 ROUTE } export -f scutil route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"no_vpn"* ]] } @test "has_active_vpn_interface detects full-tunnel via utun default route" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" # No system-managed VPN configured in scutil. scutil() { echo ""; } # Default route owned by utun3 -> full-tunnel VPN (WireGuard / OpenVPN style). route() { cat <<'ROUTE' route to: default destination: default mask: default gateway: 10.8.0.1 interface: utun3 ROUTE } export -f scutil route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"vpn"* ]] } @test "has_active_vpn_interface returns false for iCloud Private Relay style utun (#959)" { run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF' set -euo pipefail source "$PROJECT_ROOT/lib/optimize/tasks.sh" # Private Relay / Continuity create utun* but the default route stays on en0. # The old netstat/ifconfig probe would have false-positived this; the new # probe must not. scutil() { echo ""; } route() { cat <<'ROUTE' route to: default destination: default mask: default gateway: 192.168.1.1 interface: en0 ROUTE } export -f scutil route if has_active_vpn_interface; then echo "vpn"; else echo "no_vpn"; fi EOF [ "$status" -eq 0 ] [[ "$output" == *"no_vpn"* ]] } @test "opt_dock_refresh preserves desktoppicture.db and other db files (#995)" { local dock_support="$HOME/Library/Application Support/Dock" mkdir -p "$dock_support" : > "$dock_support/desktoppicture.db" : > "$dock_support/another.db" 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" killall() { return 0; } export -f killall opt_dock_refresh EOF [ "$status" -eq 0 ] [ -f "$HOME/Library/Application Support/Dock/desktoppicture.db" ] [ -f "$HOME/Library/Application Support/Dock/another.db" ] } @test "opt_diag_parse_image_mount_pairs handles multiple blocks" { 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/diagnostics.sh" sample=$(cat <<'HDIUTIL' ================================================ image-path : /Users/test/Sample.dmg image-alias : /Users/test/Sample.dmg /dev/disk5s2 Apple_HFS /Volumes/Sample ================================================ image-path : /Library/Developer/CoreSimulator/Volumes/iOS_17.dmg image-alias : /Library/Developer/CoreSimulator/Volumes/iOS_17.dmg /dev/disk7s1 Apple_APFS /Library/Developer/CoreSimulator/Volumes/iOS_17.0 HDIUTIL ) opt_diag_parse_image_mount_pairs "$sample" | awk 'NF' | sort EOF [ "$status" -eq 0 ] [[ "$output" == *"/Users/test/Sample.dmg"$'\t'"/Volumes/Sample"* ]] [[ "$output" == *"/Library/Developer/CoreSimulator/Volumes/iOS_17.dmg"$'\t'"/Library/Developer/CoreSimulator/Volumes/iOS_17.0"* ]] line_count=$(printf '%s\n' "$output" | awk 'NF' | wc -l | tr -d ' ') [ "$line_count" = "2" ] }