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
|
// 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
|
// 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.
|
// of a particular node in the case of a test failure.
|
||||||
|
Loading…
Reference in New Issue
Block a user