diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 9a44f95eb..6ce6d724f 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -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") }) }