github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/handler_distr_proposal_test.go (about) 1 package staking 2 3 import ( 4 "testing" 5 "time" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/fibonacci-chain/fbc/libs/tendermint/global" 9 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 10 keep "github.com/fibonacci-chain/fbc/x/staking/keeper" 11 "github.com/fibonacci-chain/fbc/x/staking/types" 12 "github.com/stretchr/testify/require" 13 "github.com/stretchr/testify/suite" 14 ) 15 16 type HandlerSuite struct { 17 suite.Suite 18 } 19 20 func TestHandlerSuite(t *testing.T) { 21 suite.Run(t, new(HandlerSuite)) 22 } 23 24 func (suite *HandlerSuite) TestEditValidatorCommission() { 25 testCases := []struct { 26 title string 27 setMilestoneHeight func() 28 newRate string 29 setBlockTime func(ctx *sdk.Context) 30 handlerErrType int 31 err [5]error 32 }{ 33 { 34 "not venus2, default ok", 35 func() { 36 tmtypes.UnittestOnlySetMilestoneVenus2Height(-1) 37 }, 38 "0.5", 39 func(ctx *sdk.Context) { 40 ctx.SetBlockTime(time.Now()) 41 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 42 }, 43 0, 44 [5]error{nil, nil, nil, nil}, 45 }, 46 { 47 "not venus2, -0.5", 48 func() { 49 tmtypes.UnittestOnlySetMilestoneVenus2Height(-1) 50 }, 51 "-0.5", 52 func(ctx *sdk.Context) { 53 ctx.SetBlockTime(time.Now()) 54 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 55 }, 56 0, 57 [5]error{types.ErrInvalidCommissionRate(), types.ErrInvalidCommissionRate(), 58 types.ErrCommissionNegative(), types.ErrCommissionNegative()}, 59 }, 60 { 61 "not venus2, do not set block time", 62 func() { 63 tmtypes.UnittestOnlySetMilestoneVenus2Height(-1) 64 }, 65 "0.5", 66 func(ctx *sdk.Context) { 67 68 }, 69 0, 70 [5]error{nil, nil, nil, types.ErrCommissionUpdateTime()}, 71 }, 72 { 73 "venus2, default ok", 74 func() { 75 global.SetGlobalHeight(11) 76 tmtypes.UnittestOnlySetMilestoneVenus2Height(10) 77 }, 78 "0.5", 79 func(ctx *sdk.Context) { 80 ctx.SetBlockTime(time.Now()) 81 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 82 }, 83 1, 84 [5]error{nil, nil, nil, nil}, 85 }, 86 { 87 "venus2, not support", 88 func() { 89 global.SetGlobalHeight(10) 90 tmtypes.UnittestOnlySetMilestoneVenus2Height(11) 91 }, 92 "0.5", 93 func(ctx *sdk.Context) { 94 ctx.SetBlockTime(time.Now()) 95 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 96 }, 97 1, 98 [5]error{types.ErrCodeNotSupportEditValidatorCommissionRate(), types.ErrCodeNotSupportEditValidatorCommissionRate(), nil, nil}, 99 }, 100 { 101 "venus2, -0.5", 102 func() { 103 tmtypes.UnittestOnlySetMilestoneVenus2Height(0) 104 }, 105 "-0.5", 106 func(ctx *sdk.Context) { 107 ctx.SetBlockTime(time.Now()) 108 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 109 }, 110 1, 111 [5]error{types.ErrInvalidCommissionRate(), types.ErrInvalidCommissionRate(), 112 types.ErrCommissionNegative(), types.ErrCommissionNegative()}, 113 }, 114 { 115 "venus2, do not set block time", 116 func() { 117 global.SetGlobalHeight(11) 118 tmtypes.UnittestOnlySetMilestoneVenus2Height(10) 119 }, 120 "0.5", 121 func(ctx *sdk.Context) { 122 123 }, 124 1, 125 [5]error{nil, nil, nil, types.ErrCommissionUpdateTime()}, 126 }, 127 { 128 "venus2, not support", 129 func() { 130 global.SetGlobalHeight(10) 131 tmtypes.UnittestOnlySetMilestoneVenus2Height(11) 132 }, 133 "0.5", 134 func(ctx *sdk.Context) { 135 136 }, 137 1, 138 [5]error{types.ErrCodeNotSupportEditValidatorCommissionRate(), types.ErrCodeNotSupportEditValidatorCommissionRate(), nil, types.ErrCommissionUpdateTime()}, 139 }, 140 } 141 142 for _, tc := range testCases { 143 global.SetGlobalHeight(0) 144 tmtypes.UnittestOnlySetMilestoneVenus2Height(0) 145 suite.Run(tc.title, func() { 146 ctx, _, mKeeper := CreateTestInput(suite.T(), false, SufficientInitPower) 147 tc.setMilestoneHeight() 148 keeper := mKeeper.Keeper 149 _ = setInstantUnbondPeriod(keeper, ctx) 150 handler := NewHandler(keeper) 151 152 newRate, _ := sdk.NewDecFromStr(tc.newRate) 153 msgEditValidator := NewMsgEditValidatorCommissionRate(sdk.ValAddress(keep.Addrs[0]), newRate) 154 err := msgEditValidator.ValidateBasic() 155 require.Equal(suite.T(), tc.err[0], err) 156 157 // validator not exist 158 got, err := handler(ctx, msgEditValidator) 159 if tc.handlerErrType == 0 { 160 require.Equal(suite.T(), ErrNoValidatorFound(msgEditValidator.ValidatorAddress.String()), err) 161 } else { 162 require.NotNil(suite.T(), err) 163 } 164 165 //create validator 166 validatorAddr := sdk.ValAddress(keep.Addrs[0]) 167 msgCreateValidator := NewTestMsgCreateValidator(validatorAddr, keep.PKs[0], DefaultMSD) 168 got, err = handler(ctx, msgCreateValidator) 169 require.Nil(suite.T(), err, "expected create-validator to be ok, got %v", got) 170 171 // must end-block 172 updates := keeper.ApplyAndReturnValidatorSetUpdates(ctx) 173 require.Equal(suite.T(), 1, len(updates)) 174 SimpleCheckValidator(suite.T(), ctx, keeper, validatorAddr, DefaultMSD, sdk.Bonded, 175 SharesFromDefaultMSD, false) 176 177 // normal rate 178 newRate, _ = sdk.NewDecFromStr(tc.newRate) 179 msgEditValidator = NewMsgEditValidatorCommissionRate(validatorAddr, newRate) 180 err = msgEditValidator.ValidateBasic() 181 require.Equal(suite.T(), tc.err[1], err) 182 got, err = handler(ctx, msgEditValidator) 183 if tc.handlerErrType == 0 { 184 require.Equal(suite.T(), tc.err[2], err) 185 } else { 186 require.NotNil(suite.T(), err) 187 } 188 189 tc.setBlockTime(&ctx) 190 msgEditValidator = NewMsgEditValidatorCommissionRate(validatorAddr, newRate) 191 got, err = handler(ctx, msgEditValidator) 192 if tc.handlerErrType == 0 { 193 require.Equal(suite.T(), tc.err[3], err) 194 } else { 195 require.NotNil(suite.T(), err) 196 } 197 }) 198 } 199 }