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  }