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 }