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  }