github.com/cosmos/cosmos-sdk@v0.50.10/x/staking/keeper/keeper_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
     7  	cmttime "github.com/cometbft/cometbft/types/time"
     8  	"github.com/golang/mock/gomock"
     9  	"github.com/stretchr/testify/suite"
    10  
    11  	"cosmossdk.io/math"
    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  	govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
    23  	stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
    24  	stakingtestutil "github.com/cosmos/cosmos-sdk/x/staking/testutil"
    25  	stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
    26  )
    27  
    28  var (
    29  	bondedAcc    = authtypes.NewEmptyModuleAccount(stakingtypes.BondedPoolName)
    30  	notBondedAcc = authtypes.NewEmptyModuleAccount(stakingtypes.NotBondedPoolName)
    31  	PKs          = simtestutil.CreateTestPubKeys(500)
    32  )
    33  
    34  type KeeperTestSuite struct {
    35  	suite.Suite
    36  
    37  	ctx           sdk.Context
    38  	stakingKeeper *stakingkeeper.Keeper
    39  	bankKeeper    *stakingtestutil.MockBankKeeper
    40  	accountKeeper *stakingtestutil.MockAccountKeeper
    41  	queryClient   stakingtypes.QueryClient
    42  	msgServer     stakingtypes.MsgServer
    43  }
    44  
    45  func (s *KeeperTestSuite) SetupTest() {
    46  	require := s.Require()
    47  	key := storetypes.NewKVStoreKey(stakingtypes.StoreKey)
    48  	storeService := runtime.NewKVStoreService(key)
    49  	testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
    50  	ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
    51  	encCfg := moduletestutil.MakeTestEncodingConfig()
    52  
    53  	ctrl := gomock.NewController(s.T())
    54  	accountKeeper := stakingtestutil.NewMockAccountKeeper(ctrl)
    55  	accountKeeper.EXPECT().GetModuleAddress(stakingtypes.BondedPoolName).Return(bondedAcc.GetAddress())
    56  	accountKeeper.EXPECT().GetModuleAddress(stakingtypes.NotBondedPoolName).Return(notBondedAcc.GetAddress())
    57  	accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
    58  
    59  	bankKeeper := stakingtestutil.NewMockBankKeeper(ctrl)
    60  
    61  	keeper := stakingkeeper.NewKeeper(
    62  		encCfg.Codec,
    63  		storeService,
    64  		accountKeeper,
    65  		bankKeeper,
    66  		authtypes.NewModuleAddress(govtypes.ModuleName).String(),
    67  		address.NewBech32Codec("cosmosvaloper"),
    68  		address.NewBech32Codec("cosmosvalcons"),
    69  	)
    70  	require.NoError(keeper.SetParams(ctx, stakingtypes.DefaultParams()))
    71  
    72  	s.ctx = ctx
    73  	s.stakingKeeper = keeper
    74  	s.bankKeeper = bankKeeper
    75  	s.accountKeeper = accountKeeper
    76  
    77  	stakingtypes.RegisterInterfaces(encCfg.InterfaceRegistry)
    78  	queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry)
    79  	stakingtypes.RegisterQueryServer(queryHelper, stakingkeeper.Querier{Keeper: keeper})
    80  	s.queryClient = stakingtypes.NewQueryClient(queryHelper)
    81  	s.msgServer = stakingkeeper.NewMsgServerImpl(keeper)
    82  }
    83  
    84  func (s *KeeperTestSuite) TestParams() {
    85  	ctx, keeper := s.ctx, s.stakingKeeper
    86  	require := s.Require()
    87  
    88  	expParams := stakingtypes.DefaultParams()
    89  	// check that the empty keeper loads the default
    90  	resParams, err := keeper.GetParams(ctx)
    91  	require.NoError(err)
    92  	require.Equal(expParams, resParams)
    93  
    94  	expParams.MaxValidators = 555
    95  	expParams.MaxEntries = 111
    96  	require.NoError(keeper.SetParams(ctx, expParams))
    97  	resParams, err = keeper.GetParams(ctx)
    98  	require.NoError(err)
    99  	require.True(expParams.Equal(resParams))
   100  }
   101  
   102  func (s *KeeperTestSuite) TestLastTotalPower() {
   103  	ctx, keeper := s.ctx, s.stakingKeeper
   104  	require := s.Require()
   105  
   106  	expTotalPower := math.NewInt(10 ^ 9)
   107  	require.NoError(keeper.SetLastTotalPower(ctx, expTotalPower))
   108  	resTotalPower, err := keeper.GetLastTotalPower(ctx)
   109  	require.NoError(err)
   110  	require.True(expTotalPower.Equal(resTotalPower))
   111  }
   112  
   113  func TestKeeperTestSuite(t *testing.T) {
   114  	suite.Run(t, new(KeeperTestSuite))
   115  }