diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2025-12-30 13:31:35 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2025-12-31 16:40:48 +0000 |
| commit | 51c522f1591fe44ec87d216caf93ae0aa8179a7c (patch) | |
| tree | e455cb0a8e758eb74b4ef81f7c483a5445edd905 /syz-cluster | |
| parent | 49aa01cc85881401b4863fee7eb2d1a0b24daa93 (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.go | 59 | ||||
| -rw-r--r-- | syz-cluster/tools/db-mgmt/main.go | 2 |
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) } |
