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 }