Skip to content

Commit

Permalink
Use spanner cloud emulator to run tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dhui committed Oct 2, 2020
1 parent fa3e119 commit 8c531c7
Showing 1 changed file with 39 additions and 34 deletions.
73 changes: 39 additions & 34 deletions database/spanner/spanner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,52 +8,57 @@ import (
"github.com/golang-migrate/migrate/v4"

dt "github.com/golang-migrate/migrate/v4/database/testing"

_ "github.com/golang-migrate/migrate/v4/source/file"

"cloud.google.com/go/spanner/spannertest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func Test(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
// withSpannerEmulator is not thread-safe and cannot be used with parallel tests since it sets the emulator
func withSpannerEmulator(t *testing.T, testFunc func(t *testing.T)) {
t.Helper()
srv, err := spannertest.NewServer("localhost:0")
if err != nil {
t.Fatal("Failed to create Spanner emulator:", err)
}

db, ok := os.LookupEnv("SPANNER_DATABASE")
if !ok {
t.Skip("SPANNER_DATABASE not set, skipping test.")
// This is not thread-safe
if err := os.Setenv("SPANNER_EMULATOR_HOST", srv.Addr); err != nil {
t.Fatal("Failed to set SPANNER_EMULATOR_HOST env var:", err)
}
defer srv.Close()
testFunc(t)

s := &Spanner{}
addr := fmt.Sprintf("spanner://%s", db)
d, err := s.Open(addr)
if err != nil {
t.Fatal(err)
}
dt.Test(t, d, []byte("SELECT 1"))
}

func TestMigrate(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
const db = "projects/abc/instances/def/databases/testdb"

db, ok := os.LookupEnv("SPANNER_DATABASE")
if !ok {
t.Skip("SPANNER_DATABASE not set, skipping test.")
}
func Test(t *testing.T) {
withSpannerEmulator(t, func(t *testing.T) {
uri := fmt.Sprintf("spanner://%s", db)
s := &Spanner{}
d, err := s.Open(uri)
if err != nil {
t.Fatal(err)
}
dt.Test(t, d, []byte("CREATE TABLE test (id BOOL) PRIMARY KEY (id)"))
})
}

s := &Spanner{}
addr := fmt.Sprintf("spanner://%s", db)
d, err := s.Open(addr)
if err != nil {
t.Fatal(err)
}
m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", db, d)
if err != nil {
t.Fatal(err)
}
dt.TestMigrate(t, m)
func TestMigrate(t *testing.T) {
withSpannerEmulator(t, func(t *testing.T) {
s := &Spanner{}
uri := fmt.Sprintf("spanner://%s", db)
d, err := s.Open(uri)
if err != nil {
t.Fatal(err)
}
m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", uri, d)
if err != nil {
t.Fatal(err)
}
dt.TestMigrate(t, m)
})
}

func TestCleanStatements(t *testing.T) {
Expand Down

0 comments on commit 8c531c7

Please sign in to comment.