aboutsummaryrefslogtreecommitdiffstats
path: root/dashboard/app/util_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dashboard/app/util_test.go')
-rw-r--r--dashboard/app/util_test.go37
1 files changed, 31 insertions, 6 deletions
diff --git a/dashboard/app/util_test.go b/dashboard/app/util_test.go
index 71a78a7f1..55d8acc91 100644
--- a/dashboard/app/util_test.go
+++ b/dashboard/app/util_test.go
@@ -20,6 +20,7 @@ import (
"path/filepath"
"reflect"
"runtime"
+ "slices"
"strings"
"sync"
"sync/atomic"
@@ -107,7 +108,7 @@ func newCtx(t *testing.T, appID string) *Ctx {
var appIDSeq = uint32(0)
func NewSpannerCtx(t *testing.T) *Ctx {
- ddlStatements, err := loadDDLStatements("1_initialize.up.sql")
+ ddlStatements, err := loadUpDDLStatements()
if err != nil {
t.Fatal(err)
}
@@ -140,14 +141,38 @@ func executeSpannerDDL(ctx context.Context, statements []string) error {
return nil
}
-func loadDDLStatements(file string) ([]string, error) {
- data, err := os.ReadFile(filepath.Join("aidb", "migrations", file))
+func loadUpDDLStatements() ([]string, error) {
+ return loadDDLStatements("*.up.sql", 1)
+}
+
+func loadDownDDLStatements() ([]string, error) {
+ return loadDDLStatements("*.down.sql", -1)
+}
+
+func loadDDLStatements(wildcard string, sortOrder int) ([]string, error) {
+ files, err := filepath.Glob(filepath.Join("aidb", "migrations", wildcard))
if err != nil {
return nil, err
}
- // We need individual statements. Assume semicolon is not used in other places than statements end.
- statements := strings.Split(string(data), ";")
- return statements[:len(statements)-1], nil
+ if len(files) == 0 {
+ return nil, fmt.Errorf("loadDDLStatements: wildcard did not match any files: %q", wildcard)
+ }
+ // We prefix DDL file names with sequence numbers.
+ slices.SortFunc(files, func(a, b string) int {
+ return strings.Compare(a, b) * sortOrder
+ })
+ var all []string
+ for _, file := range files {
+ data, err := os.ReadFile(file)
+ if err != nil {
+ return nil, err
+ }
+ // We need individual statements. Assume semicolon is not used in other places than statements end.
+ statements := strings.Split(string(data), ";")
+ statements = statements[:len(statements)-1]
+ all = append(all, statements...)
+ }
+ return all, nil
}
func (c *Ctx) config() *GlobalConfig {