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

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