You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

log_test.go 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package log
  4. import (
  5. "fmt"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func baseConsoleTest(t *testing.T, logger *MultiChannelledLogger) (chan []byte, chan bool) {
  10. written := make(chan []byte)
  11. closed := make(chan bool)
  12. c := CallbackWriteCloser{
  13. callback: func(p []byte, close bool) {
  14. written <- p
  15. closed <- close
  16. },
  17. }
  18. m := logger.MultiChannelledLog
  19. channelledLog := m.GetEventLogger("console")
  20. assert.NotEmpty(t, channelledLog)
  21. realChanLog, ok := channelledLog.(*ChannelledLog)
  22. assert.True(t, ok)
  23. realCL, ok := realChanLog.loggerProvider.(*ConsoleLogger)
  24. assert.True(t, ok)
  25. assert.Equal(t, INFO, realCL.Level)
  26. realCL.out = c
  27. format := "test: %s"
  28. args := []interface{}{"A"}
  29. logger.Log(0, INFO, format, args...)
  30. line := <-written
  31. assert.Contains(t, string(line), fmt.Sprintf(format, args...))
  32. assert.False(t, <-closed)
  33. format = "test2: %s"
  34. logger.Warn(format, args...)
  35. line = <-written
  36. assert.Contains(t, string(line), fmt.Sprintf(format, args...))
  37. assert.False(t, <-closed)
  38. format = "testerror: %s"
  39. logger.Error(format, args...)
  40. line = <-written
  41. assert.Contains(t, string(line), fmt.Sprintf(format, args...))
  42. assert.False(t, <-closed)
  43. return written, closed
  44. }
  45. func TestNewLoggerUnexported(t *testing.T) {
  46. level := INFO
  47. logger := newLogger("UNEXPORTED", 0)
  48. err := logger.SetLogger("console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String()))
  49. assert.NoError(t, err)
  50. out := logger.MultiChannelledLog.GetEventLogger("console")
  51. assert.NotEmpty(t, out)
  52. chanlog, ok := out.(*ChannelledLog)
  53. assert.True(t, ok)
  54. assert.Equal(t, "console", chanlog.provider)
  55. assert.Equal(t, INFO, logger.GetLevel())
  56. baseConsoleTest(t, logger)
  57. }
  58. func TestNewLoggger(t *testing.T) {
  59. level := INFO
  60. logger := NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String()))
  61. assert.Equal(t, INFO, GetLevel())
  62. assert.False(t, IsTrace())
  63. assert.False(t, IsDebug())
  64. assert.True(t, IsInfo())
  65. assert.True(t, IsWarn())
  66. assert.True(t, IsError())
  67. written, closed := baseConsoleTest(t, logger)
  68. format := "test: %s"
  69. args := []interface{}{"A"}
  70. Log(0, INFO, format, args...)
  71. line := <-written
  72. assert.Contains(t, string(line), fmt.Sprintf(format, args...))
  73. assert.False(t, <-closed)
  74. Info(format, args...)
  75. line = <-written
  76. assert.Contains(t, string(line), fmt.Sprintf(format, args...))
  77. assert.False(t, <-closed)
  78. go DelLogger("console")
  79. line = <-written
  80. assert.Equal(t, "", string(line))
  81. assert.True(t, <-closed)
  82. }
  83. func TestNewLogggerRecreate(t *testing.T) {
  84. level := INFO
  85. NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String()))
  86. assert.Equal(t, INFO, GetLevel())
  87. assert.False(t, IsTrace())
  88. assert.False(t, IsDebug())
  89. assert.True(t, IsInfo())
  90. assert.True(t, IsWarn())
  91. assert.True(t, IsError())
  92. format := "test: %s"
  93. args := []interface{}{"A"}
  94. Log(0, INFO, format, args...)
  95. NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String()))
  96. assert.Equal(t, INFO, GetLevel())
  97. assert.False(t, IsTrace())
  98. assert.False(t, IsDebug())
  99. assert.True(t, IsInfo())
  100. assert.True(t, IsWarn())
  101. assert.True(t, IsError())
  102. Log(0, INFO, format, args...)
  103. assert.Panics(t, func() {
  104. NewLogger(0, "console", "console", fmt.Sprintf(`{"level":"%s"`, level.String()))
  105. })
  106. go DelLogger("console")
  107. // We should be able to redelete without a problem
  108. go DelLogger("console")
  109. }
  110. func TestNewNamedLogger(t *testing.T) {
  111. level := INFO
  112. err := NewNamedLogger("test", 0, "console", "console", fmt.Sprintf(`{"level":"%s"}`, level.String()))
  113. assert.NoError(t, err)
  114. logger, _ := NamedLoggers.Load("test")
  115. assert.Equal(t, level, logger.GetLevel())
  116. written, closed := baseConsoleTest(t, logger)
  117. go DelNamedLogger("test")
  118. line := <-written
  119. assert.Equal(t, "", string(line))
  120. assert.True(t, <-closed)
  121. }