From d27d720f05835dfc4633587aec885ab9b93b5f86 Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Tue, 20 Feb 2018 23:38:52 -0800 Subject: [PATCH] Use unique temp dirs in unit tests (#3494) * Use unique temp dirs in unit tests * Remove temp dirs after tests run * os.RemoveAll -> removeAllWithRetry --- models/unit_tests.go | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/models/unit_tests.go b/models/unit_tests.go index 962b1a494..9013fb987 100644 --- a/models/unit_tests.go +++ b/models/unit_tests.go @@ -6,6 +6,8 @@ package models import ( "fmt" + "io/ioutil" + "net/url" "os" "path/filepath" "testing" @@ -18,7 +20,6 @@ import ( "github.com/go-xorm/xorm" "github.com/stretchr/testify/assert" "gopkg.in/testfixtures.v2" - "net/url" ) // NonexistentID an ID that will never exist @@ -27,6 +28,11 @@ const NonexistentID = 9223372036854775807 // giteaRoot a path to the gitea root var giteaRoot string +func fatalTestError(fmtStr string, args ...interface{}) { + fmt.Fprintf(os.Stderr, fmtStr, args...) + os.Exit(1) +} + // MainTest a reusable TestMain(..) function for unit tests that need to use a // test database. Creates the test database, and sets necessary settings. func MainTest(m *testing.M, pathToGiteaRoot string) { @@ -34,25 +40,36 @@ func MainTest(m *testing.M, pathToGiteaRoot string) { giteaRoot = pathToGiteaRoot fixturesDir := filepath.Join(pathToGiteaRoot, "models", "fixtures") if err = createTestEngine(fixturesDir); err != nil { - fmt.Fprintf(os.Stderr, "Error creating test engine: %v\n", err) - os.Exit(1) + fatalTestError("Error creating test engine: %v\n", err) } setting.AppURL = "https://try.gitea.io/" setting.RunUser = "runuser" setting.SSH.Port = 3000 setting.SSH.Domain = "try.gitea.io" - setting.RepoRootPath = filepath.Join(os.TempDir(), "repos") - setting.AppDataPath = filepath.Join(os.TempDir(), "appdata") + setting.RepoRootPath, err = ioutil.TempDir(os.TempDir(), "repos") + if err != nil { + fatalTestError("TempDir: %v\n", err) + } + setting.AppDataPath, err = ioutil.TempDir(os.TempDir(), "appdata") + if err != nil { + fatalTestError("TempDir: %v\n", err) + } setting.AppWorkPath = pathToGiteaRoot setting.StaticRootPath = pathToGiteaRoot setting.GravatarSourceURL, err = url.Parse("https://secure.gravatar.com/avatar/") if err != nil { - fmt.Fprintf(os.Stderr, "Error url.Parse: %v\n", err) - os.Exit(1) + fatalTestError("url.Parse: %v\n", err) } - os.Exit(m.Run()) + exitStatus := m.Run() + if err = removeAllWithRetry(setting.RepoRootPath); err != nil { + fatalTestError("os.RemoveAll: %v\n", err) + } + if err = removeAllWithRetry(setting.AppDataPath); err != nil { + fatalTestError("os.RemoveAll: %v\n", err) + } + os.Exit(exitStatus) } func createTestEngine(fixturesDir string) error {