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 }