Skip to content

Commit 51c522f

Browse files
committed
syz-cluster/pkg/db: make it possible to use emulator in dashboard tests
1 parent 49aa01c commit 51c522f

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

syz-cluster/pkg/db/spanner.go

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -72,25 +72,30 @@ func CreateSpannerInstance(ctx context.Context, uri ParsedURI) error {
7272
return err
7373
}
7474

75-
func CreateSpannerDB(ctx context.Context, uri ParsedURI) error {
75+
func CreateSpannerDB(ctx context.Context, uri ParsedURI, ddl []string) error {
7676
client, err := database.NewDatabaseAdminClient(ctx)
7777
if err != nil {
7878
return err
7979
}
8080
defer client.Close()
81-
_, err = client.GetDatabase(ctx, &databasepb.GetDatabaseRequest{Name: uri.Full})
82-
if err != nil && spanner.ErrCode(err) == codes.NotFound {
83-
op, err := client.CreateDatabase(ctx, &databasepb.CreateDatabaseRequest{
84-
Parent: uri.InstancePrefix,
85-
CreateStatement: `CREATE DATABASE ` + uri.Database,
86-
ExtraStatements: []string{},
87-
})
88-
if err != nil {
81+
if ddl == nil {
82+
_, err = client.GetDatabase(ctx, &databasepb.GetDatabaseRequest{Name: uri.Full})
83+
if err != nil && spanner.ErrCode(err) != codes.NotFound {
8984
return err
9085
}
91-
_, err = op.Wait(ctx)
86+
if err == nil {
87+
return nil
88+
}
89+
}
90+
op, err := client.CreateDatabase(ctx, &databasepb.CreateDatabaseRequest{
91+
Parent: uri.InstancePrefix,
92+
CreateStatement: `CREATE DATABASE ` + uri.Database,
93+
ExtraStatements: ddl,
94+
})
95+
if err != nil {
9296
return err
9397
}
98+
_, err = op.Wait(ctx)
9499
return err
95100
}
96101

@@ -128,31 +133,37 @@ func getMigrateInstance(uri string) (*migrate.Migrate, error) {
128133
}
129134

130135
func NewTransientDB(t *testing.T) (*spanner.Client, context.Context) {
131-
setupSpannerEmulator(t)
132-
uri, err := ParseURI("projects/my-project/instances/test-instance/databases/" +
133-
fmt.Sprintf("db%v", time.Now().UnixNano()))
134-
if err != nil {
135-
t.Fatal(err)
136-
}
136+
uri := "projects/my-project/instances/test-instance/databases/" +
137+
fmt.Sprintf("db%v", time.Now().UnixNano())
138+
NewTestDB(t, uri, nil)
137139
ctx := t.Context()
138-
err = CreateSpannerInstance(ctx, uri)
140+
client, err := spanner.NewClient(ctx, uri)
139141
if err != nil {
140142
t.Fatal(err)
141143
}
142-
err = CreateSpannerDB(ctx, uri)
144+
t.Cleanup(client.Close)
145+
err = RunMigrations(uri)
143146
if err != nil {
144147
t.Fatal(err)
145148
}
146-
client, err := spanner.NewClient(ctx, uri.Full)
149+
return client, ctx
150+
}
151+
152+
func NewTestDB(t *testing.T, uri string, ddl []string) {
153+
setupSpannerEmulator(t)
154+
// Don't bother destroying instances/databases.
155+
// We create isolated per-test databases, and the emulator is all in-memory.
156+
// So when the emulator is killed with the test binary, everything is gone.
157+
parsedURI, err := ParseURI(uri)
147158
if err != nil {
148159
t.Fatal(err)
149160
}
150-
t.Cleanup(client.Close)
151-
err = RunMigrations(uri.Full)
152-
if err != nil {
153-
t.Fatal(err)
161+
if err := CreateSpannerInstance(t.Context(), parsedURI); err != nil {
162+
t.Fatalf("failed CreateSpannerInstance: %v", err)
163+
}
164+
if err := CreateSpannerDB(t.Context(), parsedURI, ddl); err != nil {
165+
t.Fatalf("failed CreateSpannerDB: %v", err)
154166
}
155-
return client, ctx
156167
}
157168

158169
var (

syz-cluster/tools/db-mgmt/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func main() {
5858
}
5959
}
6060
log.Printf("check if DB is present")
61-
err = db.CreateSpannerDB(ctx, uri)
61+
err = db.CreateSpannerDB(ctx, uri, nil)
6262
if err != nil {
6363
app.Fatalf("failed to create Spanner DB: %v", err)
6464
}

0 commit comments

Comments
 (0)