summaryrefslogtreecommitdiffstats
path: root/models/db/unit_tests.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/db/unit_tests.go')
-rw-r--r--models/db/unit_tests.go206
1 files changed, 39 insertions, 167 deletions
diff --git a/models/db/unit_tests.go b/models/db/unit_tests.go
index 6f079c8676..2b1691726f 100644
--- a/models/db/unit_tests.go
+++ b/models/db/unit_tests.go
@@ -6,157 +6,26 @@ package db
import (
"context"
- "fmt"
"math"
- "net/url"
- "os"
- "path/filepath"
- "testing"
- "code.gitea.io/gitea/modules/base"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/storage"
- "code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/modules/unittestbridge"
- "github.com/stretchr/testify/assert"
"xorm.io/xorm"
- "xorm.io/xorm/names"
)
+// Code in this file is mainly used by models.CheckConsistencyFor, which is not in the unit test for various reasons.
+// In the future if we can decouple CheckConsistencyFor into separate unit test code, then this file can be moved into unittest package too.
+
// NonexistentID an ID that will never exist
const NonexistentID = int64(math.MaxInt64)
-// giteaRoot a path to the gitea root
-var (
- giteaRoot string
- fixturesDir string
-)
-
-// FixturesDir returns the fixture directory
-func FixturesDir() string {
- return fixturesDir
-}
-
-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, fixtureFiles ...string) {
- var err error
- giteaRoot = pathToGiteaRoot
- fixturesDir = filepath.Join(pathToGiteaRoot, "models", "fixtures")
-
- var opts FixturesOptions
- if len(fixtureFiles) == 0 {
- opts.Dir = fixturesDir
- } else {
- for _, f := range fixtureFiles {
- if len(f) != 0 {
- opts.Files = append(opts.Files, filepath.Join(fixturesDir, f))
- }
- }
- }
-
- if err = CreateTestEngine(opts); err != nil {
- 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.Database.UseSQLite3 = true
- setting.RepoRootPath, err = os.MkdirTemp(os.TempDir(), "repos")
- if err != nil {
- fatalTestError("TempDir: %v\n", err)
- }
- setting.AppDataPath, err = os.MkdirTemp(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 {
- fatalTestError("url.Parse: %v\n", err)
- }
- setting.Attachment.Storage.Path = filepath.Join(setting.AppDataPath, "attachments")
-
- setting.LFS.Storage.Path = filepath.Join(setting.AppDataPath, "lfs")
-
- setting.Avatar.Storage.Path = filepath.Join(setting.AppDataPath, "avatars")
-
- setting.RepoAvatar.Storage.Path = filepath.Join(setting.AppDataPath, "repo-avatars")
-
- setting.RepoArchive.Storage.Path = filepath.Join(setting.AppDataPath, "repo-archive")
-
- if err = storage.Init(); err != nil {
- fatalTestError("storage.Init: %v\n", err)
- }
-
- if err = util.RemoveAll(setting.RepoRootPath); err != nil {
- fatalTestError("util.RemoveAll: %v\n", err)
- }
- if err = util.CopyDir(filepath.Join(pathToGiteaRoot, "integrations", "gitea-repositories-meta"), setting.RepoRootPath); err != nil {
- fatalTestError("util.CopyDir: %v\n", err)
- }
-
- exitStatus := m.Run()
- if err = util.RemoveAll(setting.RepoRootPath); err != nil {
- fatalTestError("util.RemoveAll: %v\n", err)
- }
- if err = util.RemoveAll(setting.AppDataPath); err != nil {
- fatalTestError("util.RemoveAll: %v\n", err)
- }
- os.Exit(exitStatus)
-}
-
-// FixturesOptions fixtures needs to be loaded options
-type FixturesOptions struct {
- Dir string
- Files []string
-}
-
-// CreateTestEngine creates a memory database and loads the fixture data from fixturesDir
-func CreateTestEngine(opts FixturesOptions) error {
- var err error
- x, err = xorm.NewEngine("sqlite3", "file::memory:?cache=shared&_txlock=immediate")
- if err != nil {
- return err
- }
- x.SetMapper(names.GonicMapper{})
- if err = syncTables(); err != nil {
- return err
- }
- switch os.Getenv("GITEA_UNIT_TESTS_VERBOSE") {
- case "true", "1":
- x.ShowSQL(true)
- }
-
+//SetUnitTestEngine is used by unit test code
+func SetUnitTestEngine(eng *xorm.Engine) {
+ x = eng
DefaultContext = &Context{
Context: context.Background(),
e: x,
}
-
- return InitFixtures(opts)
-}
-
-// PrepareTestDatabase load test fixtures into test database
-func PrepareTestDatabase() error {
- return LoadFixtures()
-}
-
-// PrepareTestEnv prepares the environment for unit tests. Can only be called
-// by tests that use the above MainTest(..) function.
-func PrepareTestEnv(t testing.TB) {
- assert.NoError(t, PrepareTestDatabase())
- assert.NoError(t, util.RemoveAll(setting.RepoRootPath))
- metaPath := filepath.Join(giteaRoot, "integrations", "gitea-repositories-meta")
- assert.NoError(t, util.CopyDir(metaPath, setting.RepoRootPath))
- base.SetupGiteaRoot() // Makes sure GITEA_ROOT is set
}
type testCond struct {
@@ -182,10 +51,6 @@ func whereConditions(sess *xorm.Session, conditions []interface{}) {
// LoadBeanIfExists loads beans from fixture database if exist
func LoadBeanIfExists(bean interface{}, conditions ...interface{}) (bool, error) {
- return loadBeanIfExists(bean, conditions...)
-}
-
-func loadBeanIfExists(bean interface{}, conditions ...interface{}) (bool, error) {
sess := x.NewSession()
defer sess.Close()
whereConditions(sess, conditions)
@@ -193,61 +58,68 @@ func loadBeanIfExists(bean interface{}, conditions ...interface{}) (bool, error)
}
// BeanExists for testing, check if a bean exists
-func BeanExists(t testing.TB, bean interface{}, conditions ...interface{}) bool {
- exists, err := loadBeanIfExists(bean, conditions...)
- assert.NoError(t, err)
+func BeanExists(t unittestbridge.Tester, bean interface{}, conditions ...interface{}) bool {
+ ta := unittestbridge.NewAsserter(t)
+ exists, err := LoadBeanIfExists(bean, conditions...)
+ ta.NoError(err)
return exists
}
-// AssertExistsAndLoadBean assert that a bean exists and load it from the test
-// database
-func AssertExistsAndLoadBean(t testing.TB, bean interface{}, conditions ...interface{}) interface{} {
- exists, err := loadBeanIfExists(bean, conditions...)
- assert.NoError(t, err)
- assert.True(t, exists,
+// AssertExistsAndLoadBean assert that a bean exists and load it from the test database
+func AssertExistsAndLoadBean(t unittestbridge.Tester, bean interface{}, conditions ...interface{}) interface{} {
+ ta := unittestbridge.NewAsserter(t)
+ exists, err := LoadBeanIfExists(bean, conditions...)
+ ta.NoError(err)
+ ta.True(exists,
"Expected to find %+v (of type %T, with conditions %+v), but did not",
bean, bean, conditions)
return bean
}
// GetCount get the count of a bean
-func GetCount(t testing.TB, bean interface{}, conditions ...interface{}) int {
+func GetCount(t unittestbridge.Tester, bean interface{}, conditions ...interface{}) int {
+ ta := unittestbridge.NewAsserter(t)
sess := x.NewSession()
defer sess.Close()
whereConditions(sess, conditions)
count, err := sess.Count(bean)
- assert.NoError(t, err)
+ ta.NoError(err)
return int(count)
}
// AssertNotExistsBean assert that a bean does not exist in the test database
-func AssertNotExistsBean(t testing.TB, bean interface{}, conditions ...interface{}) {
- exists, err := loadBeanIfExists(bean, conditions...)
- assert.NoError(t, err)
- assert.False(t, exists)
+func AssertNotExistsBean(t unittestbridge.Tester, bean interface{}, conditions ...interface{}) {
+ ta := unittestbridge.NewAsserter(t)
+ exists, err := LoadBeanIfExists(bean, conditions...)
+ ta.NoError(err)
+ ta.False(exists)
}
// AssertExistsIf asserts that a bean exists or does not exist, depending on
// what is expected.
-func AssertExistsIf(t *testing.T, expected bool, bean interface{}, conditions ...interface{}) {
- exists, err := loadBeanIfExists(bean, conditions...)
- assert.NoError(t, err)
- assert.Equal(t, expected, exists)
+func AssertExistsIf(t unittestbridge.Tester, expected bool, bean interface{}, conditions ...interface{}) {
+ ta := unittestbridge.NewAsserter(t)
+ exists, err := LoadBeanIfExists(bean, conditions...)
+ ta.NoError(err)
+ ta.Equal(expected, exists)
}
// AssertSuccessfulInsert assert that beans is successfully inserted
-func AssertSuccessfulInsert(t testing.TB, beans ...interface{}) {
+func AssertSuccessfulInsert(t unittestbridge.Tester, beans ...interface{}) {
+ ta := unittestbridge.NewAsserter(t)
_, err := x.Insert(beans...)
- assert.NoError(t, err)
+ ta.NoError(err)
}
// AssertCount assert the count of a bean
-func AssertCount(t testing.TB, bean, expected interface{}) {
- assert.EqualValues(t, expected, GetCount(t, bean))
+func AssertCount(t unittestbridge.Tester, bean, expected interface{}) {
+ ta := unittestbridge.NewAsserter(t)
+ ta.EqualValues(expected, GetCount(ta, bean))
}
// AssertInt64InRange assert value is in range [low, high]
-func AssertInt64InRange(t testing.TB, low, high, value int64) {
- assert.True(t, value >= low && value <= high,
+func AssertInt64InRange(t unittestbridge.Tester, low, high, value int64) {
+ ta := unittestbridge.NewAsserter(t)
+ ta.True(value >= low && value <= high,
"Expected value in range [%d, %d], found %d", low, high, value)
}