blob: 32adf34f321d8e9635a70abad2303e76d6bcc152 [file] [log] [blame]
package cleanup
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils/unittest"
)
func TestCleanup(t *testing.T) {
unittest.MediumTest(t)
interval := 200 * time.Millisecond
// Verify that both the tick and cleanup functions get called as
// expected.
count := 0
cleanup := false
Repeat(interval, func(_ context.Context) {
count++
require.False(t, cleanup)
}, func() {
require.False(t, cleanup)
cleanup = true
})
time.Sleep(10 * interval)
Cleanup()
require.True(t, count >= 4)
require.True(t, cleanup)
// Multiple registered funcs.
reset()
n := 5
counts := make([]int, 0, n)
cleanups := make([]bool, 0, n)
for i := 0; i < n; i++ {
counts = append(counts, 0)
cleanups = append(cleanups, false)
}
for i := 0; i < n; i++ {
idx := i
Repeat(interval, func(_ context.Context) {
counts[idx]++
require.False(t, cleanups[idx])
}, func() {
require.False(t, cleanups[idx])
cleanups[idx] = true
})
}
time.Sleep(10 * interval)
Cleanup()
for i := 0; i < n; i++ {
require.True(t, counts[i] >= 4)
require.True(t, cleanups[i])
}
}