From df29b912720a9fb395fd1971e2e2bb60c69246e6 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Fri, 22 Dec 2017 10:47:48 +0000 Subject: [PATCH] unix: add TestSelect for *BSD Change-Id: I9aa4ac170c361e56e36bded0cc13fb99346f70cf Reviewed-on: https://go-review.googlesource.com/85275 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- unix/syscall_bsd_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/unix/syscall_bsd_test.go b/unix/syscall_bsd_test.go index c3a75eb4..6c4e2aca 100644 --- a/unix/syscall_bsd_test.go +++ b/unix/syscall_bsd_test.go @@ -10,6 +10,7 @@ import ( "os/exec" "runtime" "testing" + "time" "golang.org/x/sys/unix" ) @@ -50,6 +51,28 @@ func TestGetfsstat(t *testing.T) { } } +func TestSelect(t *testing.T) { + err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) + if err != nil { + t.Fatalf("Select: %v", err) + } + + dur := 250 * time.Millisecond + tv := unix.NsecToTimeval(int64(dur)) + start := time.Now() + err = unix.Select(0, nil, nil, nil, &tv) + took := time.Since(start) + if err != nil { + t.Fatalf("Select: %v", err) + } + + // On some BSDs the actual timeout might also be slightly less than the requested. + // Add an acceptable margin to avoid flaky tests. + if took < dur*2/3 { + t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) + } +} + func TestSysctlRaw(t *testing.T) { if runtime.GOOS == "openbsd" { t.Skip("kern.proc.pid does not exist on OpenBSD")