testing/iotest

Guided tour · Testing · pkg.go.dev →

Readers and writers that simulate slow, broken, or one-byte-at-a-time I/O. Useful for stress-testing parsers.

Simulated readers

OneByteReader

r := iotest.OneByteReader(strings.NewReader("hello"))
// forces your code through many small reads

HalfReader / DataErrReader / ErrReader

r1 := iotest.HalfReader(src)                // returns half at a time
r2 := iotest.DataErrReader(src)             // returns final data+err together
r3 := iotest.ErrReader(io.ErrUnexpectedEOF) // always errors

TimeoutReader

r := iotest.TimeoutReader(src)
// second read returns ErrTimeout — exercise retry logic

Validate a Reader

TestReader

if err := iotest.TestReader(myReader, wantBytes); err != nil {
    t.Fatal(err)
}