1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2024-12-23 00:07:25 +00:00

backend: Add partial read failure to error backend

This commit is contained in:
Alexander Neumann 2017-10-17 22:11:38 +02:00
parent 8e2ef3f38b
commit ce4d71d626

View file

@ -3,6 +3,7 @@ package backend
import ( import (
"context" "context"
"io" "io"
"io/ioutil"
"math/rand" "math/rand"
"sync" "sync"
@ -13,9 +14,10 @@ import (
// ErrorBackend is used to induce errors into various function calls and test // ErrorBackend is used to induce errors into various function calls and test
// the retry functions. // the retry functions.
type ErrorBackend struct { type ErrorBackend struct {
FailSave float32 FailSave float32
FailLoad float32 FailSaveRead float32
FailStat float32 FailLoad float32
FailStat float32
restic.Backend restic.Backend
r *rand.Rand r *rand.Rand
@ -48,6 +50,15 @@ func (be *ErrorBackend) Save(ctx context.Context, h restic.Handle, rd io.Reader)
return errors.Errorf("Save(%v) random error induced", h) return errors.Errorf("Save(%v) random error induced", h)
} }
if be.fail(be.FailSaveRead) {
_, err := io.CopyN(ioutil.Discard, rd, be.r.Int63n(1000))
if err != nil {
return err
}
return errors.Errorf("Save(%v) random error with partial read induced", h)
}
return be.Backend.Save(ctx, h, rd) return be.Backend.Save(ctx, h, rd)
} }