unix: use same TestSelect on all Unices

Also change t.Error messages to use "got foo, expected bar" notation.

Change-Id: Ia0b452f96b08cbb69a0b64cc2a467b5cf94e72da
Reviewed-on: https://go-review.googlesource.com/c/sys/+/207858
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/unix/syscall_aix_test.go b/unix/syscall_aix_test.go
index 7563dc2..789f394 100644
--- a/unix/syscall_aix_test.go
+++ b/unix/syscall_aix_test.go
@@ -123,26 +123,6 @@
 	}
 }
 
-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 := 150 * 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)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-}
-
 func TestPselect(t *testing.T) {
 	if runtime.GOARCH == "ppc64" {
 		t.Skip("pselect issue with structure timespec on AIX 7.2 tl0, skipping test")
diff --git a/unix/syscall_bsd_test.go b/unix/syscall_bsd_test.go
index bee9295..b552324 100644
--- a/unix/syscall_bsd_test.go
+++ b/unix/syscall_bsd_test.go
@@ -7,11 +7,9 @@
 package unix_test
 
 import (
-	"os"
 	"os/exec"
 	"runtime"
 	"testing"
-	"time"
 
 	"golang.org/x/sys/unix"
 )
@@ -48,57 +46,6 @@
 	}
 }
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 250 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	// 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)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestSysctlRaw(t *testing.T) {
 	if runtime.GOOS == "openbsd" {
 		t.Skip("kern.proc.pid does not exist on OpenBSD")
diff --git a/unix/syscall_linux_test.go b/unix/syscall_linux_test.go
index 01a1028..cc3af9f 100644
--- a/unix/syscall_linux_test.go
+++ b/unix/syscall_linux_test.go
@@ -237,55 +237,6 @@
 	}
 }
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 150 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestPselect(t *testing.T) {
 	for {
 		_, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil)
diff --git a/unix/syscall_solaris_test.go b/unix/syscall_solaris_test.go
index 9598c22..d3e7d2b 100644
--- a/unix/syscall_solaris_test.go
+++ b/unix/syscall_solaris_test.go
@@ -7,63 +7,12 @@
 package unix_test
 
 import (
-	"os"
 	"os/exec"
 	"testing"
-	"time"
 
 	"golang.org/x/sys/unix"
 )
 
-func TestSelect(t *testing.T) {
-	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	dur := 150 * time.Millisecond
-	tv := unix.NsecToTimeval(int64(dur))
-	start := time.Now()
-	n, err = unix.Select(0, nil, nil, nil, &tv)
-	took := time.Since(start)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 0 {
-		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
-	}
-
-	if took < dur {
-		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
-	}
-
-	rr, ww, err := os.Pipe()
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer rr.Close()
-	defer ww.Close()
-
-	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
-		t.Fatal(err)
-	}
-
-	rFdSet := &unix.FdSet{}
-	fd := int(rr.Fd())
-	rFdSet.Set(fd)
-
-	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
-	if err != nil {
-		t.Fatalf("Select: %v", err)
-	}
-	if n != 1 {
-		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
-	}
-}
-
 func TestStatvfs(t *testing.T) {
 	if err := unix.Statvfs("", nil); err == nil {
 		t.Fatal(`Statvfs("") expected failure`)
diff --git a/unix/syscall_unix_test.go b/unix/syscall_unix_test.go
index d01964b..bc76875 100644
--- a/unix/syscall_unix_test.go
+++ b/unix/syscall_unix_test.go
@@ -512,6 +512,57 @@
 	}
 }
 
+func TestSelect(t *testing.T) {
+	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 0 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	}
+
+	dur := 250 * time.Millisecond
+	tv := unix.NsecToTimeval(int64(dur))
+	start := time.Now()
+	n, err = unix.Select(0, nil, nil, nil, &tv)
+	took := time.Since(start)
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 0 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 0", n)
+	}
+
+	// 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: got %v timeout, expected at least %v", took, dur)
+	}
+
+	rr, ww, err := os.Pipe()
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer rr.Close()
+	defer ww.Close()
+
+	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
+		t.Fatal(err)
+	}
+
+	rFdSet := &unix.FdSet{}
+	fd := int(rr.Fd())
+	rFdSet.Set(fd)
+
+	n, err = unix.Select(fd+1, rFdSet, nil, nil, nil)
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 1 {
+		t.Fatalf("Select: got %v ready file descriptors, expected 1", n)
+	}
+}
+
 func TestGetwd(t *testing.T) {
 	fd, err := os.Open(".")
 	if err != nil {