github.com/cosmos/cosmos-sdk@v0.50.10/x/authz/keeper/genesis_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 "time" 6 7 cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" 8 "github.com/golang/mock/gomock" 9 "github.com/stretchr/testify/suite" 10 11 "cosmossdk.io/log" 12 sdkmath "cosmossdk.io/math" 13 storetypes "cosmossdk.io/store/types" 14 15 "github.com/cosmos/cosmos-sdk/baseapp" 16 "github.com/cosmos/cosmos-sdk/codec/address" 17 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" 18 "github.com/cosmos/cosmos-sdk/runtime" 19 "github.com/cosmos/cosmos-sdk/testutil" 20 sdk "github.com/cosmos/cosmos-sdk/types" 21 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 22 "github.com/cosmos/cosmos-sdk/x/authz/keeper" 23 authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" 24 authztestutil "github.com/cosmos/cosmos-sdk/x/authz/testutil" 25 bank "github.com/cosmos/cosmos-sdk/x/bank/types" 26 ) 27 28 var ( 29 granteePub = secp256k1.GenPrivKey().PubKey() 30 granterPub = secp256k1.GenPrivKey().PubKey() 31 granteeAddr = sdk.AccAddress(granteePub.Address()) 32 granterAddr = sdk.AccAddress(granterPub.Address()) 33 ) 34 35 type GenesisTestSuite struct { 36 suite.Suite 37 38 ctx sdk.Context 39 keeper keeper.Keeper 40 baseApp *baseapp.BaseApp 41 accountKeeper *authztestutil.MockAccountKeeper 42 encCfg moduletestutil.TestEncodingConfig 43 } 44 45 func (suite *GenesisTestSuite) SetupTest() { 46 key := storetypes.NewKVStoreKey(keeper.StoreKey) 47 storeService := runtime.NewKVStoreService(key) 48 testCtx := testutil.DefaultContextWithDB(suite.T(), key, storetypes.NewTransientStoreKey("transient_test")) 49 suite.ctx = testCtx.Ctx.WithBlockHeader(cmtproto.Header{Height: 1}) 50 suite.encCfg = moduletestutil.MakeTestEncodingConfig(authzmodule.AppModuleBasic{}) 51 52 // gomock initializations 53 ctrl := gomock.NewController(suite.T()) 54 suite.accountKeeper = authztestutil.NewMockAccountKeeper(ctrl) 55 suite.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 56 57 suite.baseApp = baseapp.NewBaseApp( 58 "authz", 59 log.NewNopLogger(), 60 testCtx.DB, 61 suite.encCfg.TxConfig.TxDecoder(), 62 ) 63 suite.baseApp.SetCMS(testCtx.CMS) 64 65 bank.RegisterInterfaces(suite.encCfg.InterfaceRegistry) 66 67 msr := suite.baseApp.MsgServiceRouter() 68 msr.SetInterfaceRegistry(suite.encCfg.InterfaceRegistry) 69 70 suite.keeper = keeper.NewKeeper(storeService, suite.encCfg.Codec, msr, suite.accountKeeper) 71 } 72 73 func (suite *GenesisTestSuite) TestImportExportGenesis() { 74 coins := sdk.NewCoins(sdk.NewCoin("foo", sdkmath.NewInt(1_000))) 75 76 now := suite.ctx.BlockTime() 77 expires := now.Add(time.Hour) 78 grant := &bank.SendAuthorization{SpendLimit: coins} 79 err := suite.keeper.SaveGrant(suite.ctx, granteeAddr, granterAddr, grant, &expires) 80 suite.Require().NoError(err) 81 genesis := suite.keeper.ExportGenesis(suite.ctx) 82 83 // TODO, recheck! 84 // Clear keeper 85 suite.keeper.DeleteGrant(suite.ctx, granteeAddr, granterAddr, grant.MsgTypeURL()) 86 newGenesis := suite.keeper.ExportGenesis(suite.ctx) 87 suite.Require().NotEqual(genesis, newGenesis) 88 suite.Require().Empty(newGenesis) 89 90 suite.keeper.InitGenesis(suite.ctx, genesis) 91 newGenesis = suite.keeper.ExportGenesis(suite.ctx) 92 suite.Require().Equal(genesis, newGenesis) 93 } 94 95 func TestGenesisTestSuite(t *testing.T) { 96 suite.Run(t, new(GenesisTestSuite)) 97 }