github.com/MetalBlockchain/subnet-evm@v0.4.9/eth/gasprice/fee_info_provider_test.go (about) 1 // (c) 2022, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package gasprice 5 6 import ( 7 "context" 8 "math/big" 9 "sync" 10 "testing" 11 12 "github.com/MetalBlockchain/subnet-evm/core" 13 "github.com/MetalBlockchain/subnet-evm/core/types" 14 "github.com/MetalBlockchain/subnet-evm/params" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestFeeInfoProvider(t *testing.T) { 19 backend := newTestBackend(t, params.TestChainConfig, 2, testGenBlock(t, 55, 370)) 20 f, err := newFeeInfoProvider(backend, 1, 2) 21 require.NoError(t, err) 22 23 // check that accepted event was subscribed 24 require.NotNil(t, backend.acceptedEvent) 25 26 // check fee infos were cached 27 require.Equal(t, 2, f.cache.Len()) 28 29 // some block that extends the current chain 30 var wg sync.WaitGroup 31 wg.Add(1) 32 f.newHeaderAdded = func() { wg.Done() } 33 header := &types.Header{Number: big.NewInt(3), ParentHash: backend.LastAcceptedBlock().Hash()} 34 block := types.NewBlockWithHeader(header) 35 backend.acceptedEvent <- core.ChainEvent{Block: block} 36 37 // wait for the event to process before validating the new header was added. 38 wg.Wait() 39 feeInfo, ok := f.get(3) 40 require.True(t, ok) 41 require.NotNil(t, feeInfo) 42 } 43 44 func TestFeeInfoProviderCacheSize(t *testing.T) { 45 size := 5 46 overflow := 3 47 backend := newTestBackend(t, params.TestChainConfig, 0, testGenBlock(t, 55, 370)) 48 f, err := newFeeInfoProvider(backend, 1, size) 49 require.NoError(t, err) 50 51 // add [overflow] more elements than what will fit in the cache 52 // to test eviction behavior. 53 for i := 0; i < size+feeCacheExtraSlots+overflow; i++ { 54 header := &types.Header{Number: big.NewInt(int64(i))} 55 _, err := f.addHeader(context.Background(), header) 56 require.NoError(t, err) 57 } 58 59 // these numbers should be evicted 60 for i := 0; i < overflow; i++ { 61 feeInfo, ok := f.get(uint64(i)) 62 require.False(t, ok) 63 require.Nil(t, feeInfo) 64 } 65 66 // these numbers should be present 67 for i := overflow; i < size+feeCacheExtraSlots+overflow; i++ { 68 feeInfo, ok := f.get(uint64(i)) 69 require.True(t, ok) 70 require.NotNil(t, feeInfo) 71 } 72 }