github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/encoder/varint_test.go (about)

     1  package encoder
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/gogo/protobuf/proto"
     8  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
     9  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    10  )
    11  
    12  func TestReadVarint(t *testing.T) {
    13  	data := []byte("foobar data")
    14  	prefixedData := append(proto.EncodeVarint(uint64(len(data))), data...)
    15  
    16  	vi, err := readVarint(bytes.NewBuffer(prefixedData))
    17  	require.NoError(t, err)
    18  	assert.Equal(t, uint64(len(data)), vi, "Received wrong varint")
    19  }
    20  
    21  func TestReadVarint_ExceedsMaxLength(t *testing.T) {
    22  	fByte := byte(1 << 7)
    23  	// Terminating byte.
    24  	tByte := byte(1 << 6)
    25  	var header []byte
    26  	for i := 0; i < 9; i++ {
    27  		header = append(header, fByte)
    28  	}
    29  	header = append(header, tByte)
    30  	_, err := readVarint(bytes.NewBuffer(header))
    31  	require.NoError(t, err, "Expected no error from reading valid header")
    32  	length := len(header)
    33  	// Add an additional byte to make header invalid.
    34  	header = append(header[:length-1], []byte{fByte, tByte}...)
    35  
    36  	_, err = readVarint(bytes.NewBuffer(header))
    37  	assert.ErrorContains(t, errExcessMaxLength.Error(), err, "Expected error from reading invalid header")
    38  }