aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2025-12-30 13:31:35 +0100
committerDmitry Vyukov <dvyukov@google.com>2025-12-31 16:40:48 +0000
commit51c522f1591fe44ec87d216caf93ae0aa8179a7c (patch)
treee455cb0a8e758eb74b4ef81f7c483a5445edd905 /syz-cluster
parent49aa01cc85881401b4863fee7eb2d1a0b24daa93 (diff)
syz-cluster/pkg/db: make it possible to use emulator in dashboard tests
Diffstat (limited to 'syz-cluster')
-rw-r--r--syz-cluster/pkg/db/spanner.go59
-rw-r--r--syz-cluster/tools/db-mgmt/main.go2
2 files changed, 36 insertions, 25 deletions
diff --git a/syz-cluster/pkg/db/spanner.go b/syz-cluster/pkg/db/spanner.go
index c1484df74..148a58e35 100644
--- a/syz-cluster/pkg/db/spanner.go
+++ b/syz-cluster/pkg/db/spanner.go
@@ -72,25 +72,30 @@ func CreateSpannerInstance(ctx context.Context, uri ParsedURI) error {
return err
}
-func CreateSpannerDB(ctx context.Context, uri ParsedURI) error {
+func CreateSpannerDB(ctx context.Context, uri ParsedURI, ddl []string) error {
client, err := database.NewDatabaseAdminClient(ctx)
if err != nil {
return err
}
defer client.Close()
- _, err = client.GetDatabase(ctx, &databasepb.GetDatabaseRequest{Name: uri.Full})
- if err != nil && spanner.ErrCode(err) == codes.NotFound {
- op, err := client.CreateDatabase(ctx, &databasepb.CreateDatabaseRequest{
- Parent: uri.InstancePrefix,
- CreateStatement: `CREATE DATABASE ` + uri.Database,
- ExtraStatements: []string{},
- })
- if err != nil {
+ if ddl == nil {
+ _, err = client.GetDatabase(ctx, &databasepb.GetDatabaseRequest{Name: uri.Full})
+ if err != nil && spanner.ErrCode(err) != codes.NotFound {
return err
}
- _, err = op.Wait(ctx)
+ if err == nil {
+ return nil
+ }
+ }
+ op, err := client.CreateDatabase(ctx, &databasepb.CreateDatabaseRequest{
+ Parent: uri.InstancePrefix,
+ CreateStatement: `CREATE DATABASE ` + uri.Database,
+ ExtraStatements: ddl,
+ })
+ if err != nil {
return err
}
+ _, err = op.Wait(ctx)
return err
}
@@ -128,31 +133,37 @@ func getMigrateInstance(uri string) (*migrate.Migrate, error) {
}
func NewTransientDB(t *testing.T) (*spanner.Client, context.Context) {
- setupSpannerEmulator(t)
- uri, err := ParseURI("projects/my-project/instances/test-instance/databases/" +
- fmt.Sprintf("db%v", time.Now().UnixNano()))
- if err != nil {
- t.Fatal(err)
- }
+ uri := "projects/my-project/instances/test-instance/databases/" +
+ fmt.Sprintf("db%v", time.Now().UnixNano())
+ NewTestDB(t, uri, nil)
ctx := t.Context()
- err = CreateSpannerInstance(ctx, uri)
+ client, err := spanner.NewClient(ctx, uri)
if err != nil {
t.Fatal(err)
}
- err = CreateSpannerDB(ctx, uri)
+ t.Cleanup(client.Close)
+ err = RunMigrations(uri)
if err != nil {
t.Fatal(err)
}
- client, err := spanner.NewClient(ctx, uri.Full)
+ return client, ctx
+}
+
+func NewTestDB(t *testing.T, uri string, ddl []string) {
+ setupSpannerEmulator(t)
+ // Don't bother destroying instances/databases.
+ // We create isolated per-test databases, and the emulator is all in-memory.
+ // So when the emulator is killed with the test binary, everything is gone.
+ parsedURI, err := ParseURI(uri)
if err != nil {
t.Fatal(err)
}
- t.Cleanup(client.Close)
- err = RunMigrations(uri.Full)
- if err != nil {
- t.Fatal(err)
+ if err := CreateSpannerInstance(t.Context(), parsedURI); err != nil {
+ t.Fatalf("failed CreateSpannerInstance: %v", err)
+ }
+ if err := CreateSpannerDB(t.Context(), parsedURI, ddl); err != nil {
+ t.Fatalf("failed CreateSpannerDB: %v", err)
}
- return client, ctx
}
var (
diff --git a/syz-cluster/tools/db-mgmt/main.go b/syz-cluster/tools/db-mgmt/main.go
index 7d362e929..b5ba3b341 100644
--- a/syz-cluster/tools/db-mgmt/main.go
+++ b/syz-cluster/tools/db-mgmt/main.go
@@ -58,7 +58,7 @@ func main() {
}
}
log.Printf("check if DB is present")
- err = db.CreateSpannerDB(ctx, uri)
+ err = db.CreateSpannerDB(ctx, uri, nil)
if err != nil {
app.Fatalf("failed to create Spanner DB: %v", err)
}