1 // Copyright 2015 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 //go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd
24 func TestFifoEOF(t
*testing
.T
) {
27 t
.Skip("skipping on Android; mkfifo syscall not available")
31 fifoName
:= filepath
.Join(dir
, "fifo")
32 if err
:= syscall
.Mkfifo(fifoName
, 0600); err
!= nil {
41 w
, err
:= os
.OpenFile(fifoName
, os
.O_WRONLY
, 0)
48 if err
:= w
.Close(); err
!= nil {
49 t
.Errorf("error closing writer: %v", err
)
53 for i
:= 0; i
< 3; i
++ {
54 time
.Sleep(10 * time
.Millisecond
)
55 _
, err
:= fmt
.Fprintf(w
, "line %d\n", i
)
57 t
.Errorf("error writing to fifo: %v", err
)
61 time
.Sleep(10 * time
.Millisecond
)
66 r
, err
:= os
.Open(fifoName
)
71 done
:= make(chan bool)
76 if err
:= r
.Close(); err
!= nil {
77 t
.Errorf("error closing reader: %v", err
)
81 rbuf
:= bufio
.NewReader(r
)
83 b
, err
:= rbuf
.ReadBytes('\n')
91 t
.Logf("%s\n", bytes
.TrimSpace(b
))
98 case <-time
.After(time
.Second
):
99 t
.Error("timed out waiting for read")
100 // Close the reader to force the read to complete.