log_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package log
  2. import (
  3. "bytes"
  4. "os"
  5. "os/exec"
  6. "sync"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func test(l *Logger, t *testing.T) {
  11. b := new(bytes.Buffer)
  12. l.SetOutput(b)
  13. l.DisableColor()
  14. l.SetLevel(WARN)
  15. l.Print("print")
  16. l.Printf("print%s", "f")
  17. l.Debug("debug")
  18. l.Debugf("debug%s", "f")
  19. l.Info("info")
  20. l.Infof("info%s", "f")
  21. l.Warn("warn")
  22. l.Warnf("warn%s", "f")
  23. l.Error("error")
  24. l.Errorf("error%s", "f")
  25. assert.Contains(t, b.String(), "print\n")
  26. assert.Contains(t, b.String(), "\nprintf\n")
  27. assert.NotContains(t, b.String(), "debug")
  28. assert.NotContains(t, b.String(), "debugf")
  29. assert.NotContains(t, b.String(), "info")
  30. assert.NotContains(t, b.String(), "infof")
  31. assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix+", warn")
  32. assert.Contains(t, b.String(), "level=WARN, prefix="+l.prefix+", warnf")
  33. assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix+", error")
  34. assert.Contains(t, b.String(), "level=ERROR, prefix="+l.prefix+", errorf")
  35. }
  36. func TestLog(t *testing.T) {
  37. l := New("test")
  38. test(l, t)
  39. }
  40. func TestGlobal(t *testing.T) {
  41. test(global, t)
  42. }
  43. func TestLogConcurrent(t *testing.T) {
  44. var wg sync.WaitGroup
  45. for i := 0; i < 2; i++ {
  46. wg.Add(1)
  47. go func() {
  48. TestLog(t)
  49. wg.Done()
  50. }()
  51. }
  52. wg.Wait()
  53. }
  54. func TestFatal(t *testing.T) {
  55. l := New("test")
  56. switch os.Getenv("TEST_LOGGER_FATAL") {
  57. case "fatal":
  58. l.Fatal("fatal")
  59. return
  60. case "fatalf":
  61. l.Fatalf("fatal-%s", "f")
  62. return
  63. }
  64. loggerFatalTest(t, "fatal", "fatal")
  65. loggerFatalTest(t, "fatalf", "fatal-f")
  66. }
  67. func loggerFatalTest(t *testing.T, env string, contains string) {
  68. buf := new(bytes.Buffer)
  69. cmd := exec.Command(os.Args[0], "-test.run=TestFatal")
  70. cmd.Env = append(os.Environ(), "TEST_LOGGER_FATAL="+env)
  71. cmd.Stdout = buf
  72. cmd.Stderr = buf
  73. err := cmd.Run()
  74. if e, ok := err.(*exec.ExitError); ok && !e.Success() {
  75. assert.Contains(t, buf.String(), contains)
  76. return
  77. }
  78. t.Fatalf("process ran with err %v, want exit status 1", err)
  79. }
  80. func TestFormat(t *testing.T) {
  81. l := New("test")
  82. l.SetFormat("${level} | ${message}")
  83. b := new(bytes.Buffer)
  84. l.SetOutput(b)
  85. l.Info("test")
  86. assert.Equal(t, "INFO | test", b.String())
  87. }
  88. func BenchmarkLog(b *testing.B) {
  89. l := New("test")
  90. l.SetOutput(new(bytes.Buffer))
  91. for i := 0; i < b.N; i++ {
  92. l.Infof("Info=%s, Debug=%s", "info", "debug")
  93. }
  94. }