github.com/cosmos/cosmos-sdk@v0.50.10/x/group/internal/orm/testsupport.go (about) 1 package orm 2 3 import ( 4 "fmt" 5 6 dbm "github.com/cosmos/cosmos-db" 7 8 "cosmossdk.io/log" 9 "cosmossdk.io/store" 10 "cosmossdk.io/store/gaskv" 11 "cosmossdk.io/store/metrics" 12 storetypes "cosmossdk.io/store/types" 13 ) 14 15 type MockContext struct { 16 db *dbm.MemDB 17 store storetypes.CommitMultiStore 18 } 19 20 func NewMockContext() *MockContext { 21 db := dbm.NewMemDB() 22 return &MockContext{ 23 db: dbm.NewMemDB(), 24 store: store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()), 25 } 26 } 27 28 func (m MockContext) KVStore(key storetypes.StoreKey) storetypes.KVStore { 29 if s := m.store.GetCommitKVStore(key); s != nil { 30 return s 31 } 32 m.store.MountStoreWithDB(key, storetypes.StoreTypeIAVL, m.db) 33 if err := m.store.LoadLatestVersion(); err != nil { 34 panic(err) 35 } 36 return m.store.GetCommitKVStore(key) 37 } 38 39 type debuggingGasMeter struct { 40 g storetypes.GasMeter 41 } 42 43 func (d debuggingGasMeter) GasConsumed() storetypes.Gas { 44 return d.g.GasConsumed() 45 } 46 47 func (d debuggingGasMeter) GasRemaining() storetypes.Gas { 48 return d.g.GasRemaining() 49 } 50 51 func (d debuggingGasMeter) GasConsumedToLimit() storetypes.Gas { 52 return d.g.GasConsumedToLimit() 53 } 54 55 func (d debuggingGasMeter) RefundGas(amount uint64, descriptor string) { 56 d.g.RefundGas(amount, descriptor) 57 } 58 59 func (d debuggingGasMeter) Limit() storetypes.Gas { 60 return d.g.Limit() 61 } 62 63 func (d debuggingGasMeter) ConsumeGas(amount storetypes.Gas, descriptor string) { 64 fmt.Printf("++ Consuming gas: %q :%d\n", descriptor, amount) 65 d.g.ConsumeGas(amount, descriptor) 66 } 67 68 func (d debuggingGasMeter) IsPastLimit() bool { 69 return d.g.IsPastLimit() 70 } 71 72 func (d debuggingGasMeter) IsOutOfGas() bool { 73 return d.g.IsOutOfGas() 74 } 75 76 func (d debuggingGasMeter) String() string { 77 return d.g.String() 78 } 79 80 type GasCountingMockContext struct { 81 GasMeter storetypes.GasMeter 82 } 83 84 func NewGasCountingMockContext() *GasCountingMockContext { 85 return &GasCountingMockContext{ 86 GasMeter: &debuggingGasMeter{storetypes.NewInfiniteGasMeter()}, 87 } 88 } 89 90 func (g GasCountingMockContext) KVStore(store storetypes.KVStore) storetypes.KVStore { 91 return gaskv.NewStore(store, g.GasMeter, storetypes.KVGasConfig()) 92 } 93 94 func (g GasCountingMockContext) GasConsumed() storetypes.Gas { 95 return g.GasMeter.GasConsumed() 96 } 97 98 func (g GasCountingMockContext) GasRemaining() storetypes.Gas { 99 return g.GasMeter.GasRemaining() 100 } 101 102 func (g *GasCountingMockContext) ResetGasMeter() { 103 g.GasMeter = storetypes.NewInfiniteGasMeter() 104 }