47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package snapshot
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWrapPermissionError(t *testing.T) {
|
|
// Non-permission errors pass through unchanged.
|
|
plain := errors.New("disk on fire")
|
|
|
|
got := wrapPermissionError("/some/path", plain)
|
|
if !errors.Is(got, plain) {
|
|
t.Errorf("non-permission error should pass through, got %v", got)
|
|
}
|
|
|
|
// Permission errors get remediation instructions.
|
|
permErr := fmt.Errorf("open /x: %w", os.ErrPermission)
|
|
wrapped := wrapPermissionError("/Users/u/Library/Calendars", permErr)
|
|
|
|
if !errors.Is(wrapped, os.ErrPermission) {
|
|
t.Error("wrapped error should still match os.ErrPermission")
|
|
}
|
|
|
|
if !strings.Contains(wrapped.Error(), "/Users/u/Library/Calendars") {
|
|
t.Error("wrapped error should name the offending path")
|
|
}
|
|
|
|
if runtime.GOOS == "darwin" {
|
|
if !strings.Contains(wrapped.Error(), "Full Disk Access") {
|
|
t.Errorf("macOS permission error should mention Full Disk Access:\n%s", wrapped.Error())
|
|
}
|
|
|
|
if !strings.Contains(wrapped.Error(), "System Settings") {
|
|
t.Errorf("macOS permission error should point at System Settings:\n%s", wrapped.Error())
|
|
}
|
|
} else {
|
|
if !strings.Contains(wrapped.Error(), "--skip-errors") {
|
|
t.Errorf("non-macOS permission error should mention --skip-errors:\n%s", wrapped.Error())
|
|
}
|
|
}
|
|
}
|