github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/store/mpt/store_iterator_test.go (about)

     1  package mpt
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/ethereum/go-ethereum/core/rawdb"
     8  	ethstate "github.com/ethereum/go-ethereum/core/state"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  var cases = []struct {
    13  	num int
    14  }{
    15  	{0},
    16  	{1},
    17  	{2},
    18  	{100},
    19  	{1000},
    20  	{10000},
    21  }
    22  
    23  func Test_Store_Iterate(t *testing.T) {
    24  	for i, c := range cases {
    25  		t.Run(fmt.Sprintf("test-%d", i), func(t *testing.T) {
    26  			trie, kvs := fullFillStore(c.num)
    27  			iter := newMptIterator(trie, nil, nil)
    28  			defer iter.Close()
    29  			count := 0
    30  			iKvs := make(map[string]string, c.num)
    31  			for ; iter.Valid(); iter.Next() {
    32  				require.NotNil(t, iter.Key())
    33  				iKvs[string(iter.Key())] = string(iter.Value())
    34  				count++
    35  			}
    36  			require.EqualValues(t, kvs, iKvs)
    37  			require.Equal(t, c.num, len(iKvs))
    38  			require.Equal(t, c.num, count)
    39  		})
    40  	}
    41  }
    42  
    43  func fullFillStore(num int) (ethstate.Trie, map[string]string) {
    44  	db := ethstate.NewDatabase(rawdb.NewMemoryDatabase())
    45  	tr, err := db.OpenTrie(NilHash)
    46  	if err != nil {
    47  		panic("Fail to open root mpt: " + err.Error())
    48  	}
    49  
    50  	kvs := make(map[string]string, num)
    51  	for i := 0; i < num; i++ {
    52  		k, v := fmt.Sprintf("key-%d", i), fmt.Sprintf("value-%d", i)
    53  		kvs[k] = v
    54  		if err := tr.TryUpdate([]byte(k), []byte(v)); err != nil {
    55  			panic(err)
    56  		}
    57  	}
    58  	return tr, kvs
    59  }