mirror of https://github.com/stretchr/testify.git
assert: fix TestEventuallyTimeout
Fix TestEventuallyIssue805 which was flaky because of the use of a timer that has exactly the same duration as the Eventually timout. But time is not a synchronization primitive. Now we use channels to ensure that the condition is still running and Eventually times out before checking its return value. The test is also renamed to TestEventuallyTimeout to more clearly show its purpose.pull/1412/head
parent
4ae48e988c
commit
e8837d5396
|
@ -2870,12 +2870,31 @@ func TestNeverTrue(t *testing.T) {
|
|||
False(t, Never(mockT, condition, 100*time.Millisecond, 20*time.Millisecond))
|
||||
}
|
||||
|
||||
func TestEventuallyIssue805(t *testing.T) {
|
||||
// Check that a long running condition doesn't block Eventually.
|
||||
// See issue 805 (and its long tail of following issues)
|
||||
func TestEventuallyTimeout(t *testing.T) {
|
||||
mockT := new(testing.T)
|
||||
|
||||
NotPanics(t, func() {
|
||||
condition := func() bool { <-time.After(time.Millisecond); return true }
|
||||
t.Log("start")
|
||||
done, done2 := make(chan struct{}), make(chan struct{})
|
||||
|
||||
// A condition function that returns after the Eventually timeout
|
||||
condition := func() bool {
|
||||
t.Log("ok1")
|
||||
// Wait until Eventually times out and terminates
|
||||
<-done
|
||||
close(done2)
|
||||
t.Log("ok2")
|
||||
return true
|
||||
}
|
||||
|
||||
False(t, Eventually(mockT, condition, time.Millisecond, time.Microsecond))
|
||||
|
||||
t.Log("Eventually done")
|
||||
close(done)
|
||||
<-done2
|
||||
t.Log("Test done")
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue