influxdb/influxql/v1tests/test_server.go

83 lines
2.4 KiB
Go

package v1tests
import (
"context"
"strings"
"testing"
"github.com/influxdata/influxdb/v2"
icontext "github.com/influxdata/influxdb/v2/context"
"github.com/influxdata/influxdb/v2/tests"
"github.com/influxdata/influxdb/v2/tests/pipeline"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type TestServer struct {
db string
rp string
p *tests.Pipeline
fx pipeline.BaseFixture
auth *influxdb.Authorization
}
func NewTestServer(ctx context.Context, t *testing.T, db, rp string, writes ...string) *TestServer {
require.Greater(t, len(writes), 0)
p := OpenServer(t)
t.Cleanup(func() {
_ = p.Close()
})
fx := pipeline.NewBaseFixture(t, p.Pipeline, p.DefaultOrgID, p.DefaultBucketID)
// write test data
err := fx.Admin.WriteTo(ctx, influxdb.BucketFilter{ID: &p.DefaultBucketID, OrganizationID: &p.DefaultOrgID}, strings.NewReader(strings.Join(writes, "\n")))
require.NoError(t, err)
p.Flush()
writeOrg, err := influxdb.NewPermissionAtID(p.DefaultOrgID, influxdb.WriteAction, influxdb.OrgsResourceType, p.DefaultOrgID)
require.NoError(t, err)
bucketWritePerm, err := influxdb.NewPermissionAtID(p.DefaultBucketID, influxdb.WriteAction, influxdb.BucketsResourceType, p.DefaultOrgID)
require.NoError(t, err)
bucketReadPerm, err := influxdb.NewPermissionAtID(p.DefaultBucketID, influxdb.ReadAction, influxdb.BucketsResourceType, p.DefaultOrgID)
require.NoError(t, err)
auth := tests.MakeAuthorization(p.DefaultOrgID, p.DefaultUserID, []influxdb.Permission{*writeOrg, *bucketWritePerm, *bucketReadPerm})
ctx = icontext.SetAuthorizer(ctx, auth)
err = p.Launcher.
DBRPMappingService().
Create(ctx, &influxdb.DBRPMapping{
Database: db,
RetentionPolicy: rp,
Default: true,
OrganizationID: p.DefaultOrgID,
BucketID: p.DefaultBucketID,
})
require.NoError(t, err)
return &TestServer{
p: p.Pipeline,
db: db,
rp: rp,
fx: fx,
auth: auth,
}
}
func (qr *TestServer) Execute(ctx context.Context, t *testing.T, query Query) {
t.Helper()
ctx = icontext.SetAuthorizer(ctx, qr.auth)
if query.skip != "" {
t.Skipf("SKIP:: %s", query.skip)
}
err := query.Execute(ctx, t, qr.db, qr.fx.Admin)
assert.NoError(t, err)
assert.Equal(t, query.exp, query.got,
"%s: unexpected results\nquery: %s\nparams: %v\nexp: %s\nactual: %s\n",
query.name, query.command, query.params, query.exp, query.got)
}