github.com/cosmos/cosmos-sdk@v0.50.10/testutil/context.go (about)

     1  package testutil
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
     8  	dbm "github.com/cosmos/cosmos-db"
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	"cosmossdk.io/log"
    12  	"cosmossdk.io/store"
    13  	"cosmossdk.io/store/metrics"
    14  	storetypes "cosmossdk.io/store/types"
    15  
    16  	sdk "github.com/cosmos/cosmos-sdk/types"
    17  )
    18  
    19  // DefaultContext creates a sdk.Context with a fresh MemDB that can be used in tests.
    20  func DefaultContext(key, tkey storetypes.StoreKey) sdk.Context {
    21  	db := dbm.NewMemDB()
    22  	cms := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics())
    23  	cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db)
    24  	cms.MountStoreWithDB(tkey, storetypes.StoreTypeTransient, db)
    25  	err := cms.LoadLatestVersion()
    26  	if err != nil {
    27  		panic(err)
    28  	}
    29  	ctx := sdk.NewContext(cms, cmtproto.Header{}, false, log.NewNopLogger())
    30  
    31  	return ctx
    32  }
    33  
    34  // DefaultContextWithKeys creates a sdk.Context with a fresh MemDB, mounting the providing keys for usage in the multistore.
    35  // This function is intended to be used for testing purposes only.
    36  func DefaultContextWithKeys(
    37  	keys map[string]*storetypes.KVStoreKey,
    38  	transKeys map[string]*storetypes.TransientStoreKey,
    39  	memKeys map[string]*storetypes.MemoryStoreKey,
    40  ) sdk.Context {
    41  	db := dbm.NewMemDB()
    42  	cms := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics())
    43  
    44  	for _, key := range keys {
    45  		cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db)
    46  	}
    47  
    48  	for _, tKey := range transKeys {
    49  		cms.MountStoreWithDB(tKey, storetypes.StoreTypeTransient, db)
    50  	}
    51  
    52  	for _, memkey := range memKeys {
    53  		cms.MountStoreWithDB(memkey, storetypes.StoreTypeMemory, db)
    54  	}
    55  
    56  	err := cms.LoadLatestVersion()
    57  	if err != nil {
    58  		panic(err)
    59  	}
    60  
    61  	return sdk.NewContext(cms, cmtproto.Header{}, false, log.NewNopLogger())
    62  }
    63  
    64  type TestContext struct {
    65  	Ctx sdk.Context
    66  	DB  *dbm.MemDB
    67  	CMS store.CommitMultiStore
    68  }
    69  
    70  func DefaultContextWithDB(t testing.TB, key, tkey storetypes.StoreKey) TestContext {
    71  	db := dbm.NewMemDB()
    72  	cms := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics())
    73  	cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db)
    74  	cms.MountStoreWithDB(tkey, storetypes.StoreTypeTransient, db)
    75  	err := cms.LoadLatestVersion()
    76  	assert.NoError(t, err)
    77  
    78  	ctx := sdk.NewContext(cms, cmtproto.Header{Time: time.Now()}, false, log.NewNopLogger())
    79  
    80  	return TestContext{ctx, db, cms}
    81  }