mirror of
https://github.com/coder/coder.git
synced 2025-07-09 11:45:56 +00:00
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>
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
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 })
|
|
})
|
|
}
|