//nolint:testpackage // exercises the unexported copyFile helper package snapshot import ( "os" "path/filepath" "syscall" "testing" "github.com/spf13/afero" ) // TestCopyFileExportCopyMode verifies that the exported snapshot database // copy is created owner-only (0600), even under a lenient 022 umask that // would otherwise leave a fresh file world-readable. // //nolint:paralleltest // syscall.Umask is process-global; parallel tests would clash func TestCopyFileExportCopyMode(t *testing.T) { restore := syscall.Umask(0o022) defer syscall.Umask(restore) dir := t.TempDir() src := filepath.Join(dir, "index.sqlite") err := os.WriteFile(src, []byte("index data"), 0o600) if err != nil { t.Fatalf("creating source index: %v", err) } dst := filepath.Join(dir, "snapshot.db") sm := &SnapshotManager{fs: afero.NewOsFs()} err = sm.copyFile(src, dst) if err != nil { t.Fatalf("copyFile: %v", err) } info, err := os.Stat(dst) if err != nil { t.Fatalf("stat export copy: %v", err) } got := info.Mode().Perm() if got != 0o600 { t.Fatalf("export copy permissions = %#o, want %#o", got, 0o600) } }