Files
ThothII/tools/thothctl/internal/safeio/files_darwin_test.go
T

45 lines
1.1 KiB
Go

//go:build darwin
package safeio
import (
"errors"
"os"
"path/filepath"
"testing"
"golang.org/x/sys/unix"
)
func TestWriteCanonicalExclusiveClassifiesUnlinkFailureAsIndeterminate(t *testing.T) {
root := t.TempDir()
stage := filepath.Join(root, "stage")
if err := os.WriteFile(stage, []byte("candidate"), 0o600); err != nil {
t.Fatal(err)
}
dir, err := unix.Open(root, unix.O_RDONLY|unix.O_DIRECTORY, 0)
if err != nil {
t.Fatal(err)
}
defer unix.Close(dir)
fd, err := unix.Openat(dir, "stage", unix.O_RDWR, 0)
if err != nil {
t.Fatal(err)
}
file := os.NewFile(uintptr(fd), "stage")
if file == nil {
t.Fatal("os.NewFile returned nil")
}
defer file.Close()
var staged unix.Stat_t
if err := unix.Fstat(fd, &staged); err != nil {
t.Fatal(err)
}
oldUnlink := darwinUnlinkat
t.Cleanup(func() { darwinUnlinkat = oldUnlink })
darwinUnlinkat = func(int, string, int) error { return errors.New("injected unlink failure") }
if err := cleanupDarwinStage(dir, "stage", &staged, file.Close); !errors.Is(err, ErrIndeterminateFile) {
t.Fatalf("unlink failure = %v, want ErrIndeterminateFile", err)
}
}