56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package precreator_test
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/internal"
|
|
"github.com/influxdata/influxdb/logger"
|
|
"github.com/influxdata/influxdb/services/precreator"
|
|
"github.com/influxdata/influxdb/toml"
|
|
)
|
|
|
|
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()
|
|
s.MetaClient = &mc
|
|
|
|
if err := s.Open(); 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() *precreator.Service {
|
|
config := precreator.NewConfig()
|
|
config.CheckInterval = toml.Duration(10 * time.Millisecond)
|
|
|
|
s := precreator.NewService(config)
|
|
s.WithLogger(logger.New(os.Stderr))
|
|
return s
|
|
}
|