refactor TestListenerConnectDeadlines to avoid data races (#3201)

Fixes #3179
This commit is contained in:
Anton Kaliaev
2019-01-28 12:38:11 +04:00
committed by GitHub
parent 71e5939441
commit 8d2dd7e554

View File

@ -98,36 +98,29 @@ func TestListenerAcceptDeadlines(t *testing.T) {
func TestListenerConnectDeadlines(t *testing.T) { func TestListenerConnectDeadlines(t *testing.T) {
for _, tc := range listenerTestCases(t, time.Second, time.Millisecond) { for _, tc := range listenerTestCases(t, time.Second, time.Millisecond) {
readyc := make(chan struct{}) go func(dialer Dialer) {
donec := make(chan struct{}) _, err := dialer()
go func(ln net.Listener) {
defer close(donec)
c, err := ln.Accept()
if err != nil { if err != nil {
t.Fatal(err) panic(err)
} }
<-readyc }(tc.dialer)
time.Sleep(2 * time.Millisecond) c, err := tc.listener.Accept()
msg := make([]byte, 200)
_, err = c.Read(msg)
opErr, ok := err.(*net.OpError)
if !ok {
t.Fatalf("for %s listener, have %v, want *net.OpError", tc.description, err)
}
if have, want := opErr.Op, "read"; have != want {
t.Errorf("for %s listener, have %v, want %v", tc.description, have, want)
}
}(tc.listener)
_, err := tc.dialer()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
close(readyc)
<-donec time.Sleep(2 * time.Millisecond)
msg := make([]byte, 200)
_, err = c.Read(msg)
opErr, ok := err.(*net.OpError)
if !ok {
t.Fatalf("for %s listener, have %v, want *net.OpError", tc.description, err)
}
if have, want := opErr.Op, "read"; have != want {
t.Errorf("for %s listener, have %v, want %v", tc.description, have, want)
}
} }
} }