internal/socket: more logging for TestRace

For golang/go#37338

Change-Id: I00c222ee15bce07438ac56c0dfe4770897eccbbd
Reviewed-on: https://go-review.googlesource.com/c/net/+/310269
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/internal/socket/socket_test.go b/internal/socket/socket_test.go
index f0363ee..e7161b7 100644
--- a/internal/socket/socket_test.go
+++ b/internal/socket/socket_test.go
@@ -306,40 +306,73 @@
 }
 
 func TestRace(t *testing.T) {
-	t.Skip("skipping known flaky test; see https://golang.org/issue/37338")
-
 	tests := []string{
 		`
 package main
-import "net"
-import "golang.org/x/net/ipv4"
+import (
+	"log"
+	"net"
+
+	"golang.org/x/net/ipv4"
+)
+
 var g byte
+
 func main() {
-	c, _ := net.ListenPacket("udp", "127.0.0.1:0")
+	c, err := net.ListenPacket("udp", "127.0.0.1:0")
+	if err != nil {
+		log.Fatalf("ListenPacket: %v", err)
+	}
 	cc := ipv4.NewPacketConn(c)
 	sync := make(chan bool)
 	src := make([]byte, 1)
 	dst := make([]byte, 1)
-	go func() { cc.WriteTo(src, nil, c.LocalAddr()) }()
-	go func() { cc.ReadFrom(dst); sync <- true }()
+	go func() {
+		if _, err := cc.WriteTo(src, nil, c.LocalAddr()); err != nil {
+			log.Fatalf("WriteTo: %v", err)
+		}
+	}()
+	go func() {
+		if _, _, _, err := cc.ReadFrom(dst); err != nil {
+			log.Fatalf("ReadFrom: %v", err)
+		}
+		sync <- true
+	}()
 	g = dst[0]
-	<- sync
+	<-sync
 }
 `,
 		`
 package main
-import "net"
-import "golang.org/x/net/ipv4"
+import (
+	"log"
+	"net"
+
+	"golang.org/x/net/ipv4"
+)
+
 func main() {
-	c, _ := net.ListenPacket("udp", "127.0.0.1:0")
+	c, err := net.ListenPacket("udp", "127.0.0.1:0")
+	if err != nil {
+		log.Fatalf("ListenPacket: %v", err)
+	}
 	cc := ipv4.NewPacketConn(c)
 	sync := make(chan bool)
 	src := make([]byte, 1)
 	dst := make([]byte, 1)
-	go func() { cc.WriteTo(src, nil, c.LocalAddr()); sync <- true }()
+	go func() {
+		if _, err := cc.WriteTo(src, nil, c.LocalAddr()); err != nil {
+			log.Fatalf("WriteTo: %v", err)
+		}
+		sync <- true
+	}()
 	src[0] = 0
-	go func() { cc.ReadFrom(dst) }()
-	<- sync
+	go func() {
+		if _, _, _, err := cc.ReadFrom(dst); err != nil {
+			log.Fatalf("ReadFrom: %v", err)
+		}
+	}()
+	<-sync
 }
 `,
 	}
@@ -357,17 +390,29 @@
 	}
 	defer os.RemoveAll(dir)
 	goBinary := filepath.Join(runtime.GOROOT(), "bin", "go")
+	t.Logf("%s version", goBinary)
+	got, err := exec.Command(goBinary, "version").CombinedOutput()
+	if len(got) > 0 {
+		t.Logf("%s", got)
+	}
+	if err != nil {
+		t.Fatalf("go version failed: %v", err)
+	}
 	for i, test := range tests {
 		t.Run(fmt.Sprintf("test %d", i), func(t *testing.T) {
 			src := filepath.Join(dir, fmt.Sprintf("test%d.go", i))
 			if err := ioutil.WriteFile(src, []byte(test), 0644); err != nil {
 				t.Fatalf("failed to write file: %v", err)
 			}
+			t.Logf("%s run -race %s", goBinary, src)
 			got, err := exec.Command(goBinary, "run", "-race", src).CombinedOutput()
+			if len(got) > 0 {
+				t.Logf("%s", got)
+			}
 			if strings.Contains(string(got), "-race requires cgo") {
 				t.Log("CGO is not enabled so can't use -race")
 			} else if !strings.Contains(string(got), "WARNING: DATA RACE") {
-				t.Errorf("race not detected for test %d: err:%v out:%s", i, err, string(got))
+				t.Errorf("race not detected for test %d: err:%v", i, err)
 			}
 		})
 	}