jsonfilelog_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package jsonfilelog
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "time"
  8. "github.com/docker/docker/daemon/logger"
  9. "github.com/docker/docker/pkg/jsonlog"
  10. )
  11. func TestJSONFileLogger(t *testing.T) {
  12. tmp, err := ioutil.TempDir("", "docker-logger-")
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. defer os.RemoveAll(tmp)
  17. filename := filepath.Join(tmp, "container.log")
  18. l, err := New(filename)
  19. if err != nil {
  20. t.Fatal(err)
  21. }
  22. defer l.Close()
  23. cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657"
  24. if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line1"), Source: "src1"}); err != nil {
  25. t.Fatal(err)
  26. }
  27. if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line2"), Source: "src2"}); err != nil {
  28. t.Fatal(err)
  29. }
  30. if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line3"), Source: "src3"}); err != nil {
  31. t.Fatal(err)
  32. }
  33. res, err := ioutil.ReadFile(filename)
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. expected := `{"log":"line1\n","stream":"src1","time":"0001-01-01T00:00:00Z"}
  38. {"log":"line2\n","stream":"src2","time":"0001-01-01T00:00:00Z"}
  39. {"log":"line3\n","stream":"src3","time":"0001-01-01T00:00:00Z"}
  40. `
  41. if string(res) != expected {
  42. t.Fatalf("Wrong log content: %q, expected %q", res, expected)
  43. }
  44. }
  45. func BenchmarkJSONFileLogger(b *testing.B) {
  46. tmp, err := ioutil.TempDir("", "docker-logger-")
  47. if err != nil {
  48. b.Fatal(err)
  49. }
  50. defer os.RemoveAll(tmp)
  51. filename := filepath.Join(tmp, "container.log")
  52. l, err := New(filename)
  53. if err != nil {
  54. b.Fatal(err)
  55. }
  56. defer l.Close()
  57. cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657"
  58. testLine := "Line that thinks that it is log line from docker\n"
  59. msg := &logger.Message{ContainerID: cid, Line: []byte(testLine), Source: "stderr", Timestamp: time.Now().UTC()}
  60. jsonlog, err := (&jsonlog.JSONLog{Log: string(msg.Line) + "\n", Stream: msg.Source, Created: msg.Timestamp}).MarshalJSON()
  61. if err != nil {
  62. b.Fatal(err)
  63. }
  64. b.SetBytes(int64(len(jsonlog)+1) * 30)
  65. b.ResetTimer()
  66. for i := 0; i < b.N; i++ {
  67. for j := 0; j < 30; j++ {
  68. if err := l.Log(msg); err != nil {
  69. b.Fatal(err)
  70. }
  71. }
  72. }
  73. }