package logger import ( "os" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/zap" ) func TestNewLogger(t *testing.T) { logger, err := NewLogger(WithDevelopment(true)) require.NoError(t, err) defer logger.Sync() assert.NotNil(t, logger) // 测试日志输出 logger.Info("测试日志", zap.String("key", "value")) } func TestAuditLogger(t *testing.T) { // 使用内存数据库进行测试 audit, err := NewAuditLogger( WithDatabasePath(":memory:"), WithRetention(90), ) require.NoError(t, err) defer audit.Sync() // 测试记录审计事件 entry := &AuditEntry{ UserID: "test_user", Username: "Test User", Action: "test_action", Resource: "test_resource", Details: "test details", IP: "127.0.0.1", Success: true, } err = audit.Record(entry) assert.NoError(t, err) // 测试查询审计日志 filter := &AuditFilter{ UserID: "test_user", Limit: 10, } entries, err := audit.Query(filter) assert.NoError(t, err) assert.Len(t, entries, 1) retrieved := entries[0] assert.Equal(t, "test_user", retrieved.UserID) assert.Equal(t, "test_action", retrieved.Action) assert.Equal(t, "test_resource", retrieved.Resource) assert.True(t, retrieved.Success) } func TestAuditLoggerDisabled(t *testing.T) { audit, err := NewAuditLogger(WithEnabled(false)) require.NoError(t, err) // 禁用状态下记录应该成功(空操作) entry := &AuditEntry{ UserID: "test_user", Action: "test_action", Success: true, } err = audit.Record(entry) assert.NoError(t, err) // 查询应该返回空结果 filter := &AuditFilter{} entries, err := audit.Query(filter) assert.NoError(t, err) assert.Len(t, entries, 0) } func TestAuditCleanup(t *testing.T) { audit, err := NewAuditLogger(WithDatabasePath(":memory:")) require.NoError(t, err) defer audit.Sync() // 插入一些旧的审计记录 oldTime := time.Now().Add(-48 * time.Hour) entry := &AuditEntry{ UserID: "test_user", Action: "old_action", Timestamp: oldTime, Success: true, } err = audit.Record(entry) assert.NoError(t, err) // 清理24小时前的记录 err = audit.Cleanup(24 * time.Hour) assert.NoError(t, err) // 查询应该返回空结果 filter := &AuditFilter{} entries, err := audit.Query(filter) assert.NoError(t, err) assert.Len(t, entries, 0) } func TestLoggerWith(t *testing.T) { logger, err := NewLogger(WithDevelopment(true)) require.NoError(t, err) defer logger.Sync() // 创建带有额外字段的日志器 userLogger := logger.With( zap.String("user_id", "123"), zap.String("request_id", "req_001"), ) assert.NotNil(t, userLogger) // 测试日志输出 userLogger.Info("用户操作") } func TestLoggerNamed(t *testing.T) { logger, err := NewLogger(WithDevelopment(true)) require.NoError(t, err) defer logger.Sync() // 创建带有名称的日志器 serviceLogger := logger.Named("user_service") assert.NotNil(t, serviceLogger) // 测试日志输出 serviceLogger.Info("服务启动") } func TestMain(m *testing.M) { // 清理测试文件 defer func() { os.Remove("test_audit.db") }() os.Exit(m.Run()) }