Package spannertest contains test helpers for working with Cloud Spanner.

This package is EXPERIMENTAL, and is lacking several features. See the file in this directory for more details.

In-memory fake

This package has an in-memory fake implementation of spanner. To use it, create a Server, and then connect to it with no security:

srv, err := spannertest.NewServer("localhost:0")
conn, err := grpc.DialContext(ctx, srv.Addr, grpc.WithInsecure())
client, err := spanner.NewClient(ctx, db, option.WithGRPCConn(conn))

Alternatively, create a Server, then set the SPANNER_EMULATOR_HOST environment variable and use the regular spanner.NewClient:

srv, err := spannertest.NewServer("localhost:0")
os.Setenv("SPANNER_EMULATOR_HOST", srv.Addr)
client, err := spanner.NewClient(ctx, db)

The same server also supports database admin operations for use with the package. This only simulates the existence of a single database; its name is ignored.


type Logger func(format string, args ...interface{})

Logger is something that can be used for logging. It is matched by log.Printf and testing.T.Logf.


type Server struct {
	Addr string
	// contains filtered or unexported fields

Server is an in-memory Cloud Spanner fake. It is unauthenticated, non-performant, and only a rough approximation.

func NewServer

func NewServer(laddr string) (*Server, error)

NewServer creates a new Server. The Server will be listening for gRPC connections, without TLS, on the provided TCP address. The resolved address is available in the Addr field.

func (*Server) Close

func (s *Server) Close()

Close shuts down the server.

func (*Server) SetLogger

func (s *Server) SetLogger(l Logger)

SetLogger sets a logger for the server. You can use a *testing.T as this argument to collate extra information from the execution of the server.

func (*Server) UpdateDDL

func (s *Server) UpdateDDL(ddl *spansql.DDL) error

UpdateDDL applies the given DDL to the server.

This is a convenience method for tests that may assume an existing schema. The more general approach is to dial this server using an admin client, and use the UpdateDatabaseDdl RPC method.