本站源代码
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

278 líneas
6.5KB

  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package log
  5. import (
  6. "fmt"
  7. "strings"
  8. "testing"
  9. "time"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. type CallbackWriteCloser struct {
  13. callback func([]byte, bool)
  14. }
  15. func (c CallbackWriteCloser) Write(p []byte) (int, error) {
  16. c.callback(p, false)
  17. return len(p), nil
  18. }
  19. func (c CallbackWriteCloser) Close() error {
  20. c.callback(nil, true)
  21. return nil
  22. }
  23. func TestBaseLogger(t *testing.T) {
  24. var written []byte
  25. var closed bool
  26. c := CallbackWriteCloser{
  27. callback: func(p []byte, close bool) {
  28. written = p
  29. closed = close
  30. },
  31. }
  32. prefix := "TestPrefix "
  33. b := WriterLogger{
  34. out: c,
  35. Level: INFO,
  36. Flags: LstdFlags | LUTC,
  37. Prefix: prefix,
  38. }
  39. location, _ := time.LoadLocation("EST")
  40. date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location)
  41. dateString := date.UTC().Format("2006/01/02 15:04:05")
  42. event := Event{
  43. level: INFO,
  44. msg: "TEST MSG",
  45. caller: "CALLER",
  46. filename: "FULL/FILENAME",
  47. line: 1,
  48. time: date,
  49. }
  50. assert.Equal(t, INFO, b.GetLevel())
  51. expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg)
  52. b.LogEvent(&event)
  53. assert.Equal(t, expected, string(written))
  54. assert.Equal(t, false, closed)
  55. written = written[:0]
  56. event.level = DEBUG
  57. expected = ""
  58. b.LogEvent(&event)
  59. assert.Equal(t, expected, string(written))
  60. assert.Equal(t, false, closed)
  61. event.level = TRACE
  62. expected = ""
  63. b.LogEvent(&event)
  64. assert.Equal(t, expected, string(written))
  65. assert.Equal(t, false, closed)
  66. event.level = WARN
  67. expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg)
  68. b.LogEvent(&event)
  69. assert.Equal(t, expected, string(written))
  70. assert.Equal(t, false, closed)
  71. written = written[:0]
  72. event.level = ERROR
  73. expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg)
  74. b.LogEvent(&event)
  75. assert.Equal(t, expected, string(written))
  76. assert.Equal(t, false, closed)
  77. written = written[:0]
  78. event.level = CRITICAL
  79. expected = fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.filename, event.line, event.caller, strings.ToUpper(event.level.String())[0], event.msg)
  80. b.LogEvent(&event)
  81. assert.Equal(t, expected, string(written))
  82. assert.Equal(t, false, closed)
  83. written = written[:0]
  84. b.Close()
  85. assert.Equal(t, true, closed)
  86. }
  87. func TestBaseLoggerDated(t *testing.T) {
  88. var written []byte
  89. var closed bool
  90. c := CallbackWriteCloser{
  91. callback: func(p []byte, close bool) {
  92. written = p
  93. closed = close
  94. },
  95. }
  96. prefix := ""
  97. b := WriterLogger{
  98. out: c,
  99. Level: WARN,
  100. Flags: Ldate | Ltime | Lmicroseconds | Lshortfile | Llevel,
  101. Prefix: prefix,
  102. }
  103. location, _ := time.LoadLocation("EST")
  104. date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location)
  105. dateString := date.Format("2006/01/02 15:04:05.000000")
  106. event := Event{
  107. level: WARN,
  108. msg: "TEST MESSAGE TEST\n",
  109. caller: "CALLER",
  110. filename: "FULL/FILENAME",
  111. line: 1,
  112. time: date,
  113. }
  114. assert.Equal(t, WARN, b.GetLevel())
  115. expected := fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg)
  116. b.LogEvent(&event)
  117. assert.Equal(t, expected, string(written))
  118. assert.Equal(t, false, closed)
  119. written = written[:0]
  120. event.level = INFO
  121. expected = ""
  122. b.LogEvent(&event)
  123. assert.Equal(t, expected, string(written))
  124. assert.Equal(t, false, closed)
  125. written = written[:0]
  126. event.level = ERROR
  127. expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg)
  128. b.LogEvent(&event)
  129. assert.Equal(t, expected, string(written))
  130. assert.Equal(t, false, closed)
  131. written = written[:0]
  132. event.level = DEBUG
  133. expected = ""
  134. b.LogEvent(&event)
  135. assert.Equal(t, expected, string(written))
  136. assert.Equal(t, false, closed)
  137. written = written[:0]
  138. event.level = CRITICAL
  139. expected = fmt.Sprintf("%s%s %s:%d [%s] %s", prefix, dateString, "FILENAME", event.line, strings.ToUpper(event.level.String()), event.msg)
  140. b.LogEvent(&event)
  141. assert.Equal(t, expected, string(written))
  142. assert.Equal(t, false, closed)
  143. written = written[:0]
  144. event.level = TRACE
  145. expected = ""
  146. b.LogEvent(&event)
  147. assert.Equal(t, expected, string(written))
  148. assert.Equal(t, false, closed)
  149. written = written[:0]
  150. b.Close()
  151. assert.Equal(t, true, closed)
  152. }
  153. func TestBaseLoggerMultiLineNoFlagsRegexp(t *testing.T) {
  154. var written []byte
  155. var closed bool
  156. c := CallbackWriteCloser{
  157. callback: func(p []byte, close bool) {
  158. written = p
  159. closed = close
  160. },
  161. }
  162. prefix := ""
  163. b := WriterLogger{
  164. Level: DEBUG,
  165. StacktraceLevel: ERROR,
  166. Flags: -1,
  167. Prefix: prefix,
  168. Expression: "FILENAME",
  169. }
  170. b.NewWriterLogger(c)
  171. location, _ := time.LoadLocation("EST")
  172. date := time.Date(2019, time.January, 13, 22, 3, 30, 115, location)
  173. event := Event{
  174. level: DEBUG,
  175. msg: "TEST\nMESSAGE\nTEST",
  176. caller: "CALLER",
  177. filename: "FULL/FILENAME",
  178. line: 1,
  179. time: date,
  180. }
  181. assert.Equal(t, DEBUG, b.GetLevel())
  182. expected := "TEST\n\tMESSAGE\n\tTEST\n"
  183. b.LogEvent(&event)
  184. assert.Equal(t, expected, string(written))
  185. assert.Equal(t, false, closed)
  186. written = written[:0]
  187. event.filename = "ELSEWHERE"
  188. b.LogEvent(&event)
  189. assert.Equal(t, "", string(written))
  190. assert.Equal(t, false, closed)
  191. written = written[:0]
  192. event.caller = "FILENAME"
  193. b.LogEvent(&event)
  194. assert.Equal(t, expected, string(written))
  195. assert.Equal(t, false, closed)
  196. written = written[:0]
  197. event = Event{
  198. level: DEBUG,
  199. msg: "TEST\nFILENAME\nTEST",
  200. caller: "CALLER",
  201. filename: "FULL/ELSEWHERE",
  202. line: 1,
  203. time: date,
  204. }
  205. expected = "TEST\n\tFILENAME\n\tTEST\n"
  206. b.LogEvent(&event)
  207. assert.Equal(t, expected, string(written))
  208. assert.Equal(t, false, closed)
  209. written = written[:0]
  210. }
  211. func TestBrokenRegexp(t *testing.T) {
  212. var closed bool
  213. c := CallbackWriteCloser{
  214. callback: func(p []byte, close bool) {
  215. closed = close
  216. },
  217. }
  218. b := WriterLogger{
  219. Level: DEBUG,
  220. StacktraceLevel: ERROR,
  221. Flags: -1,
  222. Prefix: prefix,
  223. Expression: "\\",
  224. }
  225. b.NewWriterLogger(c)
  226. assert.Empty(t, b.regexp)
  227. b.Close()
  228. assert.Equal(t, true, closed)
  229. }
上海开阖软件有限公司 沪ICP备12045867号-1