github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/distribution/keeper/keeper_test.go (about) 1 package keeper 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "github.com/stretchr/testify/require" 9 10 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 11 ) 12 13 func TestSetWithdrawAddr(t *testing.T) { 14 ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000) 15 16 params := keeper.GetParams(ctx) 17 params.WithdrawAddrEnabled = false 18 keeper.SetParams(ctx, params) 19 20 err := keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2) 21 require.NotNil(t, err) 22 23 params.WithdrawAddrEnabled = true 24 keeper.SetParams(ctx, params) 25 26 err = keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2) 27 require.Nil(t, err) 28 29 keeper.blacklistedAddrs[distrAcc.GetAddress().String()] = true 30 require.Error(t, keeper.SetWithdrawAddr(ctx, delAddr1, distrAcc.GetAddress())) 31 } 32 33 func TestWithdrawValidatorCommission(t *testing.T) { 34 ctx, ak, keeper, _, _ := CreateTestInputDefault(t, false, 1000) 35 36 valCommission := sdk.DecCoins{ 37 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), 38 sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(3).Quo(sdk.NewDec(2))), 39 } 40 41 // set module account coins 42 distrAcc := keeper.GetDistributionAccount(ctx) 43 distrAcc.SetCoins(sdk.NewCoins( 44 sdk.NewCoin("mytoken", sdk.NewInt(2)), 45 sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)), 46 )) 47 keeper.supplyKeeper.SetModuleAccount(ctx, distrAcc) 48 49 // check initial balance 50 balance := ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() 51 expTokens := sdk.TokensFromConsensusPower(1000) 52 expCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, expTokens)) 53 require.Equal(t, expCoins, balance) 54 55 // set outstanding rewards 56 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr3, valCommission) 57 58 // set commission 59 keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr3, valCommission) 60 61 // withdraw commission 62 keeper.WithdrawValidatorCommission(ctx, valOpAddr3) 63 64 // check balance increase 65 balance = ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins() 66 require.Equal(t, sdk.NewCoins( 67 sdk.NewCoin("mytoken", sdk.NewInt(1)), 68 sdk.NewCoin(sdk.DefaultBondDenom, expTokens.AddRaw(1)), 69 ), balance) 70 71 // check remainder 72 remainder := keeper.GetValidatorAccumulatedCommission(ctx, valOpAddr3) 73 require.Equal(t, sdk.DecCoins{ 74 sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(1).Quo(sdk.NewDec(2))), 75 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(1).Quo(sdk.NewDec(4))), 76 }, remainder) 77 78 require.True(t, true) 79 } 80 81 func TestGetTotalRewards(t *testing.T) { 82 ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000) 83 84 valCommission := sdk.DecCoins{ 85 sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), 86 sdk.NewDecCoinFromDec("stake", sdk.NewDec(3).Quo(sdk.NewDec(2))), 87 } 88 89 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr1, valCommission) 90 keeper.SetValidatorOutstandingRewards(ctx, valOpAddr2, valCommission) 91 92 expectedRewards := valCommission.MulDec(sdk.NewDec(2)) 93 totalRewards := keeper.GetTotalRewards(ctx) 94 95 require.Equal(t, expectedRewards, totalRewards) 96 } 97 98 func TestFundCommunityPool(t *testing.T) { 99 // nolint dogsled 100 ctx, _, bk, keeper, _, _, _ := CreateTestInputAdvanced(t, false, 1000, sdk.NewDecWithPrec(2, 2)) 101 102 amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) 103 _ = bk.SetCoins(ctx, delAddr1, amount) 104 105 initPool := keeper.GetFeePool(ctx) 106 assert.Empty(t, initPool.CommunityPool) 107 108 err := keeper.FundCommunityPool(ctx, amount, delAddr1) 109 assert.Nil(t, err) 110 111 assert.Equal(t, initPool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...), keeper.GetFeePool(ctx).CommunityPool) 112 assert.Empty(t, bk.GetCoins(ctx, delAddr1)) 113 }