github.com/influxdata/influxdb/v2@v2.7.6/influxql/v1tests/test_server.go (about) 1 package v1tests 2 3 import ( 4 "context" 5 "strings" 6 "testing" 7 8 "github.com/influxdata/influxdb/v2" 9 icontext "github.com/influxdata/influxdb/v2/context" 10 "github.com/influxdata/influxdb/v2/tests" 11 "github.com/influxdata/influxdb/v2/tests/pipeline" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 type TestServer struct { 17 db string 18 rp string 19 p *tests.Pipeline 20 fx pipeline.BaseFixture 21 auth *influxdb.Authorization 22 } 23 24 func NewTestServer(ctx context.Context, t *testing.T, db, rp string, writes ...string) *TestServer { 25 require.Greater(t, len(writes), 0) 26 27 p := OpenServer(t) 28 t.Cleanup(func() { 29 _ = p.Close() 30 }) 31 32 fx := pipeline.NewBaseFixture(t, p.Pipeline, p.DefaultOrgID, p.DefaultBucketID) 33 34 // write test data 35 err := fx.Admin.WriteTo(ctx, influxdb.BucketFilter{ID: &p.DefaultBucketID, OrganizationID: &p.DefaultOrgID}, strings.NewReader(strings.Join(writes, "\n"))) 36 require.NoError(t, err) 37 38 p.Flush() 39 40 writeOrg, err := influxdb.NewPermissionAtID(p.DefaultOrgID, influxdb.WriteAction, influxdb.OrgsResourceType, p.DefaultOrgID) 41 require.NoError(t, err) 42 43 bucketWritePerm, err := influxdb.NewPermissionAtID(p.DefaultBucketID, influxdb.WriteAction, influxdb.BucketsResourceType, p.DefaultOrgID) 44 require.NoError(t, err) 45 46 bucketReadPerm, err := influxdb.NewPermissionAtID(p.DefaultBucketID, influxdb.ReadAction, influxdb.BucketsResourceType, p.DefaultOrgID) 47 require.NoError(t, err) 48 49 auth := tests.MakeAuthorization(p.DefaultOrgID, p.DefaultUserID, []influxdb.Permission{*writeOrg, *bucketWritePerm, *bucketReadPerm}) 50 ctx = icontext.SetAuthorizer(ctx, auth) 51 err = p.Launcher. 52 DBRPMappingService(). 53 Create(ctx, &influxdb.DBRPMapping{ 54 Database: db, 55 RetentionPolicy: rp, 56 Default: true, 57 OrganizationID: p.DefaultOrgID, 58 BucketID: p.DefaultBucketID, 59 }) 60 require.NoError(t, err) 61 62 return &TestServer{ 63 p: p.Pipeline, 64 db: db, 65 rp: rp, 66 fx: fx, 67 auth: auth, 68 } 69 } 70 71 func (qr *TestServer) Execute(ctx context.Context, t *testing.T, query Query) { 72 t.Helper() 73 ctx = icontext.SetAuthorizer(ctx, qr.auth) 74 if query.skip != "" { 75 t.Skipf("SKIP:: %s", query.skip) 76 } 77 err := query.Execute(ctx, t, qr.db, qr.fx.Admin) 78 assert.NoError(t, err) 79 assert.Equal(t, query.exp, query.got, 80 "%s: unexpected results\nquery: %s\nparams: %v\nexp: %s\nactual: %s\n", 81 query.name, query.command, query.params, query.exp, query.got) 82 }