Skip to content

Commit 50b271e

Browse files
committed
testing/iotest: add FailReader
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
1 parent 30da79d commit 50b271e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/testing/iotest/reader.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ func (r *dataErrReader) Read(p []byte) (n int, err error) {
6868
return
6969
}
7070

71+
// ErrTimeout is a fake timeout error
7172
var ErrTimeout = errors.New("timeout")
7273

7374
// TimeoutReader returns ErrTimeout on the second read
@@ -86,3 +87,17 @@ func (r *timeoutReader) Read(p []byte) (int, error) {
8687
}
8788
return r.r.Read(p)
8889
}
90+
91+
// ErrIO is a fake IO error
92+
var ErrIO = errors.New("fake io error")
93+
94+
// FailReader returns a fake error every time it is read from.
95+
func FailReader() io.Reader {
96+
return &failReader{}
97+
}
98+
99+
type failReader struct{}
100+
101+
func (r *failReader) Read(p []byte) (int, error) {
102+
return 0, ErrIO
103+
}

src/testing/iotest/reader_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package iotest
2+
3+
import (
4+
"testing"
5+
"testing/iotest"
6+
)
7+
8+
func TestFailReader(t *testing.T) {
9+
read, err := iotest.FailReader().Read([]byte{})
10+
if err != iotest.ErrIO {
11+
t.Errorf("FailReader.Read(any) should have returned ErrIO, returned %v", err)
12+
}
13+
if read != 0 {
14+
t.Errorf("FailReader.Read(any) should have read 0 bytes, read %v", read)
15+
}
16+
}

0 commit comments

Comments
 (0)