mirror of
https://github.com/golang/go
synced 2024-11-11 19:21:37 -07:00
test: deflake chan/select3.go
On a slow or distracted machine, 0.1s is sometimes not long enough for a non-blocking function call to complete. This causes rare test flakes. They can be easily reproduced by reducing the wait time to (say) 100ns. For non-blocking functions, increase the window from 100ms to 10s. Using different windows for block and non-blocking functions, allows us to reduce the time for blocking functions. The risk here is false negatives, but that risk is low; this test is run repeatedly on many fast machines, for which 10ms is ample time. This reduces the time required to run the test by a factor of 10, from ~1s to ~100ms. Fixes #20299 Change-Id: Ice9a641a66c6c101d738a2ebe1bcb144ae3c9916 Reviewed-on: https://go-review.googlesource.com/47812 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
093adeef40
commit
a1e7fb4eed
@ -40,8 +40,15 @@ func testBlock(signal string, f func()) {
|
||||
c <- never // f didn't block
|
||||
}()
|
||||
go func() {
|
||||
time.Sleep(1e8) // 0.1s seems plenty long
|
||||
c <- always // f blocked always
|
||||
if signal == never {
|
||||
// Wait a long time to make sure that we don't miss our window by accident on a slow machine.
|
||||
time.Sleep(10 * time.Second)
|
||||
} else {
|
||||
// Wait as short a time as we can without false negatives.
|
||||
// 10ms should be long enough to catch most failures.
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
c <- always // f blocked always
|
||||
}()
|
||||
if <-c != signal {
|
||||
panic(signal + " block")
|
||||
|
Loading…
Reference in New Issue
Block a user