From ff03a4eff660bc474272d580bea6405f752279bd Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Tue, 26 Aug 2025 07:36:00 +0200 Subject: [PATCH] chore: make migration tests relative to the root of the repository (#8999) This is a noop refactor. It is on the path of each integration tests and this is why it needs no additional testing. It makes it possible to run the migration tests using `go test` (which runs from the root) instead of building a test binary with `go test -c` that runs in the target directory, which is what the current tests are doing. This will be put to use to extract coverage in a unified way. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8999 Reviewed-by: jerger Co-authored-by: Earl Warren Co-committed-by: Earl Warren --- .../migration-test/migration_test.go | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/tests/integration/migration-test/migration_test.go b/tests/integration/migration-test/migration_test.go index 798161a560..d62afbf0f7 100644 --- a/tests/integration/migration-test/migration_test.go +++ b/tests/integration/migration-test/migration_test.go @@ -36,16 +36,21 @@ import ( var currentEngine *xorm.Engine +func getRoot(t *testing.T) string { + t.Helper() + root := base.SetupGiteaRoot() + if root == "" { + t.Fatal("Environment variable $GITEA_ROOT not set") + } + return root +} + func initMigrationTest(t *testing.T) func() { log.RegisterEventWriter("test", testlogger.NewTestLoggerWriter) deferFn := tests.PrintCurrentTest(t, 2) - giteaRoot := base.SetupGiteaRoot() - if giteaRoot == "" { - tests.Printf("Environment variable $GITEA_ROOT not set\n") - os.Exit(1) - } - setting.AppPath = path.Join(giteaRoot, "gitea") + root := getRoot(t) + setting.AppPath = path.Join(root, "gitea") if _, err := os.Stat(setting.AppPath); err != nil { tests.Printf("Could not find gitea binary at %s\n", setting.AppPath) os.Exit(1) @@ -56,7 +61,7 @@ func initMigrationTest(t *testing.T) func() { tests.Printf("Environment variable $GITEA_CONF not set\n") os.Exit(1) } else if !path.IsAbs(giteaConf) { - setting.CustomConf = path.Join(giteaRoot, giteaConf) + setting.CustomConf = path.Join(root, giteaConf) } else { setting.CustomConf = giteaConf } @@ -92,21 +97,17 @@ func initMigrationTest(t *testing.T) func() { return deferFn } -func availableVersions() ([]string, error) { - migrationsDir, err := os.Open("tests/integration/migration-test") - if err != nil { - return nil, err - } +func availableVersions(t *testing.T) []string { + t.Helper() + root := getRoot(t) + migrationsDir, err := os.Open(path.Join(root, "tests/integration/migration-test")) + require.NoError(t, err) defer migrationsDir.Close() versionRE, err := regexp.Compile(".*-v(?P.+)\\." + regexp.QuoteMeta(setting.Database.Type.String()) + "\\.sql.gz") - if err != nil { - return nil, err - } + require.NoError(t, err) filenames, err := migrationsDir.Readdirnames(-1) - if err != nil { - return nil, err - } + require.NoError(t, err) versions := []string{} for _, filename := range filenames { if versionRE.MatchString(filename) { @@ -115,41 +116,36 @@ func availableVersions() ([]string, error) { } } sort.Strings(versions) - return versions, nil + return versions } -func readSQLFromFile(version string) (string, error) { - filename := fmt.Sprintf("tests/integration/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type) +func readSQLFromFile(t *testing.T, version string) string { + t.Helper() + root := getRoot(t) + filename := fmt.Sprintf(path.Join(root, "tests/integration/migration-test/gitea-v%s.%s.sql.gz"), version, setting.Database.Type) if _, err := os.Stat(filename); os.IsNotExist(err) { - filename = fmt.Sprintf("tests/integration/migration-test/forgejo-v%s.%s.sql.gz", version, setting.Database.Type) + filename = fmt.Sprintf(path.Join(root, "tests/integration/migration-test/forgejo-v%s.%s.sql.gz"), version, setting.Database.Type) if _, err := os.Stat(filename); os.IsNotExist(err) { - return "", nil + require.NoError(t, err) } } file, err := os.Open(filename) - if err != nil { - return "", err - } + require.NoError(t, err) defer file.Close() gr, err := gzip.NewReader(file) - if err != nil { - return "", err - } + require.NoError(t, err) defer gr.Close() bytes, err := io.ReadAll(gr) - if err != nil { - return "", err - } - return string(charset.MaybeRemoveBOM(bytes, charset.ConvertOpts{})), nil + require.NoError(t, err) + return string(charset.MaybeRemoveBOM(bytes, charset.ConvertOpts{})) } func restoreOldDB(t *testing.T, version string) bool { - data, err := readSQLFromFile(version) - require.NoError(t, err) + data := readSQLFromFile(t, version) if len(data) == 0 { tests.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version) return false @@ -318,8 +314,7 @@ func TestMigrations(t *testing.T) { defer initMigrationTest(t)() dialect := setting.Database.Type - versions, err := availableVersions() - require.NoError(t, err) + versions := availableVersions(t) if len(versions) == 0 { tests.Printf("No old database versions available to migration test for %s\n", dialect)