testutil.go 707 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package testutil
  2. import (
  3. "io"
  4. "github.com/stretchr/testify/require"
  5. )
  6. const bufSize = 4096
  7. // RequireReadersEqual compares two io.Reader contents in a streaming manner.
  8. // It fails the test if contents differ or if reading fails.
  9. func ReadersEqual(t require.TestingT, expected, actual io.Reader) bool {
  10. if h, ok := t.(interface{ Helper() }); ok {
  11. h.Helper()
  12. }
  13. buf1 := make([]byte, bufSize)
  14. buf2 := make([]byte, bufSize)
  15. for {
  16. n1, err1 := expected.Read(buf1)
  17. n2, err2 := actual.Read(buf2)
  18. if n1 != n2 {
  19. return false
  20. }
  21. require.Equal(t, buf1[:n1], buf2[:n1])
  22. if err1 == io.EOF && err2 == io.EOF {
  23. return true
  24. }
  25. require.NoError(t, err1)
  26. require.NoError(t, err2)
  27. }
  28. }