github.com/cosmos/cosmos-sdk@v0.50.10/x/authz/module/abci_test.go (about) 1 package authz_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/cometbft/cometbft/proto/tendermint/types" 8 "github.com/golang/mock/gomock" 9 "github.com/stretchr/testify/require" 10 11 "cosmossdk.io/log" 12 storetypes "cosmossdk.io/store/types" 13 14 "github.com/cosmos/cosmos-sdk/baseapp" 15 "github.com/cosmos/cosmos-sdk/codec/address" 16 "github.com/cosmos/cosmos-sdk/runtime" 17 "github.com/cosmos/cosmos-sdk/testutil" 18 simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" 19 sdk "github.com/cosmos/cosmos-sdk/types" 20 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 21 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" 22 "github.com/cosmos/cosmos-sdk/x/authz" 23 "github.com/cosmos/cosmos-sdk/x/authz/keeper" 24 authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" 25 authztestutil "github.com/cosmos/cosmos-sdk/x/authz/testutil" 26 banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" 27 ) 28 29 func TestExpiredGrantsQueue(t *testing.T) { 30 key := storetypes.NewKVStoreKey(keeper.StoreKey) 31 storeService := runtime.NewKVStoreService(key) 32 testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test")) 33 encCfg := moduletestutil.MakeTestEncodingConfig(authzmodule.AppModuleBasic{}) 34 ctx := testCtx.Ctx.WithBlockHeader(types.Header{}) 35 36 baseApp := baseapp.NewBaseApp( 37 "authz", 38 log.NewNopLogger(), 39 testCtx.DB, 40 encCfg.TxConfig.TxDecoder(), 41 ) 42 baseApp.SetCMS(testCtx.CMS) 43 baseApp.SetInterfaceRegistry(encCfg.InterfaceRegistry) 44 45 banktypes.RegisterInterfaces(encCfg.InterfaceRegistry) 46 47 addrs := simtestutil.CreateIncrementalAccounts(5) 48 granter := addrs[0] 49 grantee1 := addrs[1] 50 grantee2 := addrs[2] 51 grantee3 := addrs[3] 52 grantee4 := addrs[4] 53 expiration := ctx.BlockTime().AddDate(0, 1, 0) 54 expiration2 := expiration.AddDate(1, 0, 0) 55 smallCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 10)) 56 sendAuthz := banktypes.NewSendAuthorization(smallCoins, nil) 57 58 ctrl := gomock.NewController(t) 59 accountKeeper := authztestutil.NewMockAccountKeeper(ctrl) 60 accountKeeper.EXPECT().GetAccount(gomock.Any(), granter).Return(authtypes.NewBaseAccountWithAddress(granter)).AnyTimes() 61 accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee1).Return(authtypes.NewBaseAccountWithAddress(grantee1)).AnyTimes() 62 accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee2).Return(authtypes.NewBaseAccountWithAddress(grantee2)).AnyTimes() 63 accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee3).Return(authtypes.NewBaseAccountWithAddress(grantee3)).AnyTimes() 64 accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee4).Return(authtypes.NewBaseAccountWithAddress(grantee4)).AnyTimes() 65 66 accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 67 68 authzKeeper := keeper.NewKeeper(storeService, encCfg.Codec, baseApp.MsgServiceRouter(), accountKeeper) 69 70 save := func(grantee sdk.AccAddress, exp *time.Time) { 71 err := authzKeeper.SaveGrant(ctx, grantee, granter, sendAuthz, exp) 72 require.NoError(t, err, "Grant from %s", grantee.String()) 73 } 74 save(grantee1, &expiration) 75 save(grantee2, &expiration) 76 save(grantee3, &expiration2) 77 save(grantee4, nil) 78 79 queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) 80 authz.RegisterQueryServer(queryHelper, authzKeeper) 81 queryClient := authz.NewQueryClient(queryHelper) 82 83 checkGrants := func(ctx sdk.Context, expectedNum int) { 84 authzmodule.BeginBlocker(ctx, authzKeeper) 85 86 res, err := queryClient.GranterGrants(ctx.Context(), &authz.QueryGranterGrantsRequest{ 87 Granter: granter.String(), 88 }) 89 require.NoError(t, err) 90 require.NotNil(t, res) 91 require.Equal(t, expectedNum, len(res.Grants)) 92 } 93 94 checkGrants(ctx, 4) 95 96 // expiration is exclusive! 97 ctx = ctx.WithBlockTime(expiration) 98 checkGrants(ctx, 4) 99 100 ctx = ctx.WithBlockTime(expiration.AddDate(0, 0, 1)) 101 checkGrants(ctx, 2) 102 103 ctx = ctx.WithBlockTime(expiration2.AddDate(0, 0, 1)) 104 checkGrants(ctx, 1) 105 }