github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/s3manager/writer_read_from_test.go (about)

     1  package s3manager
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"reflect"
     7  	"testing"
     8  )
     9  
    10  type testBufioWriter struct {
    11  	ReadFromN   int64
    12  	ReadFromErr error
    13  	FlushReturn error
    14  }
    15  
    16  func (t testBufioWriter) Write(p []byte) (n int, err error) {
    17  	panic("unused")
    18  }
    19  
    20  func (t testBufioWriter) ReadFrom(r io.Reader) (n int64, err error) {
    21  	return t.ReadFromN, t.ReadFromErr
    22  }
    23  
    24  func (t testBufioWriter) Flush() error {
    25  	return t.FlushReturn
    26  }
    27  
    28  func (t *testBufioWriter) Reset(io.Writer) {
    29  	panic("unused")
    30  }
    31  
    32  func TestBufferedReadFromFlusher_ReadFrom(t *testing.T) {
    33  	cases := map[string]struct {
    34  		w           testBufioWriter
    35  		expectedErr error
    36  	}{
    37  		"no errors": {},
    38  		"error returned from underlying ReadFrom": {
    39  			w: testBufioWriter{
    40  				ReadFromN:   42,
    41  				ReadFromErr: fmt.Errorf("readfrom"),
    42  			},
    43  			expectedErr: fmt.Errorf("readfrom"),
    44  		},
    45  		"error returned from Flush": {
    46  			w: testBufioWriter{
    47  				ReadFromN:   7,
    48  				FlushReturn: fmt.Errorf("flush"),
    49  			},
    50  			expectedErr: fmt.Errorf("flush"),
    51  		},
    52  		"error returned from ReadFrom and Flush": {
    53  			w: testBufioWriter{
    54  				ReadFromN:   1337,
    55  				ReadFromErr: fmt.Errorf("readfrom"),
    56  				FlushReturn: fmt.Errorf("flush"),
    57  			},
    58  			expectedErr: fmt.Errorf("readfrom"),
    59  		},
    60  	}
    61  
    62  	for name, tCase := range cases {
    63  		t.Log(name)
    64  		readFromFlusher := bufferedReadFrom{bufferedWriter: &tCase.w}
    65  		n, err := readFromFlusher.ReadFrom(nil)
    66  		if e, a := tCase.w.ReadFromN, n; e != a {
    67  			t.Errorf("expected %v bytes, got %v", e, a)
    68  		}
    69  		if e, a := tCase.expectedErr, err; !reflect.DeepEqual(e, a) {
    70  			t.Errorf("expected error %v. got %v", e, a)
    71  		}
    72  	}
    73  }