83 lines
2.4 KiB
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)
|
|
}
|