gzip_test.go 1002 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package readers
  2. import (
  3. "bytes"
  4. "compress/gzip"
  5. "io"
  6. "testing"
  7. "github.com/rclone/rclone/lib/random"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. )
  11. type checkClose struct {
  12. io.Reader
  13. closed bool
  14. }
  15. func (cc *checkClose) Close() error {
  16. cc.closed = true
  17. return nil
  18. }
  19. func TestGzipReader(t *testing.T) {
  20. // Create some compressed data
  21. data := random.String(1000)
  22. var out bytes.Buffer
  23. zw := gzip.NewWriter(&out)
  24. _, err := io.Copy(zw, bytes.NewBufferString(data))
  25. require.NoError(t, err)
  26. require.NoError(t, zw.Close())
  27. gzData := out.Bytes()
  28. // Check we can decompress it
  29. cc := &checkClose{Reader: bytes.NewBuffer(gzData)}
  30. var decompressed bytes.Buffer
  31. zr, err := NewGzipReader(cc)
  32. require.NoError(t, err)
  33. _, err = io.Copy(&decompressed, zr)
  34. require.NoError(t, err)
  35. assert.Equal(t, data, decompressed.String())
  36. // Check the underlying close gets called
  37. assert.False(t, cc.closed)
  38. require.NoError(t, zr.Close())
  39. assert.True(t, cc.closed)
  40. }