Source file 
src/os/timeout_unix_test.go
     1  
     2  
     3  
     4  
     5  
     6  
     7  package os_test
     8  
     9  import (
    10  	"os"
    11  	"os/signal"
    12  	"syscall"
    13  	"testing"
    14  	"time"
    15  )
    16  
    17  func init() {
    18  	pipeDeadlinesTestCases = []pipeDeadlineTest{{
    19  		"anonymous pipe",
    20  		func(t *testing.T) (r, w *os.File) {
    21  			r, w, err := os.Pipe()
    22  			if err != nil {
    23  				t.Fatal(err)
    24  			}
    25  			return r, w
    26  		},
    27  	}}
    28  }
    29  
    30  
    31  func TestTTYClose(t *testing.T) {
    32  	
    33  	signal.Ignore(syscall.SIGTTIN)
    34  	defer signal.Reset(syscall.SIGTTIN)
    35  
    36  	f, err := os.Open("/dev/tty")
    37  	if err != nil {
    38  		t.Skipf("skipping because opening /dev/tty failed: %v", err)
    39  	}
    40  
    41  	go func() {
    42  		var buf [1]byte
    43  		f.Read(buf[:])
    44  	}()
    45  
    46  	
    47  	
    48  	
    49  	time.Sleep(time.Millisecond)
    50  
    51  	c := make(chan bool)
    52  	go func() {
    53  		defer close(c)
    54  		f.Close()
    55  	}()
    56  
    57  	select {
    58  	case <-c:
    59  	case <-time.After(time.Second):
    60  		t.Error("timed out waiting for close")
    61  	}
    62  
    63  	
    64  	
    65  }
    66  
View as plain text