influxdb/task/backend/logreaderwriter_test.go

124 lines
3.0 KiB
Go

package backend_test
import (
"context"
"io/ioutil"
"os"
"testing"
"github.com/influxdata/flux/control"
"github.com/influxdata/flux/execute"
"github.com/influxdata/platform/inmem"
"github.com/influxdata/platform/query"
pcontrol "github.com/influxdata/platform/query/control"
"github.com/influxdata/platform/storage"
"github.com/influxdata/platform/storage/readservice"
"github.com/influxdata/platform/task/backend"
"github.com/influxdata/platform/task/backend/storetest"
"go.uber.org/zap"
"go.uber.org/zap/zaptest"
)
func TestInMemRunStore(t *testing.T) {
storetest.NewRunStoreTest(
"inmem",
func(t *testing.T) (backend.LogWriter, backend.LogReader) {
rw := backend.NewInMemRunReaderWriter()
return rw, rw
},
func(t *testing.T, w backend.LogWriter, r backend.LogReader) {})(t)
}
func TestQueryStorageRunStore(t *testing.T) {
storetest.NewRunStoreTest(
"PointLogWriter and QueryLogReader",
func(t *testing.T) (backend.LogWriter, backend.LogReader) {
lrw := newFullStackAwareLogReaderWriter(t)
return lrw, lrw
},
func(t *testing.T, w backend.LogWriter, r backend.LogReader) {
if w.(*fullStackAwareLogReaderWriter) != r.(*fullStackAwareLogReaderWriter) {
panic("impossible cleanup values")
}
w.(*fullStackAwareLogReaderWriter).Close(t)
},
)(t)
}
type fullStackAwareLogReaderWriter struct {
*backend.PointLogWriter
*backend.QueryLogReader
queryController *pcontrol.Controller
rootDir string
storageEngine *storage.Engine
}
func (lrw *fullStackAwareLogReaderWriter) Close(t *testing.T) {
if err := lrw.queryController.Shutdown(context.Background()); err != nil {
t.Error(err)
}
if err := lrw.storageEngine.Close(); err != nil {
t.Error(err)
}
if err := os.RemoveAll(lrw.rootDir); err != nil {
t.Error(err)
}
}
func newFullStackAwareLogReaderWriter(t *testing.T) *fullStackAwareLogReaderWriter {
// Mostly copied out of cmd/influxd/main.go.
logger := zaptest.NewLogger(t)
rootDir, err := ioutil.TempDir("", "task-logreaderwriter-")
if err != nil {
t.Fatal(err)
}
engine := storage.NewEngine(rootDir, storage.NewConfig())
engine.WithLogger(logger)
if err := engine.Open(); err != nil {
t.Fatal(err)
}
defer func() {
if t.Failed() {
engine.Close()
}
}()
svc := inmem.NewService()
const (
concurrencyQuota = 10
memoryBytesQuota = 1e6
)
cc := control.Config{
ExecutorDependencies: make(execute.Dependencies),
ConcurrencyQuota: concurrencyQuota,
MemoryBytesQuota: int64(memoryBytesQuota),
Logger: logger.With(zap.String("service", "storage-reads")),
}
if err := readservice.AddControllerConfigDependencies(
&cc, engine, svc, svc,
); err != nil {
t.Fatal(err)
}
queryController := pcontrol.New(cc)
return &fullStackAwareLogReaderWriter{
PointLogWriter: backend.NewPointLogWriter(engine),
QueryLogReader: backend.NewQueryLogReader(query.QueryServiceBridge{AsyncQueryService: queryController}),
queryController: queryController,
rootDir: rootDir,
storageEngine: engine,
}
}