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
|
package testutils
import (
"errors"
"fmt"
"io"
)
var ErrWriteLimitReached = errors.New("reached write limit")
type failWriter struct {
writeLimit int
writeCount int
}
// Close is just a dummy function to implement io.Closer.
func (fw *failWriter) Close() error {
return nil
}
// Write returns an error if the write limit has been reached.
func (fw *failWriter) Write(data []byte) (int, error) {
fw.writeCount++
if fw.writeCount > fw.writeLimit {
return 0, fmt.Errorf("%w: %d", ErrWriteLimitReached, fw.writeLimit)
}
return len(data), nil
}
// CreateFailWriter returns a io.WriteCloser that returns an error after the amount of writes indicated by writeLimit.
func CreateFailWriter(writeLimit int) io.WriteCloser {
return &failWriter{
writeLimit: writeLimit,
}
}
|