log_test.go 1.7 KB

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