@@ -3,21 +3,23 @@ package store
3
3
import (
4
4
"testing"
5
5
6
+ dbm "github.com/tendermint/tendermint/libs/db"
7
+
6
8
sdk "github.com/cosmos/cosmos-sdk/types"
9
+
7
10
"github.com/stretchr/testify/require"
8
- dbm "github.com/tendermint/tendermint/libs/db"
9
11
)
10
12
11
13
func newGasKVStore () KVStore {
12
14
meter := sdk .NewGasMeter (1000 )
13
15
mem := dbStoreAdapter {dbm .NewMemDB ()}
14
- return NewGasKVStore (meter , mem )
16
+ return NewGasKVStore (meter , sdk . DefaultGasConfig (), mem )
15
17
}
16
18
17
19
func TestGasKVStoreBasic (t * testing.T ) {
18
20
mem := dbStoreAdapter {dbm .NewMemDB ()}
19
21
meter := sdk .NewGasMeter (1000 )
20
- st := NewGasKVStore (meter , mem )
22
+ st := NewGasKVStore (meter , sdk . DefaultGasConfig (), mem )
21
23
require .Empty (t , st .Get (keyFmt (1 )), "Expected `key1` to be empty" )
22
24
st .Set (keyFmt (1 ), valFmt (1 ))
23
25
require .Equal (t , valFmt (1 ), st .Get (keyFmt (1 )))
@@ -29,7 +31,7 @@ func TestGasKVStoreBasic(t *testing.T) {
29
31
func TestGasKVStoreIterator (t * testing.T ) {
30
32
mem := dbStoreAdapter {dbm .NewMemDB ()}
31
33
meter := sdk .NewGasMeter (1000 )
32
- st := NewGasKVStore (meter , mem )
34
+ st := NewGasKVStore (meter , sdk . DefaultGasConfig (), mem )
33
35
require .Empty (t , st .Get (keyFmt (1 )), "Expected `key1` to be empty" )
34
36
require .Empty (t , st .Get (keyFmt (2 )), "Expected `key2` to be empty" )
35
37
st .Set (keyFmt (1 ), valFmt (1 ))
@@ -53,16 +55,51 @@ func TestGasKVStoreIterator(t *testing.T) {
53
55
func TestGasKVStoreOutOfGasSet (t * testing.T ) {
54
56
mem := dbStoreAdapter {dbm .NewMemDB ()}
55
57
meter := sdk .NewGasMeter (0 )
56
- st := NewGasKVStore (meter , mem )
58
+ st := NewGasKVStore (meter , sdk . DefaultGasConfig (), mem )
57
59
require .Panics (t , func () { st .Set (keyFmt (1 ), valFmt (1 )) }, "Expected out-of-gas" )
58
60
}
59
61
60
62
func TestGasKVStoreOutOfGasIterator (t * testing.T ) {
61
63
mem := dbStoreAdapter {dbm .NewMemDB ()}
62
64
meter := sdk .NewGasMeter (200 )
63
- st := NewGasKVStore (meter , mem )
65
+ st := NewGasKVStore (meter , sdk . DefaultGasConfig (), mem )
64
66
st .Set (keyFmt (1 ), valFmt (1 ))
65
67
iterator := st .Iterator (nil , nil )
66
68
iterator .Next ()
67
69
require .Panics (t , func () { iterator .Value () }, "Expected out-of-gas" )
68
70
}
71
+
72
+ func testGasKVStoreWrap (t * testing.T , store KVStore ) {
73
+ meter := sdk .NewGasMeter (10000 )
74
+
75
+ store = store .Gas (meter , sdk.GasConfig {HasCost : 10 })
76
+ require .Equal (t , int64 (0 ), meter .GasConsumed ())
77
+
78
+ store .Has ([]byte ("key" ))
79
+ require .Equal (t , int64 (10 ), meter .GasConsumed ())
80
+
81
+ store = store .Gas (meter , sdk.GasConfig {HasCost : 20 })
82
+
83
+ store .Has ([]byte ("key" ))
84
+ require .Equal (t , int64 (40 ), meter .GasConsumed ())
85
+ }
86
+
87
+ func TestGasKVStoreWrap (t * testing.T ) {
88
+ db := dbm .NewMemDB ()
89
+ tree , _ := newTree (t , db )
90
+ iavl := newIAVLStore (tree , numRecent , storeEvery )
91
+ testGasKVStoreWrap (t , iavl )
92
+
93
+ st := NewCacheKVStore (iavl )
94
+ testGasKVStoreWrap (t , st )
95
+
96
+ pref := st .Prefix ([]byte ("prefix" ))
97
+ testGasKVStoreWrap (t , pref )
98
+
99
+ dsa := dbStoreAdapter {dbm .NewMemDB ()}
100
+ testGasKVStoreWrap (t , dsa )
101
+
102
+ ts := newTransientStore ()
103
+ testGasKVStoreWrap (t , ts )
104
+
105
+ }
0 commit comments