github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/cache/proposer_indices_test.go (about)

     1  package cache
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  
     7  	types "github.com/prysmaticlabs/eth2-types"
     8  	"github.com/prysmaticlabs/prysm/shared/bytesutil"
     9  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    10  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    11  )
    12  
    13  func TestProposerKeyFn_OK(t *testing.T) {
    14  	item := &ProposerIndices{
    15  		BlockRoot:       [32]byte{'A'},
    16  		ProposerIndices: []types.ValidatorIndex{1, 2, 3, 4, 5},
    17  	}
    18  
    19  	k, err := proposerIndicesKeyFn(item)
    20  	require.NoError(t, err)
    21  	assert.Equal(t, key(item.BlockRoot), k)
    22  }
    23  
    24  func TestProposerKeyFn_InvalidObj(t *testing.T) {
    25  	_, err := proposerIndicesKeyFn("bad")
    26  	assert.Equal(t, ErrNotProposerIndices, err)
    27  }
    28  
    29  func TestProposerCache_AddProposerIndicesList(t *testing.T) {
    30  	cache := NewProposerIndicesCache()
    31  	bRoot := [32]byte{'A'}
    32  	indices, err := cache.ProposerIndices(bRoot)
    33  	require.NoError(t, err)
    34  	if indices != nil {
    35  		t.Error("Expected committee count not to exist in empty cache")
    36  	}
    37  	has, err := cache.HasProposerIndices(bRoot)
    38  	require.NoError(t, err)
    39  	assert.Equal(t, false, has)
    40  	require.NoError(t, cache.AddProposerIndices(&ProposerIndices{
    41  		ProposerIndices: indices,
    42  		BlockRoot:       bRoot,
    43  	}))
    44  
    45  	received, err := cache.ProposerIndices(bRoot)
    46  	require.NoError(t, err)
    47  	assert.DeepEqual(t, received, indices)
    48  	has, err = cache.HasProposerIndices(bRoot)
    49  	require.NoError(t, err)
    50  	assert.Equal(t, true, has)
    51  
    52  	item := &ProposerIndices{BlockRoot: [32]byte{'B'}, ProposerIndices: []types.ValidatorIndex{1, 2, 3, 4, 5, 6}}
    53  	require.NoError(t, cache.AddProposerIndices(item))
    54  
    55  	received, err = cache.ProposerIndices(item.BlockRoot)
    56  	require.NoError(t, err)
    57  	assert.DeepEqual(t, item.ProposerIndices, received)
    58  	has, err = cache.HasProposerIndices(bRoot)
    59  	require.NoError(t, err)
    60  	assert.Equal(t, true, has)
    61  
    62  }
    63  
    64  func TestProposerCache_CanRotate(t *testing.T) {
    65  	cache := NewProposerIndicesCache()
    66  	for i := 0; i < int(maxProposerIndicesCacheSize)+1; i++ {
    67  		s := []byte(strconv.Itoa(i))
    68  		item := &ProposerIndices{BlockRoot: bytesutil.ToBytes32(s)}
    69  		require.NoError(t, cache.AddProposerIndices(item))
    70  	}
    71  
    72  	k := cache.ProposerIndicesCache.ListKeys()
    73  	assert.Equal(t, maxProposerIndicesCacheSize, uint64(len(k)))
    74  }