diff options
Diffstat (limited to 'src/os/fifo_test.go')
-rw-r--r-- | src/os/fifo_test.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/os/fifo_test.go b/src/os/fifo_test.go index 867c294f5e..df4b2ee757 100644 --- a/src/os/fifo_test.go +++ b/src/os/fifo_test.go @@ -8,6 +8,7 @@ package os_test import ( "errors" + "internal/syscall/unix" "internal/testenv" "io/fs" "os" @@ -155,3 +156,52 @@ func TestNonPollable(t *testing.T) { } } } + +// Issue 60211. +func TestOpenFileNonBlocking(t *testing.T) { + exe, err := os.Executable() + if err != nil { + t.Skipf("can't find executable: %v", err) + } + f, err := os.OpenFile(exe, os.O_RDONLY|syscall.O_NONBLOCK, 0666) + if err != nil { + t.Fatal(err) + } + defer f.Close() + nonblock, err := unix.IsNonblock(int(f.Fd())) + if err != nil { + t.Fatal(err) + } + if !nonblock { + t.Errorf("file opened with O_NONBLOCK but in blocking mode") + } +} + +func TestNewFileNonBlocking(t *testing.T) { + var p [2]int + if err := syscall.Pipe(p[:]); err != nil { + t.Fatal(err) + } + if err := syscall.SetNonblock(p[0], true); err != nil { + t.Fatal(err) + } + f := os.NewFile(uintptr(p[0]), "pipe") + nonblock, err := unix.IsNonblock(p[0]) + if err != nil { + t.Fatal(err) + } + if !nonblock { + t.Error("pipe blocking after NewFile") + } + fd := f.Fd() + if fd != uintptr(p[0]) { + t.Errorf("Fd returned %d, want %d", fd, p[0]) + } + nonblock, err = unix.IsNonblock(p[0]) + if err != nil { + t.Fatal(err) + } + if !nonblock { + t.Error("pipe blocking after Fd") + } +} |