diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
commit | b09c6d56832eb1718c07d74abf3bc6ae3fe4e030 (patch) | |
tree | d2caec2610d4ea887803ec9e9c3cd77136c448ba /dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/pipe2_test.go | |
parent | Initial commit. (diff) | |
download | icingadb-upstream.tar.xz icingadb-upstream.zip |
Adding upstream version 1.1.0.upstream/1.1.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/pipe2_test.go | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/pipe2_test.go b/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/pipe2_test.go new file mode 100644 index 0000000..d2f50a1 --- /dev/null +++ b/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/pipe2_test.go @@ -0,0 +1,95 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "testing" + + "golang.org/x/sys/unix" +) + +func TestPipe2(t *testing.T) { + const s = "hello" + var pipes [2]int + err := unix.Pipe2(pipes[:], 0) + if err != nil { + t.Fatalf("pipe2: %v", err) + } + r := pipes[0] + w := pipes[1] + go func() { + n, err := unix.Write(w, []byte(s)) + if err != nil { + t.Errorf("bad write: %v", err) + return + } + if n != len(s) { + t.Errorf("bad write count: %d", n) + return + } + err = unix.Close(w) + if err != nil { + t.Errorf("bad close: %v", err) + return + } + }() + var buf [10 + len(s)]byte + n, err := unix.Read(r, buf[:]) + if err != nil { + t.Fatalf("bad read: %v", err) + } + if n != len(s) { + t.Fatalf("bad read count: %d", n) + } + if string(buf[:n]) != s { + t.Fatalf("bad contents: %s", string(buf[:n])) + } + err = unix.Close(r) + if err != nil { + t.Fatalf("bad close: %v", err) + } +} + +func checkNonblocking(t *testing.T, fd int, name string) { + t.Helper() + flags, err := unix.FcntlInt(uintptr(fd), unix.F_GETFL, 0) + if err != nil { + t.Errorf("fcntl(%s, F_GETFL) failed: %v", name, err) + } else if flags&unix.O_NONBLOCK == 0 { + t.Errorf("O_NONBLOCK not set in %s flags %#x", name, flags) + } +} + +func checkCloseonexec(t *testing.T, fd int, name string) { + t.Helper() + flags, err := unix.FcntlInt(uintptr(fd), unix.F_GETFD, 0) + if err != nil { + t.Errorf("fcntl(%s, F_GETFD) failed: %v", name, err) + } else if flags&unix.FD_CLOEXEC == 0 { + t.Errorf("FD_CLOEXEC not set in %s flags %#x", name, flags) + } +} + +func TestNonblockingPipe2(t *testing.T) { + var pipes [2]int + err := unix.Pipe2(pipes[:], unix.O_NONBLOCK|unix.O_CLOEXEC) + if err != nil { + t.Fatalf("pipe2: %v", err) + } + r := pipes[0] + w := pipes[1] + defer func() { + unix.Close(r) + unix.Close(w) + }() + + checkNonblocking(t, r, "reader") + checkCloseonexec(t, r, "reader") + checkNonblocking(t, w, "writer") + checkCloseonexec(t, w, "writer") +} |