Use unique temp dirs in unit tests (#3494)

* Use unique temp dirs in unit tests

* Remove temp dirs after tests run

* os.RemoveAll -> removeAllWithRetry
This commit is contained in:
Ethan Koenig 2018-02-20 23:38:52 -08:00 committed by Lunny Xiao
parent 2f5c1ba1db
commit d27d720f05
1 changed files with 25 additions and 8 deletions

View File

@ -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 {