Skip to content

Commit 3e45308

Browse files
committed
Fixes failing tests
1 parent 5178562 commit 3e45308

File tree

5 files changed

+64
-25
lines changed

5 files changed

+64
-25
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ require (
5959
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
6060
github.com/golang-sql/sqlexp v0.1.0 // indirect
6161
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
62-
github.com/golang/protobuf v1.5.4 // indirect
6362
github.com/google/s2a-go v0.1.9 // indirect
6463
github.com/google/uuid v1.6.0 // indirect
6564
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect

go.sum

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -748,8 +748,7 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
748748
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
749749
github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
750750
github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
751-
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
752-
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
751+
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
753752
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
754753
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
755754
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
@@ -798,8 +797,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
798797
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
799798
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
800799
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
801-
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
802800
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
801+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
803802
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
804803
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
805804
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -1059,19 +1058,15 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6
10591058
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo=
10601059
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
10611060
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
1062-
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
1063-
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
1061+
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
10641062
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
1065-
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
1066-
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
1063+
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
10671064
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
1068-
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
1069-
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
1065+
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
10701066
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
10711067
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
10721068
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
1073-
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
1074-
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
1069+
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
10751070
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
10761071
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
10771072
go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
@@ -1721,8 +1716,7 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
17211716
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
17221717
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
17231718
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
1724-
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
1725-
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
1719+
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
17261720
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
17271721
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
17281722
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internal/testing/integration/database_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"testing"
55
"time"
66

7+
"github.com/pressly/goose/v3"
78
"github.com/pressly/goose/v3/database"
89
"github.com/pressly/goose/v3/internal/testing/testdb"
910
"github.com/stretchr/testify/require"
@@ -28,7 +29,7 @@ func TestSpanner(t *testing.T) {
2829
t.Cleanup(cleanup)
2930
require.NoError(t, db.Ping())
3031

31-
testDatabase(t, database.DialectSpanner, db, "testdata/migrations/spanner")
32+
testDatabase(t, database.DialectSpanner, db, "testdata/migrations/spanner", goose.WithIsolateDDL(true))
3233
}
3334

3435
func TestClickhouse(t *testing.T) {

internal/testing/integration/integration.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ func collectMigrations(t *testing.T, dir string) []collected {
3636
return all
3737
}
3838

39-
func testDatabase(t *testing.T, dialect database.Dialect, db *sql.DB, migrationsDir string) {
39+
func testDatabase(t *testing.T, dialect database.Dialect, db *sql.DB, migrationsDir string, opts ...goose.ProviderOption) {
4040
t.Helper()
4141

4242
ctx := context.Background()
4343
// collect all migration files from the testdata directory
4444
wantFiles := collectMigrations(t, migrationsDir)
4545
// initialize a new goose provider
46-
p, err := goose.NewProvider(dialect, db, os.DirFS(migrationsDir))
46+
p, err := goose.NewProvider(dialect, db, os.DirFS(migrationsDir), opts...)
4747
require.NoError(t, err)
4848
require.Equal(t, len(wantFiles), len(p.ListSources()), "number of migrations")
4949
// run all up migrations

internal/testing/testdb/spanner.go

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@ import (
66
"fmt"
77
"log"
88
"os"
9+
"strings"
910
"time"
1011

1112
_ "github.com/googleapis/go-sql-spanner" // Spanner driver
1213
"github.com/ory/dockertest/v3"
1314
"github.com/ory/dockertest/v3/docker"
15+
16+
database "cloud.google.com/go/spanner/admin/database/apiv1"
17+
dbpb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb"
18+
instance "cloud.google.com/go/spanner/admin/instance/apiv1"
19+
inspb "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
1420
)
1521

1622
const (
@@ -22,7 +28,6 @@ const (
2228
SPANNER_DATABASE = "test-db"
2329
)
2430

25-
// newSpanner spins up a Cloud Spanner emulator and connects to it using the Go SQL driver.
2631
func newSpanner(opts ...OptionsFunc) (*sql.DB, func(), error) {
2732
option := &options{}
2833
for _, f := range opts {
@@ -39,7 +44,7 @@ func newSpanner(opts ...OptionsFunc) (*sql.DB, func(), error) {
3944
Repository: SPANNER_IMAGE,
4045
Tag: SPANNER_VERSION,
4146
ExposedPorts: []string{
42-
"9010/tcp",
47+
"9010/tcp", "9020/tcp",
4348
},
4449
Labels: map[string]string{"goose_test": "1"},
4550
},
@@ -54,27 +59,28 @@ func newSpanner(opts ...OptionsFunc) (*sql.DB, func(), error) {
5459

5560
hostPort := resource.GetPort("9010/tcp")
5661
emulatorHost := fmt.Sprintf("localhost:%s", hostPort)
57-
58-
// Set environment variable so that the Spanner driver connects to the emulator.
5962
os.Setenv("SPANNER_EMULATOR_HOST", emulatorHost)
6063

61-
// Use gcloud CLI or spanner admin client to create instance & database.
64+
// Provision instance + database inside emulator
6265
err = pool.Retry(func() error {
63-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
66+
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
6467
defer cancel()
6568

69+
if err := createSpannerResources(ctx); err != nil {
70+
return err
71+
}
72+
6673
dsn := fmt.Sprintf("projects/%s/instances/%s/databases/%s", SPANNER_PROJECT, SPANNER_INSTANCE, SPANNER_DATABASE)
6774
db, err := sql.Open("spanner", dsn)
6875
if err != nil {
6976
return err
7077
}
7178
defer db.Close()
72-
7379
return db.PingContext(ctx)
7480
})
7581
if err != nil {
7682
_ = pool.Purge(resource)
77-
return nil, nil, fmt.Errorf("could not ping spanner emulator: %v", err)
83+
return nil, nil, fmt.Errorf("could not initialize spanner emulator: %v", err)
7884
}
7985

8086
dsn := fmt.Sprintf("projects/%s/instances/%s/databases/%s", SPANNER_PROJECT, SPANNER_INSTANCE, SPANNER_DATABASE)
@@ -94,3 +100,42 @@ func newSpanner(opts ...OptionsFunc) (*sql.DB, func(), error) {
94100

95101
return db, cleanup, nil
96102
}
103+
104+
func createSpannerResources(ctx context.Context) error {
105+
instClient, err := instance.NewInstanceAdminClient(ctx)
106+
if err != nil {
107+
return fmt.Errorf("create instance client failed: %w", err)
108+
}
109+
defer instClient.Close()
110+
111+
dbClient, err := database.NewDatabaseAdminClient(ctx)
112+
if err != nil {
113+
return fmt.Errorf("create database client failed: %w", err)
114+
}
115+
defer dbClient.Close()
116+
117+
instReq := &inspb.CreateInstanceRequest{
118+
Parent: "projects/" + SPANNER_PROJECT,
119+
InstanceId: SPANNER_INSTANCE,
120+
Instance: &inspb.Instance{
121+
Config: "projects/" + SPANNER_PROJECT + "/instanceConfigs/emulator-config",
122+
DisplayName: "Test Instance",
123+
NodeCount: 1,
124+
},
125+
}
126+
if _, err = instClient.CreateInstance(ctx, instReq); err != nil &&
127+
!strings.Contains(err.Error(), "AlreadyExists") {
128+
return fmt.Errorf("create instance failed: %w", err)
129+
}
130+
131+
dbReq := &dbpb.CreateDatabaseRequest{
132+
Parent: fmt.Sprintf("projects/%s/instances/%s", SPANNER_PROJECT, SPANNER_INSTANCE),
133+
CreateStatement: "CREATE DATABASE `" + SPANNER_DATABASE + "`",
134+
}
135+
if _, err = dbClient.CreateDatabase(ctx, dbReq); err != nil &&
136+
!strings.Contains(err.Error(), "AlreadyExists") {
137+
return fmt.Errorf("create database failed: %w", err)
138+
}
139+
140+
return nil
141+
}

0 commit comments

Comments
 (0)