Skip to content

Commit

Permalink
Use unique temp dirs in unit tests (#3494)
Browse files Browse the repository at this point in the history
* Use unique temp dirs in unit tests

* Remove temp dirs after tests run

* os.RemoveAll -> removeAllWithRetry
  • Loading branch information
ethantkoenig authored and lunny committed Feb 21, 2018
1 parent 2f5c1ba commit d27d720
Showing 1 changed file with 25 additions and 8 deletions.
33 changes: 25 additions & 8 deletions models/unit_tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package models

import (
"fmt"
"io/ioutil"
"net/url"
"os"
"path/filepath"
"testing"
Expand All @@ -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
Expand All @@ -27,32 +28,48 @@ 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) {
var err error
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 {
Expand Down

0 comments on commit d27d720

Please sign in to comment.