| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 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())
- }
|