logger_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package logger
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. "go.uber.org/zap"
  9. )
  10. func TestNewLogger(t *testing.T) {
  11. logger, err := NewLogger(WithDevelopment(true))
  12. require.NoError(t, err)
  13. defer logger.Sync()
  14. assert.NotNil(t, logger)
  15. // 测试日志输出
  16. logger.Info("测试日志", zap.String("key", "value"))
  17. }
  18. func TestAuditLogger(t *testing.T) {
  19. // 使用内存数据库进行测试
  20. audit, err := NewAuditLogger(
  21. WithDatabasePath(":memory:"),
  22. WithRetention(90),
  23. )
  24. require.NoError(t, err)
  25. defer audit.Sync()
  26. // 测试记录审计事件
  27. entry := &AuditEntry{
  28. UserID: "test_user",
  29. Username: "Test User",
  30. Action: "test_action",
  31. Resource: "test_resource",
  32. Details: "test details",
  33. IP: "127.0.0.1",
  34. Success: true,
  35. }
  36. err = audit.Record(entry)
  37. assert.NoError(t, err)
  38. // 测试查询审计日志
  39. filter := &AuditFilter{
  40. UserID: "test_user",
  41. Limit: 10,
  42. }
  43. entries, err := audit.Query(filter)
  44. assert.NoError(t, err)
  45. assert.Len(t, entries, 1)
  46. retrieved := entries[0]
  47. assert.Equal(t, "test_user", retrieved.UserID)
  48. assert.Equal(t, "test_action", retrieved.Action)
  49. assert.Equal(t, "test_resource", retrieved.Resource)
  50. assert.True(t, retrieved.Success)
  51. }
  52. func TestAuditLoggerDisabled(t *testing.T) {
  53. audit, err := NewAuditLogger(WithEnabled(false))
  54. require.NoError(t, err)
  55. // 禁用状态下记录应该成功(空操作)
  56. entry := &AuditEntry{
  57. UserID: "test_user",
  58. Action: "test_action",
  59. Success: true,
  60. }
  61. err = audit.Record(entry)
  62. assert.NoError(t, err)
  63. // 查询应该返回空结果
  64. filter := &AuditFilter{}
  65. entries, err := audit.Query(filter)
  66. assert.NoError(t, err)
  67. assert.Len(t, entries, 0)
  68. }
  69. func TestAuditCleanup(t *testing.T) {
  70. audit, err := NewAuditLogger(WithDatabasePath(":memory:"))
  71. require.NoError(t, err)
  72. defer audit.Sync()
  73. // 插入一些旧的审计记录
  74. oldTime := time.Now().Add(-48 * time.Hour)
  75. entry := &AuditEntry{
  76. UserID: "test_user",
  77. Action: "old_action",
  78. Timestamp: oldTime,
  79. Success: true,
  80. }
  81. err = audit.Record(entry)
  82. assert.NoError(t, err)
  83. // 清理24小时前的记录
  84. err = audit.Cleanup(24 * time.Hour)
  85. assert.NoError(t, err)
  86. // 查询应该返回空结果
  87. filter := &AuditFilter{}
  88. entries, err := audit.Query(filter)
  89. assert.NoError(t, err)
  90. assert.Len(t, entries, 0)
  91. }
  92. func TestLoggerWith(t *testing.T) {
  93. logger, err := NewLogger(WithDevelopment(true))
  94. require.NoError(t, err)
  95. defer logger.Sync()
  96. // 创建带有额外字段的日志器
  97. userLogger := logger.With(
  98. zap.String("user_id", "123"),
  99. zap.String("request_id", "req_001"),
  100. )
  101. assert.NotNil(t, userLogger)
  102. // 测试日志输出
  103. userLogger.Info("用户操作")
  104. }
  105. func TestLoggerNamed(t *testing.T) {
  106. logger, err := NewLogger(WithDevelopment(true))
  107. require.NoError(t, err)
  108. defer logger.Sync()
  109. // 创建带有名称的日志器
  110. serviceLogger := logger.Named("user_service")
  111. assert.NotNil(t, serviceLogger)
  112. // 测试日志输出
  113. serviceLogger.Info("服务启动")
  114. }
  115. func TestMain(m *testing.M) {
  116. // 清理测试文件
  117. defer func() {
  118. os.Remove("test_audit.db")
  119. }()
  120. os.Exit(m.Run())
  121. }