net: fix tester goroutine leakage in tests
This change tries to stop various tester goroutines at the end of each
scope for avoiding interference between test cases including benchmarks.
Not yet finished completely but enough to land upcoming changes to Dial
functions. The rest will be fixed later.
Change-Id: Ic38b8681a3a2ddbcd69ba3696f24a61d418a0346
Reviewed-on: https://go-review.googlesource.com/8398
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/net/tcp_test.go b/src/net/tcp_test.go
index e33e5f2..2991357 100644
--- a/src/net/tcp_test.go
+++ b/src/net/tcp_test.go
@@ -414,6 +414,7 @@
{"tcp6", "[ip6-localhost%" + ifi.Name + "]:0", true},
}...)
}
+ handler := func(ls *localServer, ln Listener) { transponder(t, ln) }
for _, tt := range tests {
ln, err := Listen(tt.net, tt.addr)
if err != nil {
@@ -422,15 +423,19 @@
t.Logf("Listen failed: %v", err)
continue
}
- defer ln.Close()
+ ls, err := (&streamListener{Listener: ln}).newLocalServer()
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer ls.teardown()
+ if err := ls.buildup(handler); err != nil {
+ t.Fatal(err)
+ }
if la, ok := ln.Addr().(*TCPAddr); !ok || !tt.nameLookup && la.Zone == "" {
t.Fatalf("got %v; expected a proper address with zone identifier", la)
}
- done := make(chan int)
- go transponder(t, ln, done)
-
- c, err := Dial(tt.net, ln.Addr().String())
+ c, err := Dial(tt.net, ls.Listener.Addr().String())
if err != nil {
t.Fatalf("Dial failed: %v", err)
}
@@ -449,8 +454,6 @@
if _, err := c.Read(b); err != nil {
t.Fatalf("Conn.Read failed: %v", err)
}
-
- <-done
}
}