github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+incompatible/git/odb/object_reader_test.go (about)

     1  package odb
     2  
     3  import (
     4  	"bytes"
     5  	"compress/zlib"
     6  	"errors"
     7  	"io"
     8  	"sync/atomic"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestObjectReaderReadsHeaders(t *testing.T) {
    15  	var compressed bytes.Buffer
    16  
    17  	zw := zlib.NewWriter(&compressed)
    18  	zw.Write([]byte("blob 1\x00"))
    19  	zw.Close()
    20  
    21  	or, err := NewObjectReader(&compressed)
    22  	assert.Nil(t, err)
    23  
    24  	typ, size, err := or.Header()
    25  
    26  	assert.Nil(t, err)
    27  	assert.EqualValues(t, 1, size)
    28  	assert.Equal(t, BlobObjectType, typ)
    29  }
    30  
    31  func TestObjectReaderConsumesHeaderBeforeReads(t *testing.T) {
    32  	var compressed bytes.Buffer
    33  
    34  	zw := zlib.NewWriter(&compressed)
    35  	zw.Write([]byte("blob 1\x00asdf"))
    36  	zw.Close()
    37  
    38  	or, err := NewObjectReader(&compressed)
    39  	assert.Nil(t, err)
    40  
    41  	var buf [4]byte
    42  	n, err := or.Read(buf[:])
    43  
    44  	assert.Equal(t, 4, n)
    45  	assert.Equal(t, []byte{'a', 's', 'd', 'f'}, buf[:])
    46  	assert.Nil(t, err)
    47  }
    48  
    49  type ReadCloserFn struct {
    50  	io.Reader
    51  	closeFn func() error
    52  }
    53  
    54  func (r *ReadCloserFn) Close() error {
    55  	return r.closeFn()
    56  }
    57  
    58  func TestObjectReaderCallsClose(t *testing.T) {
    59  	var calls uint32
    60  	expected := errors.New("expected")
    61  
    62  	or, err := NewObjectReadCloser(&ReadCloserFn{
    63  		Reader: bytes.NewBuffer([]byte{0x78, 0x01}),
    64  		closeFn: func() error {
    65  			atomic.AddUint32(&calls, 1)
    66  			return expected
    67  		},
    68  	})
    69  	assert.Nil(t, err)
    70  
    71  	got := or.Close()
    72  
    73  	assert.Equal(t, expected, got)
    74  	assert.EqualValues(t, 1, atomic.LoadUint32(&calls))
    75  
    76  }