tee_test.go 925 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package iox
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestLimitTeeReader(t *testing.T) {
  9. limit := int64(4)
  10. src := []byte("hello, world")
  11. dst := make([]byte, len(src))
  12. rb := bytes.NewBuffer(src)
  13. wb := new(bytes.Buffer)
  14. r := LimitTeeReader(rb, wb, limit)
  15. if n, err := io.ReadFull(r, dst); err != nil || n != len(src) {
  16. t.Fatalf("ReadFull(r, dst) = %d, %v; want %d, nil", n, err, len(src))
  17. }
  18. if !bytes.Equal(dst, src) {
  19. t.Errorf("bytes read = %q want %q", dst, src)
  20. }
  21. if !bytes.Equal(wb.Bytes(), src[:limit]) {
  22. t.Errorf("bytes written = %q want %q", wb.Bytes(), src)
  23. }
  24. n, err := r.Read(dst)
  25. assert.Equal(t, 0, n)
  26. assert.Equal(t, io.EOF, err)
  27. rb = bytes.NewBuffer(src)
  28. pr, pw := io.Pipe()
  29. if assert.NoError(t, pr.Close()) {
  30. r = LimitTeeReader(rb, pw, limit)
  31. n, err := io.ReadFull(r, dst)
  32. assert.Equal(t, 0, n)
  33. assert.Equal(t, io.ErrClosedPipe, err)
  34. }
  35. }