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