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

     1  package gaskv_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/dbadapter"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/gaskv"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types"
    12  
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func bz(s string) []byte { return []byte(s) }
    17  
    18  func keyFmt(i int) []byte { return bz(fmt.Sprintf("key%0.8d", i)) }
    19  func valFmt(i int) []byte { return bz(fmt.Sprintf("value%0.8d", i)) }
    20  
    21  func TestGasKVStoreBasic(t *testing.T) {
    22  	mem := dbadapter.Store{DB: dbm.NewMemDB()}
    23  	meter := types.NewGasMeter(10000)
    24  	st := gaskv.NewStore(mem, meter, types.KVGasConfig())
    25  	require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
    26  	st.Set(keyFmt(1), valFmt(1))
    27  	require.Equal(t, valFmt(1), st.Get(keyFmt(1)))
    28  	st.Delete(keyFmt(1))
    29  	require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
    30  	require.Equal(t, meter.GasConsumed(), types.Gas(6429))
    31  }
    32  
    33  func TestGasKVStoreIterator(t *testing.T) {
    34  	mem := dbadapter.Store{DB: dbm.NewMemDB()}
    35  	meter := types.NewGasMeter(10000)
    36  	st := gaskv.NewStore(mem, meter, types.KVGasConfig())
    37  	require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
    38  	require.Empty(t, st.Get(keyFmt(2)), "Expected `key2` to be empty")
    39  	st.Set(keyFmt(1), valFmt(1))
    40  	st.Set(keyFmt(2), valFmt(2))
    41  	iterator := st.Iterator(nil, nil)
    42  	ka := iterator.Key()
    43  	require.Equal(t, ka, keyFmt(1))
    44  	va := iterator.Value()
    45  	require.Equal(t, va, valFmt(1))
    46  	iterator.Next()
    47  	kb := iterator.Key()
    48  	require.Equal(t, kb, keyFmt(2))
    49  	vb := iterator.Value()
    50  	require.Equal(t, vb, valFmt(2))
    51  	iterator.Next()
    52  	require.False(t, iterator.Valid())
    53  	require.Panics(t, iterator.Next)
    54  	require.Equal(t, meter.GasConsumed(), types.Gas(6987))
    55  }
    56  
    57  func TestGasKVStoreOutOfGasSet(t *testing.T) {
    58  	mem := dbadapter.Store{DB: dbm.NewMemDB()}
    59  	meter := types.NewGasMeter(0)
    60  	st := gaskv.NewStore(mem, meter, types.KVGasConfig())
    61  	require.Panics(t, func() { st.Set(keyFmt(1), valFmt(1)) }, "Expected out-of-gas")
    62  }
    63  
    64  func TestGasKVStoreOutOfGasIterator(t *testing.T) {
    65  	mem := dbadapter.Store{DB: dbm.NewMemDB()}
    66  	meter := types.NewGasMeter(20000)
    67  	st := gaskv.NewStore(mem, meter, types.KVGasConfig())
    68  	st.Set(keyFmt(1), valFmt(1))
    69  	iterator := st.Iterator(nil, nil)
    70  	iterator.Next()
    71  	require.Panics(t, func() { iterator.Value() }, "Expected out-of-gas")
    72  }