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  }