Use iotest.TestReader

This commit is contained in:
Matt Joiner 2021-01-29 23:32:01 +11:00
parent 887db4a276
commit f5915ad12c
6 changed files with 16 additions and 20 deletions

View File

@ -5,6 +5,7 @@ import (
"math/rand" "math/rand"
"strings" "strings"
"github.com/anacrolix/torrent/internal/testutil"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
"github.com/anacrolix/torrent/storage" "github.com/anacrolix/torrent/storage"
) )
@ -48,7 +49,7 @@ func (p badStoragePiece) MarkNotComplete() error {
} }
func (p badStoragePiece) randomlyTruncatedDataString() string { func (p badStoragePiece) randomlyTruncatedDataString() string {
return "hello, world\n"[:rand.Intn(14)] return testutil.GreetingFileContents[:rand.Intn(14)]
} }
func (p badStoragePiece) ReadAt(b []byte, off int64) (n int, err error) { func (p badStoragePiece) ReadAt(b []byte, off int64) (n int, err error) {

View File

@ -9,9 +9,11 @@ import (
"path/filepath" "path/filepath"
"reflect" "reflect"
"testing" "testing"
"testing/iotest"
"time" "time"
"github.com/bradfitz/iter" "github.com/bradfitz/iter"
"github.com/frankban/quicktest"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -202,9 +204,7 @@ func TestCompletedPieceWrongSize(t *testing.T) {
assert.True(t, new) assert.True(t, new)
r := tt.NewReader() r := tt.NewReader()
defer r.Close() defer r.Close()
b, err = ioutil.ReadAll(r) quicktest.Check(t, iotest.TestReader(r, []byte(testutil.GreetingFileContents)), quicktest.IsNil)
assert.Len(t, b, 13)
assert.NoError(t, err)
} }
func BenchmarkAddLargeTorrent(b *testing.B) { func BenchmarkAddLargeTorrent(b *testing.B) {
@ -411,9 +411,7 @@ func testAddTorrentPriorPieceCompletion(t *testing.T, alreadyCompleted bool, csf
assert.Equal(t, alreadyCompleted, psrs[0].Complete) assert.Equal(t, alreadyCompleted, psrs[0].Complete)
if alreadyCompleted { if alreadyCompleted {
r := tt.NewReader() r := tt.NewReader()
b, err := ioutil.ReadAll(r) quicktest.Check(t, iotest.TestReader(r, []byte(testutil.GreetingFileContents)), quicktest.IsNil)
assert.NoError(t, err)
assert.EqualValues(t, testutil.GreetingFileContents, b)
} }
} }

View File

@ -144,7 +144,7 @@ func (r *reader) ReadContext(ctx context.Context, b []byte) (n int, err error) {
defer r.opMu.Unlock() defer r.opMu.Unlock()
n, err = r.readOnceAt(b, r.pos, &ctxErr) n, err = r.readOnceAt(b, r.pos, &ctxErr)
if n == 0 { if n == 0 {
if err == nil { if err == nil && len(b) > 0 {
panic("expected error") panic("expected error")
} else { } else {
return return
@ -185,7 +185,7 @@ func (r *reader) waitAvailable(pos, wanted int64, ctxErr *error, wait bool) (ava
err = errors.New("downloading disabled and data not already available") err = errors.New("downloading disabled and data not already available")
return return
} }
if !wait { if !wait || wanted == 0 {
return return
} }
r.waitReadable(pos) r.waitReadable(pos)

View File

@ -3,10 +3,10 @@ package test
import ( import (
"errors" "errors"
"io" "io"
"io/ioutil"
"os" "os"
"sync" "sync"
"testing" "testing"
"testing/iotest"
"github.com/anacrolix/log" "github.com/anacrolix/log"
pp "github.com/anacrolix/torrent/peer_protocol" pp "github.com/anacrolix/torrent/peer_protocol"
@ -86,12 +86,10 @@ func testReceiveChunkStorageFailure(t *testing.T, seederFast bool) {
// We don't seem to need to seek, but that's probably just because the storage failure is // We don't seem to need to seek, but that's probably just because the storage failure is
// happening on the first read. // happening on the first read.
r.Seek(0, io.SeekStart) r.Seek(0, io.SeekStart)
output, err := ioutil.ReadAll(r) if err := iotest.TestReader(r, []byte(testutil.GreetingFileContents)); err != nil {
if err != nil {
t.Logf("got error while reading: %v", err) t.Logf("got error while reading: %v", err)
return true return true
} }
assert.EqualValues(t, testutil.GreetingFileContents, output)
return false return false
}() { }() {
} }

View File

@ -8,6 +8,7 @@ import (
"path/filepath" "path/filepath"
"sync" "sync"
"testing" "testing"
"testing/iotest"
"time" "time"
"github.com/anacrolix/missinggo/v2/filecache" "github.com/anacrolix/missinggo/v2/filecache"
@ -15,6 +16,7 @@ import (
"github.com/anacrolix/torrent/internal/testutil" "github.com/anacrolix/torrent/internal/testutil"
"github.com/anacrolix/torrent/storage" "github.com/anacrolix/torrent/storage"
sqliteStorage "github.com/anacrolix/torrent/storage/sqlite" sqliteStorage "github.com/anacrolix/torrent/storage/sqlite"
"github.com/frankban/quicktest"
"golang.org/x/time/rate" "golang.org/x/time/rate"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -39,9 +41,7 @@ func assertReadAllGreeting(t *testing.T, r io.ReadSeeker) {
pos, err := r.Seek(0, io.SeekStart) pos, err := r.Seek(0, io.SeekStart)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 0, pos) assert.EqualValues(t, 0, pos)
_greeting, err := ioutil.ReadAll(r) quicktest.Check(t, iotest.TestReader(r, []byte(testutil.GreetingFileContents)), quicktest.IsNil)
assert.NoError(t, err)
assert.EqualValues(t, testutil.GreetingFileContents, string(_greeting))
} }
// Creates a seeder and a leecher, and ensures the data transfers when a read // Creates a seeder and a leecher, and ensures the data transfers when a read
@ -413,9 +413,7 @@ func TestSeedAfterDownloading(t *testing.T) {
defer wg.Done() defer wg.Done()
r := llg.NewReader() r := llg.NewReader()
defer r.Close() defer r.Close()
b, err := ioutil.ReadAll(r) quicktest.Check(t, iotest.TestReader(r, []byte(testutil.GreetingFileContents)), quicktest.IsNil)
require.NoError(t, err)
assert.EqualValues(t, testutil.GreetingFileContents, b)
}() }()
done := make(chan struct{}) done := make(chan struct{})
defer close(done) defer close(done)

View File

@ -2,6 +2,7 @@ package torrent
import ( import (
"fmt" "fmt"
"io"
"net" "net"
"os" "os"
"path/filepath" "path/filepath"
@ -92,7 +93,7 @@ func BenchmarkUpdatePiecePriorities(b *testing.B) {
for range iter.N(7) { for range iter.N(7) {
r := t.NewReader() r := t.NewReader()
r.SetReadahead(32 << 20) r.SetReadahead(32 << 20)
r.Seek(3500000, 0) r.Seek(3500000, io.SeekStart)
} }
assert.Len(b, t.readers, 7) assert.Len(b, t.readers, 7)
for i := 0; i < int(t.numPieces()); i += 3 { for i := 0; i < int(t.numPieces()); i += 3 {