Skip to content

Commit 2501e7c

Browse files
Prometheus2677FPiety0521
authored and
FPiety0521
committed
Use spanner cloud emulator to run tests
Addresses: golang-migrate/migrate#410
1 parent 79ada1a commit 2501e7c

File tree

1 file changed

+39
-34
lines changed

1 file changed

+39
-34
lines changed

database/spanner/spanner_test.go

+39-34
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,57 @@ import (
88
"github.com/golang-migrate/migrate/v4"
99

1010
dt "github.com/golang-migrate/migrate/v4/database/testing"
11-
1211
_ "github.com/golang-migrate/migrate/v4/source/file"
12+
13+
"cloud.google.com/go/spanner/spannertest"
1314
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"
1516
)
1617

17-
func Test(t *testing.T) {
18-
if testing.Short() {
19-
t.Skip("skipping test in short mode.")
18+
// withSpannerEmulator is not thread-safe and cannot be used with parallel tests since it sets the emulator
19+
func withSpannerEmulator(t *testing.T, testFunc func(t *testing.T)) {
20+
t.Helper()
21+
srv, err := spannertest.NewServer("localhost:0")
22+
if err != nil {
23+
t.Fatal("Failed to create Spanner emulator:", err)
2024
}
21-
22-
db, ok := os.LookupEnv("SPANNER_DATABASE")
23-
if !ok {
24-
t.Skip("SPANNER_DATABASE not set, skipping test.")
25+
// This is not thread-safe
26+
if err := os.Setenv("SPANNER_EMULATOR_HOST", srv.Addr); err != nil {
27+
t.Fatal("Failed to set SPANNER_EMULATOR_HOST env var:", err)
2528
}
29+
defer srv.Close()
30+
testFunc(t)
2631

27-
s := &Spanner{}
28-
addr := fmt.Sprintf("spanner://%s", db)
29-
d, err := s.Open(addr)
30-
if err != nil {
31-
t.Fatal(err)
32-
}
33-
dt.Test(t, d, []byte("SELECT 1"))
3432
}
3533

36-
func TestMigrate(t *testing.T) {
37-
if testing.Short() {
38-
t.Skip("skipping test in short mode.")
39-
}
34+
const db = "projects/abc/instances/def/databases/testdb"
4035

41-
db, ok := os.LookupEnv("SPANNER_DATABASE")
42-
if !ok {
43-
t.Skip("SPANNER_DATABASE not set, skipping test.")
44-
}
36+
func Test(t *testing.T) {
37+
withSpannerEmulator(t, func(t *testing.T) {
38+
uri := fmt.Sprintf("spanner://%s", db)
39+
s := &Spanner{}
40+
d, err := s.Open(uri)
41+
if err != nil {
42+
t.Fatal(err)
43+
}
44+
dt.Test(t, d, []byte("CREATE TABLE test (id BOOL) PRIMARY KEY (id)"))
45+
})
46+
}
4547

46-
s := &Spanner{}
47-
addr := fmt.Sprintf("spanner://%s", db)
48-
d, err := s.Open(addr)
49-
if err != nil {
50-
t.Fatal(err)
51-
}
52-
m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", db, d)
53-
if err != nil {
54-
t.Fatal(err)
55-
}
56-
dt.TestMigrate(t, m)
48+
func TestMigrate(t *testing.T) {
49+
withSpannerEmulator(t, func(t *testing.T) {
50+
s := &Spanner{}
51+
uri := fmt.Sprintf("spanner://%s", db)
52+
d, err := s.Open(uri)
53+
if err != nil {
54+
t.Fatal(err)
55+
}
56+
m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", uri, d)
57+
if err != nil {
58+
t.Fatal(err)
59+
}
60+
dt.TestMigrate(t, m)
61+
})
5762
}
5863

5964
func TestCleanStatements(t *testing.T) {

0 commit comments

Comments
 (0)