summaryrefslogtreecommitdiff
path: root/src/net/dial_test.go
diff options
context:
space:
mode:
authorMikio Hara <mikioh.mikioh@gmail.com>2015-07-27 12:19:00 +0900
committerRuss Cox <rsc@golang.org>2015-07-27 16:09:26 +0000
commit68557de116fe7007541d54f08bffbdd06354f1f9 (patch)
tree31789a32fd183363da44bf994d80cf7d6bea214e /src/net/dial_test.go
parent54a966e383f5e866f7d89899cf100c3fde9c3a7d (diff)
downloadgo-git-68557de116fe7007541d54f08bffbdd06354f1f9.tar.gz
net: deflake TestDialTimeout{,FDLeak} in the case of TCP simultaneous open
Fixes #11872. Change-Id: Ibc7d8438374c9d90fd4cbefb61426c7f4f96af0d Reviewed-on: https://go-review.googlesource.com/12691 Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/net/dial_test.go')
-rw-r--r--src/net/dial_test.go24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/net/dial_test.go b/src/net/dial_test.go
index cfd7e092e4..aa916d4dcb 100644
--- a/src/net/dial_test.go
+++ b/src/net/dial_test.go
@@ -124,7 +124,24 @@ func TestDialTimeoutFDLeak(t *testing.T) {
defer sw.Set(socktest.FilterConnect, nil)
}
- before := sw.Sockets()
+ // Avoid tracking open-close jitterbugs between netFD and
+ // socket that leads to confusion of information inside
+ // socktest.Switch.
+ // It may happen when the Dial call bumps against TCP
+ // simultaneous open. See selfConnect in tcpsock_posix.go.
+ defer func() {
+ sw.Set(socktest.FilterClose, nil)
+ forceCloseSockets()
+ }()
+ var mu sync.Mutex
+ var attempts int
+ sw.Set(socktest.FilterClose, func(so *socktest.Status) (socktest.AfterFilter, error) {
+ mu.Lock()
+ attempts++
+ mu.Unlock()
+ return nil, errTimedout
+ })
+
const N = 100
var wg sync.WaitGroup
wg.Add(N)
@@ -142,9 +159,8 @@ func TestDialTimeoutFDLeak(t *testing.T) {
}()
}
wg.Wait()
- after := sw.Sockets()
- if len(after) != len(before) {
- t.Errorf("got %d; want %d", len(after), len(before))
+ if attempts < N {
+ t.Errorf("got %d; want >= %d", attempts, N)
}
}