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)
}
})
}