mirror of
https://github.com/go-gitea/gitea
synced 2025-01-08 00:44:26 +00:00
dafadf0028
To help binary size and testing performance
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package unittest
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/modules/auth/password/hash"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
"xorm.io/xorm"
|
|
"xorm.io/xorm/schemas"
|
|
)
|
|
|
|
type FixturesLoader interface {
|
|
Load() error
|
|
}
|
|
|
|
var fixturesLoader FixturesLoader
|
|
|
|
// GetXORMEngine gets the XORM engine
|
|
func GetXORMEngine() (x *xorm.Engine) {
|
|
return db.GetEngine(db.DefaultContext).(*xorm.Engine)
|
|
}
|
|
|
|
func loadFixtureResetSeqPgsql(e *xorm.Engine) error {
|
|
results, err := e.QueryString(`SELECT 'SELECT SETVAL(' ||
|
|
quote_literal(quote_ident(PGT.schemaname) || '.' || quote_ident(S.relname)) ||
|
|
', COALESCE(MAX(' ||quote_ident(C.attname)|| '), 1) ) FROM ' ||
|
|
quote_ident(PGT.schemaname)|| '.'||quote_ident(T.relname)|| ';'
|
|
FROM pg_class AS S,
|
|
pg_depend AS D,
|
|
pg_class AS T,
|
|
pg_attribute AS C,
|
|
pg_tables AS PGT
|
|
WHERE S.relkind = 'S'
|
|
AND S.oid = D.objid
|
|
AND D.refobjid = T.oid
|
|
AND D.refobjid = C.attrelid
|
|
AND D.refobjsubid = C.attnum
|
|
AND T.relname = PGT.tablename
|
|
ORDER BY S.relname;`)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to generate sequence update: %w", err)
|
|
}
|
|
for _, r := range results {
|
|
for _, value := range r {
|
|
_, err = e.Exec(value)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update sequence: %s, error: %w", value, err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// InitFixtures initialize test fixtures for a test database
|
|
func InitFixtures(opts FixturesOptions, engine ...*xorm.Engine) (err error) {
|
|
xormEngine := util.IfZero(util.OptionalArg(engine), GetXORMEngine())
|
|
fixturesLoader, err = NewFixturesLoader(xormEngine, opts)
|
|
// fixturesLoader = NewFixturesLoaderVendor(xormEngine, opts)
|
|
|
|
// register the dummy hash algorithm function used in the test fixtures
|
|
_ = hash.Register("dummy", hash.NewDummyHasher)
|
|
setting.PasswordHashAlgo, _ = hash.SetDefaultPasswordHashAlgorithm("dummy")
|
|
return err
|
|
}
|
|
|
|
// LoadFixtures load fixtures for a test database
|
|
func LoadFixtures() error {
|
|
if err := fixturesLoader.Load(); err != nil {
|
|
return err
|
|
}
|
|
// Now if we're running postgres we need to tell it to update the sequences
|
|
if GetXORMEngine().Dialect().URI().DBType == schemas.POSTGRES {
|
|
if err := loadFixtureResetSeqPgsql(GetXORMEngine()); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|