github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/powchain/block_cache_test.go (about) 1 package powchain 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/ethereum/go-ethereum/common" 8 gethTypes "github.com/ethereum/go-ethereum/core/types" 9 "github.com/prysmaticlabs/prysm/beacon-chain/powchain/types" 10 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 11 "github.com/prysmaticlabs/prysm/shared/testutil/require" 12 ) 13 14 func TestHashKeyFn_OK(t *testing.T) { 15 hInfo := &types.HeaderInfo{ 16 Hash: common.HexToHash("0x0123456"), 17 } 18 19 key, err := hashKeyFn(hInfo) 20 require.NoError(t, err) 21 assert.Equal(t, hInfo.Hash.Hex(), key) 22 } 23 24 func TestHashKeyFn_InvalidObj(t *testing.T) { 25 _, err := hashKeyFn("bad") 26 assert.Equal(t, ErrNotAHeaderInfo, err) 27 } 28 29 func TestHeightKeyFn_OK(t *testing.T) { 30 hInfo := &types.HeaderInfo{ 31 Number: big.NewInt(555), 32 } 33 34 key, err := heightKeyFn(hInfo) 35 require.NoError(t, err) 36 assert.Equal(t, hInfo.Number.String(), key) 37 } 38 39 func TestHeightKeyFn_InvalidObj(t *testing.T) { 40 _, err := heightKeyFn("bad") 41 assert.Equal(t, ErrNotAHeaderInfo, err) 42 } 43 44 func TestBlockCache_byHash(t *testing.T) { 45 cache := newHeaderCache() 46 47 header := &gethTypes.Header{ 48 ParentHash: common.HexToHash("0x12345"), 49 Number: big.NewInt(55), 50 } 51 52 exists, _, err := cache.HeaderInfoByHash(header.Hash()) 53 require.NoError(t, err) 54 assert.Equal(t, false, exists, "Expected block info not to exist in empty cache") 55 56 err = cache.AddHeader(header) 57 require.NoError(t, err) 58 59 exists, fetchedInfo, err := cache.HeaderInfoByHash(header.Hash()) 60 require.NoError(t, err) 61 assert.Equal(t, true, exists, "Expected headerInfo to exist") 62 assert.Equal(t, 0, fetchedInfo.Number.Cmp(header.Number), "Expected fetched info number to be equal") 63 assert.Equal(t, header.Hash(), fetchedInfo.Hash, "Expected hash to be equal") 64 65 } 66 67 func TestBlockCache_byHeight(t *testing.T) { 68 cache := newHeaderCache() 69 70 header := &gethTypes.Header{ 71 ParentHash: common.HexToHash("0x12345"), 72 Number: big.NewInt(55), 73 } 74 75 exists, _, err := cache.HeaderInfoByHeight(header.Number) 76 require.NoError(t, err) 77 assert.Equal(t, false, exists, "Expected block info not to exist in empty cache") 78 79 err = cache.AddHeader(header) 80 require.NoError(t, err) 81 82 exists, fetchedInfo, err := cache.HeaderInfoByHeight(header.Number) 83 require.NoError(t, err) 84 assert.Equal(t, true, exists, "Expected headerInfo to exist") 85 86 assert.Equal(t, 0, fetchedInfo.Number.Cmp(header.Number), "Expected fetched info number to be equal") 87 assert.Equal(t, header.Hash(), fetchedInfo.Hash, "Expected hash to be equal") 88 89 } 90 91 func TestBlockCache_maxSize(t *testing.T) { 92 cache := newHeaderCache() 93 94 for i := int64(0); i < int64(maxCacheSize+10); i++ { 95 header := &gethTypes.Header{ 96 Number: big.NewInt(i), 97 } 98 err := cache.AddHeader(header) 99 require.NoError(t, err) 100 101 } 102 103 assert.Equal(t, int(maxCacheSize), len(cache.hashCache.ListKeys())) 104 assert.Equal(t, int(maxCacheSize), len(cache.heightCache.ListKeys())) 105 }