Documentation ¶
Index ¶
- func GetJSONProto(ts TestServerInterface, path string, response protoutil.Message) error
- func GetJSONProtoWithAdminOption(ts TestServerInterface, path string, response protoutil.Message, isAdmin bool) error
- func InitTestClusterFactory(impl TestClusterFactory)
- func InitTestServerFactory(impl TestServerFactory)
- func PostJSONProto(ts TestServerInterface, path string, request, response protoutil.Message) error
- func PostJSONProtoWithAdminOption(ts TestServerInterface, path string, request, response protoutil.Message, ...) error
- func StartTenant(t testing.TB, ts TestServerInterface, params base.TestTenantArgs) *gosql.DB
- type KeyAndTargets
- type TestClusterFactory
- type TestClusterInterface
- type TestServerFactory
- type TestServerInterface
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetJSONProto ¶
func GetJSONProto(ts TestServerInterface, path string, response protoutil.Message) error
GetJSONProto uses the supplied client to GET the URL specified by the parameters and unmarshals the result into response.
func GetJSONProtoWithAdminOption ¶
func GetJSONProtoWithAdminOption( ts TestServerInterface, path string, response protoutil.Message, isAdmin bool, ) error
GetJSONProtoWithAdminOption is like GetJSONProto but the caller can customize whether the request is performed with admin privilege
func InitTestClusterFactory ¶
func InitTestClusterFactory(impl TestClusterFactory)
InitTestClusterFactory should be called once to provide the implementation of the service. It will be called from a xx_test package that can import the server package.
func InitTestServerFactory ¶
func InitTestServerFactory(impl TestServerFactory)
InitTestServerFactory should be called once to provide the implementation of the service. It will be called from a xx_test package that can import the server package.
func PostJSONProto ¶
func PostJSONProto(ts TestServerInterface, path string, request, response protoutil.Message) error
PostJSONProto uses the supplied client to POST the URL specified by the parameters and unmarshals the result into response.
func PostJSONProtoWithAdminOption ¶
func PostJSONProtoWithAdminOption( ts TestServerInterface, path string, request, response protoutil.Message, isAdmin bool, ) error
PostJSONProtoWithAdminOption is like PostJSONProto but the caller can customize whether the request is performed with admin privilege.
func StartTenant ¶
func StartTenant(t testing.TB, ts TestServerInterface, params base.TestTenantArgs) *gosql.DB
StartTenant starts a tenant SQL server connecting to the supplied test server. It uses the server's stopper to shut down automatically. However, the returned DB is for the caller to close.
Types ¶
type KeyAndTargets ¶
type KeyAndTargets struct { StartKey roachpb.Key Targets []roachpb.ReplicationTarget }
KeyAndTargets contains replica startKey and targets.
type TestClusterFactory ¶
type TestClusterFactory interface { // New instantiates a test server. StartTestCluster(t testing.TB, numNodes int, args base.TestClusterArgs) TestClusterInterface }
TestClusterFactory encompasses the actual implementation of the shim service.
type TestClusterInterface ¶
type TestClusterInterface interface { NumServers() int // Server returns the TestServerInterface corresponding to a specific node. Server(idx int) TestServerInterface // ServerConn returns a gosql.DB connection to a specific node. ServerConn(idx int) *gosql.DB // StopServer stops a single server. StopServer(idx int) // Stopper retrieves the stopper for this test cluster. Tests should call or // defer the Stop() method on this stopper after starting a test cluster. Stopper() *stop.Stopper // AddReplicas adds replicas for a range on a set of stores. // It's illegal to have multiple replicas of the same range on stores of a single // node. // The method blocks until a snapshot of the range has been copied to all the // new replicas and the new replicas become part of the Raft group. AddReplicas( startKey roachpb.Key, targets ...roachpb.ReplicationTarget, ) (roachpb.RangeDescriptor, error) // AddReplicasMulti is the same as AddReplicas but will execute multiple jobs. AddReplicasMulti( kts ...KeyAndTargets, ) ([]roachpb.RangeDescriptor, []error) // AddReplicasOrFatal is the same as AddReplicas but will Fatal the test on // error. AddReplicasOrFatal( t testing.TB, startKey roachpb.Key, targets ...roachpb.ReplicationTarget, ) roachpb.RangeDescriptor // RemoveReplicas removes one or more replicas from a range. RemoveReplicas( startKey roachpb.Key, targets ...roachpb.ReplicationTarget, ) (roachpb.RangeDescriptor, error) // RemoveReplicasOrFatal is the same as RemoveReplicas but will Fatal the test on // error. RemoveReplicasOrFatal( t testing.TB, startKey roachpb.Key, targets ...roachpb.ReplicationTarget, ) roachpb.RangeDescriptor // FindRangeLeaseHolder returns the current lease holder for the given range. // In particular, it returns one particular node's (the hint, if specified) view // of the current lease. // An error is returned if there's no active lease. // // Note that not all nodes have necessarily applied the latest lease, // particularly immediately after a TransferRangeLease() call. So specifying // different hints can yield different results. The one server that's guaranteed // to have applied the transfer is the previous lease holder. FindRangeLeaseHolder( rangeDesc roachpb.RangeDescriptor, hint *roachpb.ReplicationTarget, ) (roachpb.ReplicationTarget, error) // TransferRangeLease transfers the lease for a range from whoever has it to // a particular store. That store must already have a replica of the range. If // that replica already has the (active) lease, this method is a no-op. // // When this method returns, it's guaranteed that the old lease holder has // applied the new lease, but that's about it. It's not guaranteed that the new // lease holder has applied it (so it might not know immediately that it is the // new lease holder). TransferRangeLease( rangeDesc roachpb.RangeDescriptor, dest roachpb.ReplicationTarget, ) error // LookupRange returns the descriptor of the range containing key. LookupRange(key roachpb.Key) (roachpb.RangeDescriptor, error) // LookupRangeOrFatal is the same as LookupRange but will Fatal the test on // error. LookupRangeOrFatal(t testing.TB, key roachpb.Key) roachpb.RangeDescriptor // Target returns a roachpb.ReplicationTarget for the specified server. Target(serverIdx int) roachpb.ReplicationTarget // ReplicationMode returns the ReplicationMode that the test cluster was // configured with. ReplicationMode() base.TestClusterReplicationMode }
TestClusterInterface defines TestCluster functionality used by tests.
func StartTestCluster ¶
func StartTestCluster(t testing.TB, numNodes int, args base.TestClusterArgs) TestClusterInterface
StartTestCluster starts up a TestCluster made up of numNodes in-memory testing servers. The cluster should be stopped using Stopper().Stop().
type TestServerFactory ¶
type TestServerFactory interface { // New instantiates a test server. New(params base.TestServerArgs) interface{} }
TestServerFactory encompasses the actual implementation of the shim service.
type TestServerInterface ¶
type TestServerInterface interface { Stopper() *stop.Stopper Start(params base.TestServerArgs) error // Node returns the server.Node as an interface{}. Node() interface{} // NodeID returns the ID of this node within its cluster. NodeID() roachpb.NodeID // ServingRPCAddr returns the server's advertised address. ServingRPCAddr() string // ServingSQLAddr returns the server's advertised SQL address. ServingSQLAddr() string // HTTPAddr returns the server's http address. HTTPAddr() string // RPCAddr returns the server's RPC address. // Note: use ServingRPCAddr() instead unless specific reason not to. RPCAddr() string // SQLAddr returns the server's SQL address. // Note: use ServingSQLAddr() instead unless specific reason not to. SQLAddr() string // DB returns a *client.DB instance for talking to this KV server. DB() *kv.DB // RPCContext returns the rpc context used by the test server. RPCContext() *rpc.Context // LeaseManager() returns the *sql.LeaseManager as an interface{}. LeaseManager() interface{} // InternalExecutor returns a *sql.InternalExecutor as an interface{} (which // also implements sqlutil.InternalExecutor if the test cannot depend on sql). InternalExecutor() interface{} // ExecutorConfig returns a copy of the server's ExecutorConfig. // The real return type is sql.ExecutorConfig. ExecutorConfig() interface{} // GossipI returns the gossip used by the TestServer. // The real return type is *gossip.Gossip. GossipI() interface{} // Clock returns the clock used by the TestServer. Clock() *hlc.Clock // DistSenderI returns the DistSender used by the TestServer. // The real return type is *kv.DistSender. DistSenderI() interface{} // SQLServer returns the *sql.Server as an interface{}. SQLServer() interface{} // DistSQLServer returns the *distsql.ServerImpl as an interface{}. DistSQLServer() interface{} // JobRegistry returns the *jobs.Registry as an interface{}. JobRegistry() interface{} // MigrationManager returns the *jobs.Registry as an interface{}. MigrationManager() interface{} // SetDistSQLSpanResolver changes the SpanResolver used for DistSQL inside the // server's executor. The argument must be a physicalplan.SpanResolver // instance. // // This method exists because we cannot pass the fake span resolver with the // server or cluster params: the fake span resolver needs the node IDs and // addresses of the servers in a cluster, which are not available before we // start the servers. // // It is the caller's responsibility to make sure no queries are being run // with DistSQL at the same time. SetDistSQLSpanResolver(spanResolver interface{}) // AdminURL returns the URL for the admin UI. AdminURL() string // GetHTTPClient returns an http client configured with the client TLS // config required by the TestServer's configuration. GetHTTPClient() (http.Client, error) // GetAdminAuthenticatedHTTPClient returns an http client which has been // authenticated to access Admin API methods (via a cookie). // The user has admin privileges. GetAdminAuthenticatedHTTPClient() (http.Client, error) // GetAuthenticatedHTTPClient returns an http client which has been // authenticated to access Admin API methods (via a cookie). GetAuthenticatedHTTPClient(isAdmin bool) (http.Client, error) // MustGetSQLCounter returns the value of a counter metric from the server's // SQL Executor. Runs in O(# of metrics) time, which is fine for test code. MustGetSQLCounter(name string) int64 // MustGetSQLNetworkCounter returns the value of a counter metric from the // server's SQL server. Runs in O(# of metrics) time, which is fine for test // code. MustGetSQLNetworkCounter(name string) int64 // WriteSummaries records summaries of time-series data, which is required for // any tests that query server stats. WriteSummaries() error // GetFirstStoreID is a utility function returning the StoreID of the first // store on this node. GetFirstStoreID() roachpb.StoreID // GetStores returns the collection of stores from this TestServer's node. // The return value is of type *kvserver.Stores. GetStores() interface{} // ClusterSettings returns the ClusterSettings shared by all components of // this server. ClusterSettings() *cluster.Settings // SplitRange splits the range containing splitKey. SplitRange( splitKey roachpb.Key, ) (left roachpb.RangeDescriptor, right roachpb.RangeDescriptor, err error) // MergeRanges merges the range containing leftKey with the following adjacent // range. MergeRanges(leftKey roachpb.Key) (merged roachpb.RangeDescriptor, err error) // ExpectedInitialRangeCount returns the expected number of ranges that should // be on the server after initial (asynchronous) splits have been completed, // assuming no additional information is added outside of the normal bootstrap // process. ExpectedInitialRangeCount() (int, error) // ForceTableGC sends a GCRequest for the ranges corresponding to a table. // // An error will be returned if the same table name exists in multiple schemas // inside the specified database. ForceTableGC(ctx context.Context, database, table string, timestamp hlc.Timestamp) error // CheckForUpdates phones home to check for updates and report usage. // // When using this for testing, consider setting DiagnosticsReportingEnabled // to false so the periodic check doesn't interfere with the test. // // This can be slow because of cloud detection; use cloudinfo.Disable() in // tests to avoid that. CheckForUpdates(ctx context.Context) // ReportDiagnostics phones home to report diagnostics. // // If using this for testing, consider setting DiagnosticsReportingEnabled to // false so the periodic reporting doesn't interfere with the test. // // This can be slow because of cloud detection; use cloudinfo.Disable() in // tests to avoid that. ReportDiagnostics(ctx context.Context) // StartTenant spawns off tenant process connecting to this TestServer. StartTenant(params base.TestTenantArgs) (pgAddr string, _ error) }
TestServerInterface defines test server functionality that tests need; it is implemented by server.TestServer.
func StartServer ¶
func StartServer( t testing.TB, params base.TestServerArgs, ) (TestServerInterface, *gosql.DB, *kv.DB)
StartServer creates a test server and sets up a gosql DB connection. The server should be stopped by calling server.Stopper().Stop().
func StartServerRaw ¶
func StartServerRaw(args base.TestServerArgs) (TestServerInterface, error)
StartServerRaw creates and starts a TestServer. Generally StartServer() should be used. However this function can be used directly when opening a connection to the server is not desired.