Skip to content

Commit

Permalink
internal/socket: more logging for TestRace
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
ianlancetaylor committed Apr 15, 2021
1 parent 0645797 commit e915ea6
Showing 1 changed file with 60 additions and 15 deletions.
75 changes: 60 additions & 15 deletions internal/socket/socket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,40 +306,73 @@ func BenchmarkUDP(b *testing.B) {
}

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
}
`,
}
Expand All @@ -357,17 +390,29 @@ func main() {
}
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)
}
})
}
Expand Down

0 comments on commit e915ea6

Please sign in to comment.