56 lines
1.3 KiB
Go
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
|
|
}
|