peer_protocol/decoder_test.go | 14 +++++++++++--- diff --git a/peer_protocol/decoder_test.go b/peer_protocol/decoder_test.go index acc769babcc4a31b599f491a32e132ef6882ce10..7e538adda5685742857b2b8fd35ed34f0195e8b5 100644 --- a/peer_protocol/decoder_test.go +++ b/peer_protocol/decoder_test.go @@ -12,34 +12,42 @@ ) func BenchmarkDecodePieces(t *testing.B) { r, w := io.Pipe() + const pieceLen = 1 << 14 msg := Message{ Type: Piece, Index: 0, Begin: 1, - Piece: make([]byte, 1<<14), + Piece: make([]byte, pieceLen), } b, err := msg.MarshalBinary() require.NoError(t, err) t.SetBytes(int64(len(b))) + defer r.Close() go func() { + defer w.Close() for { n, err := w.Write(b) - require.Equal(t, len(b), n) + if err == io.ErrClosedPipe { + return + } require.NoError(t, err) + require.Equal(t, len(b), n) } }() d := Decoder{ + // Emulate what package torrent's client would do. R: bufio.NewReader(r), MaxLength: 1 << 18, Pool: &sync.Pool{ New: func() interface{} { - return make([]byte, 1<<14) + return make([]byte, pieceLen) }, }, } for range iter.N(t.N) { var msg Message require.NoError(t, d.Decode(&msg)) + // WWJD d.Pool.Put(msg.Piece) } }