github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/distribution/keeper/querier_test.go (about) 1 package keeper 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 12 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/distribution/types" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 16 ) 17 18 const custom = "custom" 19 20 func getQueriedParams(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier) types.Params { 21 var params types.Params 22 23 bz, err := querier(ctx, []string{types.QueryParams}, abci.RequestQuery{}) 24 require.Nil(t, err) 25 require.Nil(t, cdc.UnmarshalJSON(bz, ¶ms)) 26 27 return params 28 } 29 30 func getQueriedValidatorOutstandingRewards(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, validatorAddr sdk.ValAddress) (outstandingRewards sdk.DecCoins) { 31 query := abci.RequestQuery{ 32 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryValidatorOutstandingRewards}, "/"), 33 Data: cdc.MustMarshalJSON(types.NewQueryValidatorOutstandingRewardsParams(validatorAddr)), 34 } 35 36 bz, err := querier(ctx, []string{types.QueryValidatorOutstandingRewards}, query) 37 require.Nil(t, err) 38 require.Nil(t, cdc.UnmarshalJSON(bz, &outstandingRewards)) 39 40 return 41 } 42 43 func getQueriedValidatorCommission(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, validatorAddr sdk.ValAddress) (validatorCommission sdk.DecCoins) { 44 query := abci.RequestQuery{ 45 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryValidatorCommission}, "/"), 46 Data: cdc.MustMarshalJSON(types.NewQueryValidatorCommissionParams(validatorAddr)), 47 } 48 49 bz, err := querier(ctx, []string{types.QueryValidatorCommission}, query) 50 require.Nil(t, err) 51 require.Nil(t, cdc.UnmarshalJSON(bz, &validatorCommission)) 52 53 return 54 } 55 56 func getQueriedValidatorSlashes(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, validatorAddr sdk.ValAddress, startHeight uint64, endHeight uint64) (slashes []types.ValidatorSlashEvent) { 57 query := abci.RequestQuery{ 58 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryValidatorSlashes}, "/"), 59 Data: cdc.MustMarshalJSON(types.NewQueryValidatorSlashesParams(validatorAddr, startHeight, endHeight)), 60 } 61 62 bz, err := querier(ctx, []string{types.QueryValidatorSlashes}, query) 63 require.Nil(t, err) 64 require.Nil(t, cdc.UnmarshalJSON(bz, &slashes)) 65 66 return 67 } 68 69 func getQueriedDelegationRewards(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress) (rewards sdk.DecCoins) { 70 query := abci.RequestQuery{ 71 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryDelegationRewards}, "/"), 72 Data: cdc.MustMarshalJSON(types.NewQueryDelegationRewardsParams(delegatorAddr, validatorAddr)), 73 } 74 75 bz, err := querier(ctx, []string{types.QueryDelegationRewards}, query) 76 require.Nil(t, err) 77 require.Nil(t, cdc.UnmarshalJSON(bz, &rewards)) 78 79 return 80 } 81 82 func getQueriedDelegatorTotalRewards(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, delegatorAddr sdk.AccAddress) (response types.QueryDelegatorTotalRewardsResponse) { 83 query := abci.RequestQuery{ 84 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryDelegatorTotalRewards}, "/"), 85 Data: cdc.MustMarshalJSON(types.NewQueryDelegatorParams(delegatorAddr)), 86 } 87 88 bz, err := querier(ctx, []string{types.QueryDelegatorTotalRewards}, query) 89 require.Nil(t, err) 90 require.Nil(t, cdc.UnmarshalJSON(bz, &response)) 91 92 return 93 } 94 95 func getQueriedCommunityPool(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier) (ptr []byte) { 96 query := abci.RequestQuery{ 97 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryCommunityPool}, ""), 98 Data: []byte{}, 99 } 100 101 cp, err := querier(ctx, []string{types.QueryCommunityPool}, query) 102 require.Nil(t, err) 103 require.Nil(t, cdc.UnmarshalJSON(cp, &ptr)) 104 105 return 106 } 107 108 func TestQueries(t *testing.T) { 109 cdc := codec.New() 110 types.RegisterCodec(cdc) 111 supply.RegisterCodec(cdc) 112 ctx, _, keeper, sk, _ := CreateTestInputDefault(t, false, 100) 113 querier := NewQuerier(keeper) 114 115 // test param queries 116 params := types.Params{ 117 CommunityTax: sdk.NewDecWithPrec(3, 1), 118 BaseProposerReward: sdk.NewDecWithPrec(2, 1), 119 BonusProposerReward: sdk.NewDecWithPrec(1, 1), 120 WithdrawAddrEnabled: true, 121 } 122 123 keeper.SetParams(ctx, params) 124 125 paramsRes := getQueriedParams(t, ctx, cdc, querier) 126 require.Equal(t, params.CommunityTax, paramsRes.CommunityTax) 127 require.Equal(t, params.BaseProposerReward, paramsRes.BaseProposerReward) 128 require.Equal(t, params.BonusProposerReward, paramsRes.BonusProposerReward) 129 require.Equal(t, params.WithdrawAddrEnabled, paramsRes.WithdrawAddrEnabled) 130 131 // test outstanding rewards query 132 outstandingRewards := sdk.DecCoins{{Denom: "mytoken", Amount: sdk.NewDec(3)}, {Denom: "myothertoken", Amount: sdk.NewDecWithPrec(3, 7)}} 133 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr1, outstandingRewards) 134 retOutstandingRewards := getQueriedValidatorOutstandingRewards(t, ctx, cdc, querier, valOpAddr1) 135 require.Equal(t, outstandingRewards, retOutstandingRewards) 136 137 // test validator commission query 138 commission := sdk.DecCoins{{Denom: "token1", Amount: sdk.NewDec(4)}, {Denom: "token2", Amount: sdk.NewDec(2)}} 139 keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr1, commission) 140 retCommission := getQueriedValidatorCommission(t, ctx, cdc, querier, valOpAddr1) 141 require.Equal(t, commission, retCommission) 142 143 // test delegator's total rewards query 144 delRewards := getQueriedDelegatorTotalRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1)) 145 require.Equal(t, types.QueryDelegatorTotalRewardsResponse{}, delRewards) 146 147 // test validator slashes query with height range 148 slashOne := types.NewValidatorSlashEvent(3, sdk.NewDecWithPrec(5, 1)) 149 slashTwo := types.NewValidatorSlashEvent(7, sdk.NewDecWithPrec(6, 1)) 150 keeper.SetValidatorSlashEvent(ctx, valOpAddr1, 3, 0, slashOne) 151 keeper.SetValidatorSlashEvent(ctx, valOpAddr1, 7, 0, slashTwo) 152 slashes := getQueriedValidatorSlashes(t, ctx, cdc, querier, valOpAddr1, 0, 2) 153 require.Equal(t, 0, len(slashes)) 154 slashes = getQueriedValidatorSlashes(t, ctx, cdc, querier, valOpAddr1, 0, 5) 155 require.Equal(t, []types.ValidatorSlashEvent{slashOne}, slashes) 156 slashes = getQueriedValidatorSlashes(t, ctx, cdc, querier, valOpAddr1, 0, 10) 157 require.Equal(t, []types.ValidatorSlashEvent{slashOne, slashTwo}, slashes) 158 159 // test delegation rewards query 160 sh := staking.NewHandler(sk) 161 comm := staking.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) 162 msg := staking.NewMsgCreateValidator( 163 valOpAddr1, valConsPk1, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)), staking.Description{}, comm, sdk.OneInt(), 164 ) 165 166 res, err := sh(ctx, msg) 167 require.NoError(t, err) 168 require.NotNil(t, res) 169 170 staking.EndBlocker(ctx, sk) 171 172 val := sk.Validator(ctx, valOpAddr1) 173 rewards := getQueriedDelegationRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1), valOpAddr1) 174 require.True(t, rewards.IsZero()) 175 initial := int64(10) 176 ctx.SetBlockHeight(ctx.BlockHeight() + 1) 177 tokens := sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDec(initial)}} 178 keeper.AllocateTokensToValidator(ctx, val, tokens) 179 rewards = getQueriedDelegationRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1), valOpAddr1) 180 require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDec(initial / 2)}}, rewards) 181 182 // test delegator's total rewards query 183 delRewards = getQueriedDelegatorTotalRewards(t, ctx, cdc, querier, sdk.AccAddress(valOpAddr1)) 184 expectedDelReward := types.NewDelegationDelegatorReward(valOpAddr1, 185 sdk.DecCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 5)}) 186 wantDelRewards := types.NewQueryDelegatorTotalRewardsResponse( 187 []types.DelegationDelegatorReward{expectedDelReward}, expectedDelReward.Reward) 188 require.Equal(t, wantDelRewards, delRewards) 189 190 // currently community pool hold nothing so we should return null 191 communityPool := getQueriedCommunityPool(t, ctx, cdc, querier) 192 require.Nil(t, communityPool) 193 }