func waitForTestCompletion(stopFlag *int32, t *testing.T) { time.Sleep(perTestTimeout) if atomic.LoadInt32(stopFlag) == int32(1) { return } util.PrintStackTrace() assert.Fail(t, "Didn't stop within a timely manner") }
func waitUntilOrFail(t *testing.T, pred func() bool) { start := time.Now() limit := start.UnixNano() + timeoutInterval.Nanoseconds() for time.Now().UnixNano() < limit { if pred() { return } time.Sleep(timeoutInterval / 60) } util.PrintStackTrace() assert.Fail(t, "Timeout expired!") }
func waitUntilOrFailBlocking(t *testing.T, f func()) { successChan := make(chan struct{}, 1) go func() { f() successChan <- struct{}{} }() select { case <-time.NewTimer(individualTimeout).C: break case <-successChan: return } util.PrintStackTrace() assert.Fail(t, "Timeout expired!") }