9 "github.com/bradfitz/iter"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
14 func BenchmarkDecodePieces(t *testing.B) {
16 const pieceLen = 1 << 14
21 Piece: make([]byte, pieceLen),
23 b, err := msg.MarshalBinary()
24 require.NoError(t, err)
25 t.SetBytes(int64(len(b)))
31 if err == io.ErrClosedPipe {
34 require.NoError(t, err)
35 require.Equal(t, len(b), n)
39 // Emulate what package torrent's client would do.
40 R: bufio.NewReader(r),
43 New: func() interface{} {
44 b := make([]byte, pieceLen)
49 for range iter.N(t.N) {
51 require.NoError(t, d.Decode(&msg))
53 d.Pool.Put(&msg.Piece)
57 func TestDecodeShortPieceEOF(t *testing.T) {
60 w.Write(Message{Type: Piece, Piece: make([]byte, 1)}.MustMarshalBinary())
64 R: bufio.NewReader(r),
66 Pool: &sync.Pool{New: func() interface{} {
72 require.NoError(t, d.Decode(&m))
73 assert.Len(t, m.Piece, 1)
74 assert.Equal(t, io.EOF, d.Decode(&m))
77 func TestDecodeOverlongPiece(t *testing.T) {
80 w.Write(Message{Type: Piece, Piece: make([]byte, 3)}.MustMarshalBinary())
84 R: bufio.NewReader(r),
86 Pool: &sync.Pool{New: func() interface{} {
92 require.EqualError(t, d.Decode(&m), "piece data longer than expected")