mirror of
https://github.com/coder/coder.git
synced 2025-07-09 11:45:56 +00:00
chore: add testutil.Eventually and friends (#3389)
This PR adds a `testutil` function aimed to replace `require.Eventually`. Before: ```go require.Eventually(t, func() bool { ... }, testutil.WaitShort, testutil.IntervalFast) ``` After: ```go require.True(t, testutil.EventuallyShort(t, func(ctx context.Context) bool { ... })) // or the full incantation if you need more control ctx, cancel := context.WithTimeout(ctx.Background(), testutil.WaitLong) require.True(t, testutil.Eventually(t, ctx, func(ctx context.Context) bool { ... }, testutil.IntervalSlow)) ``` Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>
This commit is contained in:
70
testutil/eventually_test.go
Normal file
70
testutil/eventually_test.go
Normal file
@ -0,0 +1,70 @@
|
||||
package testutil_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"go.uber.org/goleak"
|
||||
|
||||
"github.com/coder/coder/testutil"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
goleak.VerifyTestMain(m)
|
||||
}
|
||||
|
||||
func TestEventually(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
state := 0
|
||||
condition := func(_ context.Context) bool {
|
||||
defer func() {
|
||||
state++
|
||||
}()
|
||||
return state > 2
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
||||
defer cancel()
|
||||
testutil.Eventually(ctx, t, condition, testutil.IntervalFast)
|
||||
})
|
||||
|
||||
t.Run("Timeout", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
condition := func(_ context.Context) bool {
|
||||
return false
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
||||
defer cancel()
|
||||
mockT := new(testing.T)
|
||||
testutil.Eventually(ctx, mockT, condition, testutil.IntervalFast)
|
||||
assert.True(t, mockT.Failed())
|
||||
})
|
||||
|
||||
t.Run("Panic", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
panicky := func() {
|
||||
mockT := new(testing.T)
|
||||
condition := func(_ context.Context) bool { return true }
|
||||
testutil.Eventually(context.Background(), mockT, condition, testutil.IntervalFast)
|
||||
}
|
||||
assert.Panics(t, panicky)
|
||||
})
|
||||
|
||||
t.Run("Short", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
testutil.EventuallyShort(t, func(_ context.Context) bool { return true })
|
||||
})
|
||||
|
||||
t.Run("Medium", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
testutil.EventuallyMedium(t, func(_ context.Context) bool { return true })
|
||||
})
|
||||
|
||||
t.Run("Long", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
testutil.EventuallyLong(t, func(_ context.Context) bool { return true })
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user