Added CheckUntil() for tests

This commit is contained in:
David Allen 2024-09-19 16:38:46 -06:00
parent 879cfac61e
commit affba7dfa3
No known key found for this signature in database
GPG key ID: 717C593FF60A2ACC

27
internal/util/util.go Normal file
View file

@ -0,0 +1,27 @@
package util
import (
"fmt"
"time"
)
// CheckUntil regularly check a predicate until it's true or time out is reached.
func CheckUntil(interval time.Duration, timeout time.Duration, predicate func() (bool, error)) error {
timeoutCh := time.After(timeout)
for {
select {
case <-time.After(interval):
predTrue, err := predicate()
if predTrue {
return nil
}
if err != nil {
return err
}
case <-timeoutCh:
return fmt.Errorf("timeout of %ds reached", int64(timeout/time.Second))
}
}
}