github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/gossip/evmstore/store_receipts_test.go (about) 1 package evmstore 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/unicornultrafoundation/go-helios/native/idx" 8 "github.com/unicornultrafoundation/go-u2u/common" 9 "github.com/unicornultrafoundation/go-u2u/core/types" 10 11 "github.com/unicornultrafoundation/go-u2u/logger" 12 ) 13 14 func equalStorageReceipts(t *testing.T, expect, got []*types.ReceiptForStorage) { 15 assert.EqualValues(t, len(expect), len(got)) 16 for i := range expect { 17 assert.EqualValues(t, expect[i].CumulativeGasUsed, got[i].CumulativeGasUsed) 18 assert.EqualValues(t, expect[i].Logs, got[i].Logs) 19 assert.EqualValues(t, expect[i].Status, got[i].Status) 20 } 21 } 22 23 func TestStoreGetCachedReceipts(t *testing.T) { 24 logger.SetTestMode(t) 25 26 block, expect := fakeReceipts() 27 store := cachedStore() 28 store.SetRawReceipts(block, expect) 29 30 got, _ := store.GetRawReceipts(block) 31 assert.EqualValues(t, expect, got) 32 } 33 34 func TestStoreGetNonCachedReceipts(t *testing.T) { 35 logger.SetTestMode(t) 36 37 block, expect := fakeReceipts() 38 store := nonCachedStore() 39 store.SetRawReceipts(block, expect) 40 41 got, _ := store.GetRawReceipts(block) 42 equalStorageReceipts(t, expect, got) 43 } 44 45 func BenchmarkStoreGetRawReceipts(b *testing.B) { 46 logger.SetTestMode(b) 47 48 b.Run("cache on", func(b *testing.B) { 49 benchStoreGetRawReceipts(b, cachedStore()) 50 }) 51 b.Run("cache off", func(b *testing.B) { 52 benchStoreGetRawReceipts(b, nonCachedStore()) 53 }) 54 } 55 56 func benchStoreGetRawReceipts(b *testing.B, store *Store) { 57 block, receipt := fakeReceipts() 58 59 store.SetRawReceipts(block, receipt) 60 b.ResetTimer() 61 62 for i := 0; i < b.N; i++ { 63 if v, _ := store.GetRawReceipts(block); v == nil { 64 b.Fatal("invalid result") 65 } 66 } 67 } 68 69 func BenchmarkStoreSetRawReceipts(b *testing.B) { 70 logger.SetTestMode(b) 71 72 b.Run("cache on", func(b *testing.B) { 73 benchStoreSetRawReceipts(b, cachedStore()) 74 }) 75 b.Run("cache off", func(b *testing.B) { 76 benchStoreSetRawReceipts(b, nonCachedStore()) 77 }) 78 } 79 80 func benchStoreSetRawReceipts(b *testing.B, store *Store) { 81 block, receipt := fakeReceipts() 82 83 for i := 0; i < b.N; i++ { 84 store.SetRawReceipts(block, receipt) 85 } 86 } 87 88 func fakeReceipts() (idx.Block, []*types.ReceiptForStorage) { 89 return idx.Block(1), 90 []*types.ReceiptForStorage{ 91 { 92 PostState: nil, 93 Status: 0, 94 CumulativeGasUsed: 0, 95 Bloom: types.Bloom{}, 96 Logs: []*types.Log{}, 97 TxHash: common.Hash{}, 98 ContractAddress: common.Address{}, 99 GasUsed: 0, 100 BlockHash: common.Hash{}, 101 BlockNumber: nil, 102 TransactionIndex: 0, 103 }, 104 } 105 }