9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
13 func BenchmarkDecodePieces(t *testing.B) {
15 const pieceLen = 1 << 14
20 Piece: make([]byte, pieceLen),
22 b, err := msg.MarshalBinary()
23 require.NoError(t, err)
24 t.SetBytes(int64(len(b)))
30 if err == io.ErrClosedPipe {
33 require.NoError(t, err)
34 require.Equal(t, len(b), n)
38 // Emulate what package torrent's client would do.
39 R: bufio.NewReader(r),
42 New: func() interface{} {
43 b := make([]byte, pieceLen)
48 for i := 0; i < t.N; i += 1 {
50 require.NoError(t, d.Decode(&msg))
52 d.Pool.Put(&msg.Piece)
56 func TestDecodeShortPieceEOF(t *testing.T) {
59 w.Write(Message{Type: Piece, Piece: make([]byte, 1)}.MustMarshalBinary())
63 R: bufio.NewReader(r),
65 Pool: &sync.Pool{New: func() interface{} {
71 require.NoError(t, d.Decode(&m))
72 assert.Len(t, m.Piece, 1)
73 assert.Equal(t, io.EOF, d.Decode(&m))
76 func TestDecodeOverlongPiece(t *testing.T) {
79 w.Write(Message{Type: Piece, Piece: make([]byte, 3)}.MustMarshalBinary())
83 R: bufio.NewReader(r),
85 Pool: &sync.Pool{New: func() interface{} {
91 require.Error(t, d.Decode(&m))