read_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package jsonfilelog // import "github.com/docker/docker/daemon/logger/jsonfilelog"
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. "time"
  7. "github.com/docker/docker/daemon/logger"
  8. "gotest.tools/assert"
  9. "gotest.tools/fs"
  10. )
  11. func BenchmarkJSONFileLoggerReadLogs(b *testing.B) {
  12. tmp := fs.NewDir(b, "bench-jsonfilelog")
  13. defer tmp.Remove()
  14. jsonlogger, err := New(logger.Info{
  15. ContainerID: "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657",
  16. LogPath: tmp.Join("container.log"),
  17. Config: map[string]string{
  18. "labels": "first,second",
  19. },
  20. ContainerLabels: map[string]string{
  21. "first": "label_value",
  22. "second": "label_foo",
  23. },
  24. })
  25. assert.NilError(b, err)
  26. defer jsonlogger.Close()
  27. msg := &logger.Message{
  28. Line: []byte("Line that thinks that it is log line from docker\n"),
  29. Source: "stderr",
  30. Timestamp: time.Now().UTC(),
  31. }
  32. buf := bytes.NewBuffer(nil)
  33. assert.NilError(b, marshalMessage(msg, nil, buf))
  34. b.SetBytes(int64(buf.Len()))
  35. b.ResetTimer()
  36. chError := make(chan error, b.N+1)
  37. go func() {
  38. for i := 0; i < b.N; i++ {
  39. chError <- jsonlogger.Log(msg)
  40. }
  41. chError <- jsonlogger.Close()
  42. }()
  43. lw := jsonlogger.(*JSONFileLogger).ReadLogs(logger.ReadConfig{Follow: true})
  44. watchClose := lw.WatchClose()
  45. for {
  46. select {
  47. case <-lw.Msg:
  48. case <-watchClose:
  49. return
  50. case err := <-chError:
  51. if err != nil {
  52. b.Fatal(err)
  53. }
  54. }
  55. }
  56. }
  57. func TestEncodeDecode(t *testing.T) {
  58. t.Parallel()
  59. m1 := &logger.Message{Line: []byte("hello 1"), Timestamp: time.Now(), Source: "stdout"}
  60. m2 := &logger.Message{Line: []byte("hello 2"), Timestamp: time.Now(), Source: "stdout"}
  61. m3 := &logger.Message{Line: []byte("hello 3"), Timestamp: time.Now(), Source: "stdout"}
  62. buf := bytes.NewBuffer(nil)
  63. assert.Assert(t, marshalMessage(m1, nil, buf))
  64. assert.Assert(t, marshalMessage(m2, nil, buf))
  65. assert.Assert(t, marshalMessage(m3, nil, buf))
  66. decode := decodeFunc(buf)
  67. msg, err := decode()
  68. assert.Assert(t, err)
  69. assert.Assert(t, string(msg.Line) == "hello 1\n", string(msg.Line))
  70. msg, err = decode()
  71. assert.Assert(t, err)
  72. assert.Assert(t, string(msg.Line) == "hello 2\n")
  73. msg, err = decode()
  74. assert.Assert(t, err)
  75. assert.Assert(t, string(msg.Line) == "hello 3\n")
  76. _, err = decode()
  77. assert.Assert(t, err == io.EOF)
  78. }