Scert/backend/internal/database/mysql_integration_helpers_test.go
xuans 07429adbd8 提取MySQL隔离实库测试公共组件
保留数据库测试适配接口,复用实例生命周期与严格TLS配置。后端全量测试和静态检查通过,MySQL 5.7及8.0各55个实库子测试通过。
2026-09-27 19:20:53 +08:00

56 lines
1.3 KiB
Go

package database
import (
"database/sql"
"testing"
"git.pcux.cn/xuans/Scert/backend/internal/config"
"git.pcux.cn/xuans/Scert/backend/internal/testsupport/mysqltest"
)
type realMySQL struct {
server *mysqltest.Server
root string
tlsName string
admin *sql.DB
}
func startRealMySQL(t *testing.T) *realMySQL {
t.Helper()
server := mysqltest.New(t)
return &realMySQL{server: server, root: server.Root(), tlsName: server.TLSName(), admin: server.Admin()}
}
func (f *realMySQL) start(t *testing.T, bootstrap bool) {
t.Helper()
f.server.Start(t, bootstrap)
f.admin = f.server.Admin()
}
func (f *realMySQL) stop(t *testing.T) {
t.Helper()
f.server.Stop(t)
}
func (f *realMySQL) dsn(user, name string) string { return f.server.DSN(user, name) }
func (f *realMySQL) database(t *testing.T) *Database {
t.Helper()
return openRealMySQL(t, f.server.Database(t))
}
func (f *realMySQL) open(t *testing.T, user, name string) *Database {
t.Helper()
return openRealMySQL(t, config.DatabaseConfig{Driver: "mysql", DSN: f.dsn(user, name), MaxOpenConns: 2, MaxIdleConns: 1})
}
func openRealMySQL(t *testing.T, cfg config.DatabaseConfig) *Database {
t.Helper()
db, err := Open(t.Context(), cfg)
if err != nil {
t.Fatal("Scert 打开隔离数据库失败")
}
t.Cleanup(func() { _ = db.Close() })
return db
}