@@ -8,52 +8,57 @@ import (
8
8
"github.com/golang-migrate/migrate/v4"
9
9
10
10
dt "github.com/golang-migrate/migrate/v4/database/testing"
11
-
12
11
_ "github.com/golang-migrate/migrate/v4/source/file"
12
+
13
+ "cloud.google.com/go/spanner/spannertest"
13
14
"github.com/stretchr/testify/assert"
14
15
"github.com/stretchr/testify/require"
15
16
)
16
17
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 )
20
24
}
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 )
25
28
}
29
+ defer srv .Close ()
30
+ testFunc (t )
26
31
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" ))
34
32
}
35
33
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"
40
35
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
+ }
45
47
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
+ })
57
62
}
58
63
59
64
func TestCleanStatements (t * testing.T ) {
0 commit comments