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
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package unittest_test
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
"code.gitea.io/gitea/modules/test"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
var NewFixturesLoaderVendor = func(e *xorm.Engine, opts unittest.FixturesOptions) (unittest.FixturesLoader, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
/*
|
|
// the old code is kept here in case we are still interested in benchmarking the two implementations
|
|
func init() {
|
|
NewFixturesLoaderVendor = func(e *xorm.Engine, opts unittest.FixturesOptions) (unittest.FixturesLoader, error) {
|
|
return NewFixturesLoaderVendorGoTestfixtures(e, opts)
|
|
}
|
|
}
|
|
|
|
func NewFixturesLoaderVendorGoTestfixtures(e *xorm.Engine, opts unittest.FixturesOptions) (*testfixtures.Loader, error) {
|
|
files, err := unittest.FixturesFileFullPaths(opts.Dir, opts.Files)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get fixtures files: %w", err)
|
|
}
|
|
var dialect string
|
|
switch e.Dialect().URI().DBType {
|
|
case schemas.POSTGRES:
|
|
dialect = "postgres"
|
|
case schemas.MYSQL:
|
|
dialect = "mysql"
|
|
case schemas.MSSQL:
|
|
dialect = "mssql"
|
|
case schemas.SQLITE:
|
|
dialect = "sqlite3"
|
|
default:
|
|
return nil, fmt.Errorf("unsupported RDBMS for integration tests: %q", e.Dialect().URI().DBType)
|
|
}
|
|
loaderOptions := []func(loader *testfixtures.Loader) error{
|
|
testfixtures.Database(e.DB().DB),
|
|
testfixtures.Dialect(dialect),
|
|
testfixtures.DangerousSkipTestDatabaseCheck(),
|
|
testfixtures.Files(files...),
|
|
}
|
|
if e.Dialect().URI().DBType == schemas.POSTGRES {
|
|
loaderOptions = append(loaderOptions, testfixtures.SkipResetSequences())
|
|
}
|
|
return testfixtures.New(loaderOptions...)
|
|
}
|
|
*/
|
|
|
|
func prepareTestFixturesLoaders(t testing.TB) unittest.FixturesOptions {
|
|
_ = user_model.User{}
|
|
opts := unittest.FixturesOptions{Dir: filepath.Join(test.SetupGiteaRoot(), "models", "fixtures"), Files: []string{
|
|
"user.yml",
|
|
}}
|
|
require.NoError(t, unittest.CreateTestEngine(opts))
|
|
return opts
|
|
}
|
|
|
|
func TestFixturesLoader(t *testing.T) {
|
|
opts := prepareTestFixturesLoaders(t)
|
|
loaderInternal, err := unittest.NewFixturesLoader(unittest.GetXORMEngine(), opts)
|
|
require.NoError(t, err)
|
|
loaderVendor, err := NewFixturesLoaderVendor(unittest.GetXORMEngine(), opts)
|
|
require.NoError(t, err)
|
|
t.Run("Internal", func(t *testing.T) {
|
|
require.NoError(t, loaderInternal.Load())
|
|
require.NoError(t, loaderInternal.Load())
|
|
})
|
|
t.Run("Vendor", func(t *testing.T) {
|
|
if loaderVendor == nil {
|
|
t.Skip()
|
|
}
|
|
require.NoError(t, loaderVendor.Load())
|
|
require.NoError(t, loaderVendor.Load())
|
|
})
|
|
}
|
|
|
|
func BenchmarkFixturesLoader(b *testing.B) {
|
|
opts := prepareTestFixturesLoaders(b)
|
|
require.NoError(b, unittest.CreateTestEngine(opts))
|
|
loaderInternal, err := unittest.NewFixturesLoader(unittest.GetXORMEngine(), opts)
|
|
require.NoError(b, err)
|
|
loaderVendor, err := NewFixturesLoaderVendor(unittest.GetXORMEngine(), opts)
|
|
require.NoError(b, err)
|
|
|
|
// BenchmarkFixturesLoader/Vendor
|
|
// BenchmarkFixturesLoader/Vendor-12 1696 719416 ns/op
|
|
// BenchmarkFixturesLoader/Internal
|
|
// BenchmarkFixturesLoader/Internal-12 1746 670457 ns/op
|
|
b.Run("Internal", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
require.NoError(b, loaderInternal.Load())
|
|
}
|
|
})
|
|
b.Run("Vendor", func(b *testing.B) {
|
|
if loaderVendor == nil {
|
|
b.Skip()
|
|
}
|
|
for i := 0; i < b.N; i++ {
|
|
require.NoError(b, loaderVendor.Load())
|
|
}
|
|
})
|
|
}
|