Spanner support enhancements (#101634)
* Adds ability to run integration tests against spanner (by using GRAFANA_TEST_DB=spanner env variable. SPANNER_DB variable then specifies database to use: spannertest, emulator or string like /projects/<project>/instances/<instance>/databases/<db>) * Adds feature to migration dialects to create database from a snapshot, instead of running individual migrations. * Adds first version of Spanner snapshot, prepared from "OSS" migrations. * Uses generated bit-reversed-positive values instead of auto_increment. (As an experiment)
This commit is contained in:
@@ -6,6 +6,8 @@ import (
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"cloud.google.com/go/spanner/spannertest"
|
||||
)
|
||||
|
||||
// ITestDB is an interface of arguments for testing db
|
||||
@@ -42,6 +44,8 @@ func GetTestDB(dbType string) (*TestDB, error) {
|
||||
return postgresTestDB()
|
||||
case "sqlite3":
|
||||
return sqLite3TestDB()
|
||||
case "spanner":
|
||||
return spannerTestDB()
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown test db type: %s", dbType)
|
||||
@@ -151,3 +155,49 @@ func postgresTestDB() (*TestDB, error) {
|
||||
Cleanup: func() {},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func spannerTestDB() (*TestDB, error) {
|
||||
// See https://github.com/googleapis/go-sql-spanner/blob/main/driver.go#L56-L81 for connection string options.
|
||||
|
||||
spannerDB := os.Getenv("SPANNER_DB")
|
||||
if spannerDB == "" {
|
||||
return nil, errors.New("SPANNER_DB environment variable not set")
|
||||
}
|
||||
|
||||
if spannerDB == "spannertest" {
|
||||
// Start in-memory spannertest instance.
|
||||
srv, err := spannertest.NewServer("localhost:0")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &TestDB{
|
||||
DriverName: "spanner",
|
||||
ConnStr: fmt.Sprintf("%s/projects/grafanatest/instances/grafanatest/databases/grafanatest;usePlainText=true", srv.Addr),
|
||||
Cleanup: srv.Close,
|
||||
}, nil
|
||||
}
|
||||
|
||||
if spannerDB == "emulator" {
|
||||
host := os.Getenv("SPANNER_EMULATOR_HOST")
|
||||
if host == "" {
|
||||
host = "localhost:9010"
|
||||
}
|
||||
|
||||
// To create instance and database manually, run:
|
||||
//
|
||||
// $ curl "localhost:9020/v1/projects/grafanatest/instances" --data '{"instanceId": "'grafanatest'"}'
|
||||
// $ curl "localhost:9020/v1/projects/grafanatest/instances/grafanatest/databases" --data '{"createStatement": "CREATE DATABASE `grafanatest`"}'
|
||||
return &TestDB{
|
||||
DriverName: "spanner",
|
||||
ConnStr: fmt.Sprintf("%s/projects/grafanatest/instances/grafanatest/databases/grafanatest;usePlainText=true", host),
|
||||
Cleanup: func() {},
|
||||
}, nil
|
||||
}
|
||||
|
||||
return &TestDB{
|
||||
DriverName: "spanner",
|
||||
ConnStr: spannerDB,
|
||||
Cleanup: func() {},
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user