lntest/harness: adds WaitInvariant helper method
This commits adds a complement to the existing WaitPredicate helper function, ensuring that a boolean statement remains true for the duration of the provided timeout. This expands our ability to do simple sanity checks where the wait-until semantics of WaitPredicate may not be as-well suited.
This commit is contained in:
parent
72dcf44246
commit
82c1e9af92
@ -846,6 +846,32 @@ func WaitPredicate(pred func() bool, timeout time.Duration) error {
|
||||
}
|
||||
}
|
||||
|
||||
// WaitInvariant is a helper test function that will wait for a timeout period
|
||||
// of time, verifying that a statement remains true for the entire duration.
|
||||
// This function is helpful as timing doesn't always line up well when running
|
||||
// integration tests with several running lnd nodes. This function gives callers
|
||||
// a way to assert that some property is maintained over a particular time
|
||||
// frame.
|
||||
func WaitInvariant(statement func() bool, timeout time.Duration) error {
|
||||
const pollInterval = 20 * time.Millisecond
|
||||
|
||||
exitTimer := time.After(timeout)
|
||||
for {
|
||||
<-time.After(pollInterval)
|
||||
|
||||
// Fail if the invariant is broken while polling.
|
||||
if !statement() {
|
||||
return fmt.Errorf("invariant broken before time out")
|
||||
}
|
||||
|
||||
select {
|
||||
case <-exitTimer:
|
||||
return nil
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DumpLogs reads the current logs generated by the passed node, and returns
|
||||
// the logs as a single string. This function is useful for examining the logs
|
||||
// of a particular node in the case of a test failure.
|
||||
|
Loading…
Reference in New Issue
Block a user