influxdb/v1/services/precreator/service_test.go

58 lines
1.2 KiB
Go

package precreator_test
import (
"context"
"testing"
"time"
"github.com/influxdata/influxdb/v2/internal"
"github.com/influxdata/influxdb/v2/toml"
"github.com/influxdata/influxdb/v2/v1/services/precreator"
"go.uber.org/zap/zaptest"
)
func TestShardPrecreation(t *testing.T) {
done := make(chan struct{})
precreate := false
var mc internal.MetaClientMock
mc.PrecreateShardGroupsFn = func(now, cutoff time.Time) error {
if !precreate {
close(done)
precreate = true
}
return nil
}
s := NewTestService(t)
s.MetaClient = &mc
if err := s.Open(context.Background()); err != nil {
t.Fatalf("unexpected open error: %s", err)
}
defer s.Close() // double close should not cause a panic
timer := time.NewTimer(100 * time.Millisecond)
select {
case <-done:
timer.Stop()
case <-timer.C:
t.Errorf("timeout exceeded while waiting for precreate")
}
if err := s.Close(); err != nil {
t.Fatalf("unexpected close error: %s", err)
}
}
func NewTestService(tb testing.TB) *precreator.Service {
tb.Helper()
config := precreator.NewConfig()
config.CheckInterval = toml.Duration(10 * time.Millisecond)
s := precreator.NewService(config)
s.WithLogger(zaptest.NewLogger(tb))
return s
}