log_test.go 2.0 KB

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