github.com/Finschia/finschia-sdk@v0.49.1/store/cache/cache_test.go (about)

     1  package cache_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/cosmos/iavl"
     8  	"github.com/stretchr/testify/require"
     9  	dbm "github.com/tendermint/tm-db"
    10  
    11  	"github.com/Finschia/finschia-sdk/store/cache"
    12  	iavlstore "github.com/Finschia/finschia-sdk/store/iavl"
    13  	"github.com/Finschia/finschia-sdk/store/types"
    14  )
    15  
    16  func TestGetOrSetStoreCache(t *testing.T) {
    17  	db := dbm.NewMemDB()
    18  	mngr := cache.NewCommitKVStoreCacheManager(cache.DefaultCommitKVStoreCacheSize, cache.NopMetricsProvider())
    19  
    20  	sKey := types.NewKVStoreKey("test")
    21  	tree, err := iavl.NewMutableTree(db, 100, false)
    22  	require.NoError(t, err)
    23  	store := iavlstore.UnsafeNewStore(tree)
    24  	store2 := mngr.GetStoreCache(sKey, store)
    25  
    26  	require.NotNil(t, store2)
    27  	require.Equal(t, store2, mngr.GetStoreCache(sKey, store))
    28  }
    29  
    30  func TestUnwrap(t *testing.T) {
    31  	db := dbm.NewMemDB()
    32  	mngr := cache.NewCommitKVStoreCacheManager(cache.DefaultCommitKVStoreCacheSize, cache.NopMetricsProvider())
    33  
    34  	sKey := types.NewKVStoreKey("test")
    35  	tree, err := iavl.NewMutableTree(db, 100, false)
    36  	require.NoError(t, err)
    37  	store := iavlstore.UnsafeNewStore(tree)
    38  	_ = mngr.GetStoreCache(sKey, store)
    39  
    40  	require.Equal(t, store, mngr.Unwrap(sKey))
    41  	require.Nil(t, mngr.Unwrap(types.NewKVStoreKey("test2")))
    42  }
    43  
    44  func TestStoreCache(t *testing.T) {
    45  	db := dbm.NewMemDB()
    46  	mngr := cache.NewCommitKVStoreCacheManager(cache.DefaultCommitKVStoreCacheSize, cache.NopMetricsProvider())
    47  
    48  	sKey := types.NewKVStoreKey("test")
    49  	tree, err := iavl.NewMutableTree(db, 100, false)
    50  	require.NoError(t, err)
    51  	store := iavlstore.UnsafeNewStore(tree)
    52  	kvStore := mngr.GetStoreCache(sKey, store)
    53  
    54  	for i := uint(0); i < 10000; i++ {
    55  		key := []byte(fmt.Sprintf("key_%d", i))
    56  		value := []byte(fmt.Sprintf("value_%d", i))
    57  
    58  		kvStore.Set(key, value)
    59  
    60  		res := kvStore.Get(key)
    61  		require.Equal(t, res, value)
    62  		require.Equal(t, res, store.Get(key))
    63  
    64  		kvStore.Delete(key)
    65  
    66  		require.Nil(t, kvStore.Get(key))
    67  		require.Nil(t, store.Get(key))
    68  	}
    69  }