63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
|
|
package mysqlx
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/DATA-DOG/go-sqlmock"
|
||
|
|
drivermysql "gorm.io/driver/mysql"
|
||
|
|
"gorm.io/gorm/logger"
|
||
|
|
)
|
||
|
|
|
||
|
|
type testModel struct {
|
||
|
|
ID uint `gorm:"primaryKey"`
|
||
|
|
Name string
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNewWithCustomDialector(t *testing.T) {
|
||
|
|
sqlDB, _, err := sqlmock.New()
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to create sqlmock: %v", err)
|
||
|
|
}
|
||
|
|
defer sqlDB.Close()
|
||
|
|
|
||
|
|
client, err := NewDB(
|
||
|
|
WithDialector(drivermysql.New(drivermysql.Config{Conn: sqlDB})),
|
||
|
|
WithLogger(logger.Default.LogMode(logger.Silent)),
|
||
|
|
WithConnectionPool(2, 5, 5*time.Minute, 10*time.Minute),
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("unexpected error: %v", err)
|
||
|
|
}
|
||
|
|
defer client.Close()
|
||
|
|
|
||
|
|
if client.DB() == nil {
|
||
|
|
t.Fatal("expected non-nil DB")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestBuildDSNWithExpandedConfig(t *testing.T) {
|
||
|
|
cfg := defaultConfig()
|
||
|
|
WithDSNUser("testuser")(cfg)
|
||
|
|
WithDSNPassword("password")(cfg)
|
||
|
|
WithDSNNet("tcp")(cfg)
|
||
|
|
WithDSNAddr("127.0.0.1:3306")(cfg)
|
||
|
|
WithDSNDBName("testdb")(cfg)
|
||
|
|
WithDSNParams(map[string]string{"parseTime": "true", "loc": "Local"})(cfg)
|
||
|
|
WithDSNTLSConfig("false")(cfg)
|
||
|
|
dsn, err := buildDSN(cfg)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("buildDSN returned error: %v", err)
|
||
|
|
}
|
||
|
|
if dsn == "" {
|
||
|
|
t.Fatal("expected non-empty DSN")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestNewWithoutDSNOrDialector(t *testing.T) {
|
||
|
|
_, err := NewDB()
|
||
|
|
if err == nil {
|
||
|
|
t.Fatal("expected error when DSN and Dialector are missing")
|
||
|
|
}
|
||
|
|
}
|