github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/sdk/auth/test_common.go (about) 1 package auth 2 3 import ( 4 abci "github.com/gnolang/gno/tm2/pkg/bft/abci/types" 5 bft "github.com/gnolang/gno/tm2/pkg/bft/types" 6 "github.com/gnolang/gno/tm2/pkg/crypto" 7 "github.com/gnolang/gno/tm2/pkg/db/memdb" 8 "github.com/gnolang/gno/tm2/pkg/log" 9 10 "github.com/gnolang/gno/tm2/pkg/sdk" 11 "github.com/gnolang/gno/tm2/pkg/std" 12 "github.com/gnolang/gno/tm2/pkg/store" 13 "github.com/gnolang/gno/tm2/pkg/store/iavl" 14 ) 15 16 type testEnv struct { 17 ctx sdk.Context 18 acck AccountKeeper 19 bank BankKeeperI 20 } 21 22 func setupTestEnv() testEnv { 23 db := memdb.NewMemDB() 24 25 authCapKey := store.NewStoreKey("authCapKey") 26 27 ms := store.NewCommitMultiStore(db) 28 ms.MountStoreWithDB(authCapKey, iavl.StoreConstructor, db) 29 ms.LoadLatestVersion() 30 31 acck := NewAccountKeeper(authCapKey, std.ProtoBaseAccount) 32 bank := NewDummyBankKeeper(acck) 33 34 ctx := sdk.NewContext(sdk.RunTxModeDeliver, ms, &bft.Header{Height: 1, ChainID: "test-chain-id"}, log.NewNoopLogger()) 35 ctx = ctx.WithValue(AuthParamsContextKey{}, DefaultParams()) 36 ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ 37 Block: &abci.BlockParams{ 38 MaxTxBytes: 1024, 39 MaxDataBytes: 1024 * 100, 40 MaxBlockBytes: 1024 * 100, 41 MaxGas: 10 * 1000 * 1000, 42 TimeIotaMS: 10, 43 }, 44 Validator: &abci.ValidatorParams{ 45 PubKeyTypeURLs: []string{}, // XXX 46 }, 47 }) 48 49 return testEnv{ctx: ctx, acck: acck, bank: bank} 50 } 51 52 // DummyBankKeeper defines a supply keeper used only for testing to avoid 53 // circle dependencies 54 type DummyBankKeeper struct { 55 acck AccountKeeper 56 } 57 58 // NewDummyBankKeeper creates a DummyBankKeeper instance 59 func NewDummyBankKeeper(acck AccountKeeper) DummyBankKeeper { 60 return DummyBankKeeper{acck} 61 } 62 63 // SendCoins for the dummy supply keeper 64 func (bank DummyBankKeeper) SendCoins(ctx sdk.Context, fromAddr crypto.Address, toAddr crypto.Address, amt std.Coins) error { 65 fromAcc := bank.acck.GetAccount(ctx, fromAddr) 66 toAcc := bank.acck.GetAccount(ctx, toAddr) 67 if toAcc == nil { 68 toAcc = bank.acck.NewAccountWithAddress(ctx, toAddr) 69 } 70 71 newFromCoins := fromAcc.GetCoins().SubUnsafe(amt) 72 if !newFromCoins.IsValid() { 73 return std.ErrInsufficientCoins(fromAcc.GetCoins().String()) 74 } 75 newToCoins := toAcc.GetCoins().Add(amt) 76 if err := fromAcc.SetCoins(newFromCoins); err != nil { 77 return std.ErrInternal(err.Error()) 78 } 79 bank.acck.SetAccount(ctx, fromAcc) 80 if err := toAcc.SetCoins(newToCoins); err != nil { 81 return std.ErrInternal(err.Error()) 82 } 83 bank.acck.SetAccount(ctx, toAcc) 84 85 return nil 86 }