diff options
author | Felix Lange <fjl@twurst.com> | 2016-10-14 01:45:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-14 01:45:29 +0800 |
commit | 30fb5c3e81f88fe27b48a058e25f04b70deeaada (patch) | |
tree | 6512d6bb48219d5fc6b9a035f6095d3bf1c2dd99 /swarm/storage/common_test.go | |
parent | c780901cd5bd46e0d9316b653e02e4a14ca43b60 (diff) | |
parent | a45421baaf2065203fa133a932967d5ea18fd0f7 (diff) | |
download | dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar.gz dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar.bz2 dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar.lz dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar.xz dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.tar.zst dexon-30fb5c3e81f88fe27b48a058e25f04b70deeaada.zip |
Merge pull request #3108 from homotopycolimit/FixChunkerWithBrokenReader
swarm/storage: fixes for tree chunker in the context of a broken reader
Diffstat (limited to 'swarm/storage/common_test.go')
-rw-r--r-- | swarm/storage/common_test.go | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/swarm/storage/common_test.go b/swarm/storage/common_test.go index e81a82b7b..889b28a70 100644 --- a/swarm/storage/common_test.go +++ b/swarm/storage/common_test.go @@ -19,6 +19,7 @@ package storage import ( "bytes" "crypto/rand" + "fmt" "io" "sync" "testing" @@ -27,32 +28,31 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" ) -type limitedReader struct { - r io.Reader - off int64 - size int64 +type brokenLimitedReader struct { + lr io.Reader + errAt int + off int + size int } -func limitReader(r io.Reader, size int) *limitedReader { - return &limitedReader{r, 0, int64(size)} -} - -func (self *limitedReader) Read(buf []byte) (int, error) { - limit := int64(len(buf)) - left := self.size - self.off - if limit >= left { - limit = left - } - n, err := self.r.Read(buf[:limit]) - if err == nil && limit == left { - err = io.EOF +func brokenLimitReader(data io.Reader, size int, errAt int) *brokenLimitedReader { + return &brokenLimitedReader{ + lr: data, + errAt: errAt, + size: size, } - self.off += int64(n) - return n, err } func testDataReader(l int) (r io.Reader) { - return limitReader(rand.Reader, l) + return io.LimitReader(rand.Reader, int64(l)) +} + +func (self *brokenLimitedReader) Read(buf []byte) (int, error) { + if self.off+len(buf) > self.errAt { + return 0, fmt.Errorf("Broken reader") + } + self.off += len(buf) + return self.lr.Read(buf) } func testDataReaderAndSlice(l int) (r io.Reader, slice []byte) { @@ -60,7 +60,7 @@ func testDataReaderAndSlice(l int) (r io.Reader, slice []byte) { if _, err := rand.Read(slice); err != nil { panic("rand error") } - r = limitReader(bytes.NewReader(slice), l) + r = io.LimitReader(bytes.NewReader(slice), int64(l)) return } |