mirror of https://github.com/hashicorp/consul
49 lines
949 B
Go
49 lines
949 B
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: MPL-2.0
|
||
|
|
||
|
package retry
|
||
|
|
||
|
type Option func(r *R)
|
||
|
|
||
|
func WithRetryer(retryer Retryer) Option {
|
||
|
return func(r *R) {
|
||
|
r.retryer = retryer
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func WithFullOutput() Option {
|
||
|
return func(r *R) {
|
||
|
r.fullOutput = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithImmediateCleanup will cause all cleanup operations added
|
||
|
// by calling the Cleanup method on *R to be performed after
|
||
|
// the retry attempt completes (regardless of pass/fail status)
|
||
|
// Use this only if all resources created during the retry loop should
|
||
|
// not persist after the retry has finished.
|
||
|
func WithImmediateCleanup() Option {
|
||
|
return func(r *R) {
|
||
|
r.immediateCleanup = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Run(t TestingTB, f func(r *R), opts ...Option) {
|
||
|
t.Helper()
|
||
|
r := &R{
|
||
|
wrapped: t,
|
||
|
retryer: DefaultRetryer(),
|
||
|
}
|
||
|
|
||
|
for _, opt := range opts {
|
||
|
opt(r)
|
||
|
}
|
||
|
|
||
|
r.run(f)
|
||
|
}
|
||
|
|
||
|
func RunWith(r Retryer, t TestingTB, f func(r *R)) {
|
||
|
t.Helper()
|
||
|
Run(t, f, WithRetryer(r))
|
||
|
}
|