read_test.go 955 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package local
  2. import (
  3. "io"
  4. "os"
  5. "testing"
  6. "github.com/docker/docker/daemon/logger"
  7. "github.com/pkg/errors"
  8. "gotest.tools/v3/assert"
  9. )
  10. func TestDecode(t *testing.T) {
  11. buf := make([]byte, 0)
  12. err := marshal(&logger.Message{Line: []byte("hello")}, &buf)
  13. assert.NilError(t, err)
  14. for i := 0; i < len(buf); i++ {
  15. testDecode(t, buf, i)
  16. }
  17. }
  18. func testDecode(t *testing.T, buf []byte, split int) {
  19. fw, err := os.CreateTemp("", t.Name())
  20. assert.NilError(t, err)
  21. defer os.Remove(fw.Name())
  22. fr, err := os.Open(fw.Name())
  23. assert.NilError(t, err)
  24. d := &decoder{rdr: fr}
  25. if split > 0 {
  26. _, err = fw.Write(buf[0:split])
  27. assert.NilError(t, err)
  28. _, err = d.Decode()
  29. assert.Assert(t, errors.Is(err, io.EOF))
  30. _, err = fw.Write(buf[split:])
  31. assert.NilError(t, err)
  32. } else {
  33. _, err = fw.Write(buf)
  34. assert.NilError(t, err)
  35. }
  36. message, err := d.Decode()
  37. assert.NilError(t, err)
  38. assert.Equal(t, "hello\n", string(message.Line))
  39. }