Files

44 lines
1.0 KiB
Go

package database
import (
"strings"
"testing"
"go.uber.org/zap"
"go.uber.org/zap/zaptest/observer"
"gorm.io/gorm"
)
func TestGormLoggerDoesNotLogQueryParameters(t *testing.T) {
core, observed := observer.New(zap.DebugLevel)
logger := zap.New(core)
// 复用 MySQL 测试库,只替换 logger 以观察日志脱敏行为。
db := NewTestDB().Session(&gorm.Session{Logger: newGormLogger("debug", logger)})
type secretRecord struct {
ID uint64
Phone string
}
if err := AutoMigrateIfMissing(db, &secretRecord{}); err != nil {
t.Fatal(err)
}
const secretPhone = "13812345678"
if err := db.Create(&secretRecord{Phone: secretPhone}).Error; err != nil {
t.Fatal(err)
}
for _, entry := range observed.All() {
for _, value := range entry.ContextMap() {
if strings.Contains(valueString(value), secretPhone) {
t.Fatalf("query parameter leaked into log: %v", entry.ContextMap())
}
}
}
}
func valueString(value any) string {
if text, ok := value.(string); ok {
return text
}
return ""
}