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  }