framework

package
v0.15.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2024 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Target is the target info for the server.
	Target *querypb.Target
	// Server is the TabletServer for the framework.
	Server *tabletserver.TabletServer
	// ServerAddress is the http URL for the server.
	ServerAddress string
	// ResolveChan is the channel that sends dtids that are to be resolved.
	ResolveChan = make(chan string, 1)
	// TopoServer is the topology for the server
	TopoServer *topo.Server
)

Functions

func DebugSchema

func DebugSchema() map[string]Table

DebugSchema parses /debug/schema and returns a map of the tables keyed by the table name.

func DebugVars

func DebugVars() map[string]any

DebugVars parses /debug/vars and returns a map. The function returns an empty map on error.

func FetchInt

func FetchInt(vars map[string]any, tags string) int

FetchInt fetches the specified slash-separated tag and returns the value as an int. It returns 0 on error, or if not found.

func FetchJSON

func FetchJSON(urlPath string) map[string]any

FetchJSON fetches JSON content from the specified URL path and returns it as a map. The function returns an empty map on error.

func FetchURL

func FetchURL(urlPath string) string

FetchURL fetches the content from the specified URL path and returns it as a string. The function returns an empty string on error.

func FetchVal

func FetchVal(vars map[string]any, tags string) any

FetchVal fetches the specified slash-separated tag and returns the value as an interface. It returns nil on error, or if not found.

func IsPresent

func IsPresent(vars map[string]any, tags string) bool

IsPresent returns whether the specified slash-separated tag is present in the vars provided

func PostJSON

func PostJSON(urlPath string, values map[string]string) map[string]any

PostJSON performs a post and fetches JSON content from the specified URL path and returns it as a map. The function returns an empty map on error.

func QueryStats

func QueryStats() map[string]QueryStat

QueryStats parses /debug/query_stats and returns a map of the query stats keyed by the query.

func RowsToStrings

func RowsToStrings(qr *sqltypes.Result) [][]string

RowsToStrings converts qr.Rows to [][]string.

func StartCustomServer

func StartCustomServer(ctx context.Context, connParams, connAppDebugParams mysql.ConnParams, dbName string, cfg *tabletenv.TabletConfig) error

StartCustomServer starts the server and initializes all the global variables. This function should only be called once at the beginning of the test.

func StartServer

func StartServer(ctx context.Context, connParams, connAppDebugParams mysql.ConnParams, dbName string) error

StartServer starts the server and initializes all the global variables. This function should only be called once at the beginning of the test.

func StopServer

func StopServer()

StopServer must be called once all the tests are done.

func StreamTerminate

func StreamTerminate(connID int64) error

StreamTerminate terminates the specified streaming query.

Types

type Event

type Event interface {
	EventTime() time.Time
}

type EventCatcher

type EventCatcher[T Event] struct {
	// contains filtered or unexported fields
}

func NewEventCatcher

func NewEventCatcher[T Event](logger *streamlog.StreamLogger[T]) *EventCatcher[T]

func NewQueryCatcher

func NewQueryCatcher() *EventCatcher[*tabletenv.LogStats]

func (*EventCatcher[T]) Close

func (catcher *EventCatcher[T]) Close()

Close closes the EventCatcher.

func (*EventCatcher[T]) Next

func (catcher *EventCatcher[T]) Next() (T, error)

type LiveQuery

type LiveQuery struct {
	Type              string
	Query             string
	ContextHTML       string
	Start             time.Time
	Duration          int64
	ConnID            int64
	State             string
	ShowTerminateLink bool
}

LiveQuery contains the streaming query info.

func LiveQueryz

func LiveQueryz() []LiveQuery

OLAPQueryz returns the contents of /livequeryz?format=json. as a []LiveQuery. The function returns an empty list on error.

type MultiCase

type MultiCase struct {
	Name  string
	Cases []Testable
}

MultiCase groups a number of test cases under a name. A MultiCase is also Testable. So, it can be recursive.

func (*MultiCase) Benchmark

func (mc *MultiCase) Benchmark(client *QueryClient) error

Benchmark executes the test cases in MultiCase and discards the results without validating them.

func (*MultiCase) Test

func (mc *MultiCase) Test(name string, client *QueryClient) error

Test executes the test cases in MultiCase. The test is interrupted if there is a failure. The name parameter is used if MultiCase doesn't have a Name.

type QueryClient

type QueryClient struct {
	// contains filtered or unexported fields
}

QueryClient provides a convenient wrapper for TabletServer's query service. It's not thread safe, but you can create multiple clients that point to the same server.

func NewClient

func NewClient() *QueryClient

NewClient creates a new client for Server.

func NewClientWithContext

func NewClientWithContext(ctx context.Context) *QueryClient

NewClientWithContext creates a new client for Server with the provided context.

func NewClientWithServer

func NewClientWithServer(server *tabletserver.TabletServer) *QueryClient

NewClientWithServer creates a new client for a given server.

func NewClientWithTabletType

func NewClientWithTabletType(tabletType topodatapb.TabletType) *QueryClient

NewClientWithTabletType creates a new client for Server with the provided tablet type.

func (*QueryClient) Begin

func (client *QueryClient) Begin(clientFoundRows bool) error

Begin begins a transaction.

func (*QueryClient) BeginExecute

func (client *QueryClient) BeginExecute(query string, bindvars map[string]*querypb.BindVariable, preQueries []string) (*sqltypes.Result, error)

BeginExecute performs a BeginExecute.

func (*QueryClient) Commit

func (client *QueryClient) Commit() error

Commit commits the current transaction.

func (*QueryClient) CommitPrepared

func (client *QueryClient) CommitPrepared(dtid string) error

CommitPrepared commits a prepared transaction.

func (*QueryClient) ConcludeTransaction

func (client *QueryClient) ConcludeTransaction(dtid string) error

ConcludeTransaction issues a ConcludeTransaction to TabletServer.

func (*QueryClient) CreateTransaction

func (client *QueryClient) CreateTransaction(dtid string, participants []*querypb.Target) error

CreateTransaction issues a CreateTransaction to TabletServer.

func (*QueryClient) Execute

func (client *QueryClient) Execute(query string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

Execute executes a query.

func (*QueryClient) ExecuteWithOptions

func (client *QueryClient) ExecuteWithOptions(query string, bindvars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, error)

ExecuteWithOptions executes a query using 'options'.

func (*QueryClient) GetSchema

func (client *QueryClient) GetSchema(
	tableType querypb.SchemaTableType,
	tableNames ...string,
) (schemaDef map[string]string, udfs []*querypb.UDFInfo, err error)

func (*QueryClient) MessageAck

func (client *QueryClient) MessageAck(name string, ids []string) (int64, error)

MessageAck acks messages

func (*QueryClient) MessageStream

func (client *QueryClient) MessageStream(name string, callback func(*sqltypes.Result) error) (err error)

MessageStream streams messages from the message table.

func (*QueryClient) Prepare

func (client *QueryClient) Prepare(dtid string) error

Prepare executes a prepare on the current transaction.

func (*QueryClient) ReadTransaction

func (client *QueryClient) ReadTransaction(dtid string) (*querypb.TransactionMetadata, error)

ReadTransaction returns the transaction metadata.

func (*QueryClient) Release

func (client *QueryClient) Release() error

Release performs a Release.

func (*QueryClient) ReserveBeginExecute

func (client *QueryClient) ReserveBeginExecute(query string, preQueries []string, postBeginQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

ReserveBeginExecute performs a ReserveBeginExecute.

func (*QueryClient) ReserveBeginStreamExecute

func (client *QueryClient) ReserveBeginStreamExecute(query string, preQueries []string, postBeginQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

ReserveBeginStreamExecute performs a ReserveBeginStreamExecute.

func (*QueryClient) ReserveExecute

func (client *QueryClient) ReserveExecute(query string, preQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

ReserveExecute performs a ReserveExecute.

func (*QueryClient) ReserveStreamExecute

func (client *QueryClient) ReserveStreamExecute(query string, preQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

ReserveStreamExecute performs a ReserveStreamExecute.

func (*QueryClient) ReservedID

func (client *QueryClient) ReservedID() int64

ReservedID returns reservedID

func (*QueryClient) Rollback

func (client *QueryClient) Rollback() error

Rollback rolls back the current transaction.

func (*QueryClient) RollbackPrepared

func (client *QueryClient) RollbackPrepared(dtid string, originalID int64) error

RollbackPrepared rolls back a prepared transaction.

func (*QueryClient) SetReservedID

func (client *QueryClient) SetReservedID(id int64)

SetReservedID does what it says

func (*QueryClient) SetRollback

func (client *QueryClient) SetRollback(dtid string, transactionID int64) error

SetRollback issues a SetRollback to TabletServer.

func (*QueryClient) SetServingType

func (client *QueryClient) SetServingType(tabletType topodatapb.TabletType) error

SetServingType is for testing transitions. It currently supports only primary->replica and back.

func (*QueryClient) SetTransactionID

func (client *QueryClient) SetTransactionID(id int64)

SetTransactionID does what it says

func (*QueryClient) StartCommit

func (client *QueryClient) StartCommit(dtid string) error

StartCommit issues a StartCommit to TabletServer for the current transaction.

func (*QueryClient) Stream

func (client *QueryClient) Stream(query string, bindvars map[string]*querypb.BindVariable, sendFunc func(*sqltypes.Result) error) error

Stream streams the results of a query.

func (*QueryClient) StreamBeginExecuteWithOptions

func (client *QueryClient) StreamBeginExecuteWithOptions(query string, preQueries []string, bindvars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, error)

StreamBeginExecuteWithOptions starts a tx and executes a query using 'options', returning the results .

func (*QueryClient) StreamExecute

func (client *QueryClient) StreamExecute(query string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error)

StreamExecute executes a query & returns the results.

func (*QueryClient) StreamExecuteWithOptions

func (client *QueryClient) StreamExecuteWithOptions(query string, bindvars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, error)

StreamExecuteWithOptions executes a query & returns the results using 'options'.

func (*QueryClient) StreamHealth

func (client *QueryClient) StreamHealth(sendFunc func(*querypb.StreamHealthResponse) error) error

StreamHealth receives the health response

func (*QueryClient) StreamHealthWithContext

func (client *QueryClient) StreamHealthWithContext(ctx context.Context, sendFunc func(*querypb.StreamHealthResponse) error) error

StreamHealthWithContext receives the health response

func (*QueryClient) TransactionID

func (client *QueryClient) TransactionID() int64

TransactionID returns transactionID

func (*QueryClient) UpdateContext

func (client *QueryClient) UpdateContext(ctx context.Context)

type QueryStat

type QueryStat struct {
	Query, Table, Plan                                                  string
	QueryCount, Time, MysqlTime, RowsAffected, RowsReturned, ErrorCount int
}

QueryStat contains the stats for one query.

type Table

type Table struct {
	Name    string
	Columns []TableColumn
	Type    int
}

Table is a subset of schema.Table. TODO(sougou): I'm getting a json parsing error on the 'Default' field of schema.TabletColumn. Otherwise, we should just be able to decode the json output into a schema.Table.

type TableColumn

type TableColumn struct {
	Name     string
	Category int
	IsAuto   bool
}

TableColumn contains info about a table's column.

type TestCase

type TestCase struct {
	// Name gives a name to the test case. It will be used
	// for reporting failures.
	Name string

	// Query and BindVars are the input.
	Query    string
	BindVars map[string]*querypb.BindVariable

	// Result is the list of rows that must be returned.
	// It's represented as 2-d strings. They byte values
	// will be compared against The bytes returned by the
	// query. The check is skipped if Result is nil.
	Result [][]string

	// RowsAffected affected can be nil or an int.
	RowsAffected any

	// 	RowsReturned affected can be nil or an int.
	RowsReturned any

	// Rewritten specifies how the query should have be rewritten.
	Rewritten []string

	// Plan specifies the plan type that was used. It will be matched
	// against tabletserver.PlanType(val).String().
	Plan string

	// If Table is specified, then the framework will validate the
	// cache stats for that table. If the stat values are nil, then
	// the check is skipped.
	Table         string
	Hits          any
	Misses        any
	Absent        any
	Invalidations any
}

TestCase represents one test case. It will execute the query and verify its results and effects against what must be expected. Expected fields are optional.

func (*TestCase) Benchmark

func (tc *TestCase) Benchmark(client *QueryClient) error

Benchmark executes the test case and discards the results without verifying them

func (*TestCase) Test

func (tc *TestCase) Test(name string, client *QueryClient) error

Test executes the test case and returns an error if it failed. The name parameter is used if the test case doesn't have a name.

type TestQuery

type TestQuery string

TestQuery represents a plain query. It will be executed without a bind variable. The framework will check for errors, but nothing beyond. Statements like 'begin', etc. will be converted to the corresponding transaction commands.

func (TestQuery) Benchmark

func (tq TestQuery) Benchmark(client *QueryClient) error

Benchmark executes the query and discards the results

func (TestQuery) Test

func (tq TestQuery) Test(name string, client *QueryClient) error

Test executes the query and returns an error if it failed.

type Testable

type Testable interface {
	Test(name string, client *QueryClient) error
	Benchmark(client *QueryClient) error
}

Testable restricts the types that can be added to a test case.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL