package mysql import ( "context" "errors" "testing" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "go.uber.org/zap/zaptest/observer" "gorm.io/gorm" gormlogger "gorm.io/gorm/logger" ) func TestGormLoggerTrace(t *testing.T) { core, logs := observer.New(zapcore.DebugLevel) z := zap.New(core) gl := newGormLogger(z, time.Millisecond, gormlogger.Info) gl.Trace(context.Background(), time.Now().Add(-10*time.Millisecond), func() (string, int64) { return "SELECT 1", 1 }, nil) if logs.FilterMessage("sql_slow").Len() != 1 { t.Fatalf("want sql_slow, got %+v", logs.All()) } gl.Trace(context.Background(), time.Now(), func() (string, int64) { return "SELECT 2", 1 }, nil) if logs.FilterMessage("sql").Len() < 1 { t.Fatalf("want sql, got %+v", logs.All()) } gl.Trace(context.Background(), time.Now(), func() (string, int64) { return "SELECT 3", 0 }, errors.New("boom")) if logs.FilterMessage("sql").FilterLevelExact(zapcore.ErrorLevel).Len() < 1 { t.Fatalf("want sql error, got %+v", logs.All()) } gl.Trace(context.Background(), time.Now(), func() (string, int64) { return "SELECT 4", 0 }, gorm.ErrRecordNotFound) } func TestParseGormLevel(t *testing.T) { if parseGormLevel("", "debug") != gormlogger.Info { t.Fatal("debug follows zap") } if parseGormLevel("", "info") != gormlogger.Warn { t.Fatal("info default warn") } if parseGormLevel("silent", "debug") != gormlogger.Silent { t.Fatal("silent") } } func TestOpenEmptyDSN(t *testing.T) { db, err := Open(zap.NewNop(), &Options{}) if err != nil || db.Ready() { t.Fatalf("empty dsn %v ready=%v", err, db.Ready()) } }