x/distribution: fix module's parameters validation (#8918)

* x/distribution: fix module's parameters validation

closes: #8914

* Update x/distribution/types/params.go

Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>

* Update x/distribution/types/params_internal_test.go

Co-authored-by: Robert Zaremba <robert@zaremba.ch>

Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
Co-authored-by: Robert Zaremba <robert@zaremba.ch>
This commit is contained in:
Alessio Treglia 2021-03-17 20:06:54 +00:00 committed by GitHub
parent 0c2d4a86fd
commit 1fddce73b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 21 deletions

View File

@ -1,4 +1,4 @@
package types
package types_test
import (
"testing"
@ -6,14 +6,14 @@ import (
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution/types"
)
func TestValidateGenesis(t *testing.T) {
fp := InitialFeePool()
fp := types.InitialFeePool()
require.Nil(t, fp.ValidateGenesis())
fp2 := FeePool{CommunityPool: sdk.DecCoins{{Denom: "stake", Amount: sdk.NewDec(-1)}}}
fp2 := types.FeePool{CommunityPool: sdk.DecCoins{{Denom: "stake", Amount: sdk.NewDec(-1)}}}
require.NotNil(t, fp2.ValidateGenesis())
}

View File

@ -51,7 +51,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
func (p Params) ValidateBasic() error {
if p.CommunityTax.IsNegative() || p.CommunityTax.GT(sdk.OneDec()) {
return fmt.Errorf(
"community tax should non-negative and less than one: %s", p.CommunityTax,
"community tax should be non-negative and less than one: %s", p.CommunityTax,
)
}
if p.BaseProposerReward.IsNegative() {
@ -64,9 +64,9 @@ func (p Params) ValidateBasic() error {
"bonus proposer reward should be positive: %s", p.BonusProposerReward,
)
}
if v := p.BaseProposerReward.Add(p.BonusProposerReward); v.GT(sdk.OneDec()) {
if v := p.BaseProposerReward.Add(p.BonusProposerReward).Add(p.CommunityTax); v.GT(sdk.OneDec()) {
return fmt.Errorf(
"sum of base and bonus proposer reward cannot greater than one: %s", v,
"sum of base, bonus proposer rewards, and community tax cannot be greater than one: %s", v,
)
}

View File

@ -0,0 +1,34 @@
package types
import (
"testing"
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func Test_validateAuxFuncs(t *testing.T) {
type args struct {
i interface{}
}
tests := []struct {
name string
args args
wantErr bool
}{
{"wrong type", args{10.5}, true},
{"empty sdk.Dec", args{sdk.Dec{}}, true},
{"negative", args{sdk.NewDec(-1)}, true},
{"one dec", args{sdk.NewDec(1)}, false},
{"two dec", args{sdk.NewDec(2)}, true},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
require.Equal(t, tt.wantErr, validateCommunityTax(tt.args.i) != nil)
require.Equal(t, tt.wantErr, validateBaseProposerReward(tt.args.i) != nil)
require.Equal(t, tt.wantErr, validateBonusProposerReward(tt.args.i) != nil)
})
}
}

View File

@ -1,4 +1,4 @@
package types
package types_test
import (
"testing"
@ -6,29 +6,44 @@ import (
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution/types"
)
func Test_validateAuxFuncs(t *testing.T) {
type args struct {
i interface{}
func TestParams_ValidateBasic(t *testing.T) {
toDec := sdk.MustNewDecFromStr
type fields struct {
CommunityTax sdk.Dec
BaseProposerReward sdk.Dec
BonusProposerReward sdk.Dec
WithdrawAddrEnabled bool
}
tests := []struct {
name string
args args
fields fields
wantErr bool
}{
{"wrong type", args{10.5}, true},
{"nil Int pointer", args{sdk.Dec{}}, true},
{"negative", args{sdk.NewDec(-1)}, true},
{"one dec", args{sdk.NewDec(1)}, false},
{"two dec", args{sdk.NewDec(2)}, true},
{"success", fields{toDec("0.1"), toDec("0.5"), toDec("0.4"), false}, false},
{"negative community tax", fields{toDec("-0.1"), toDec("0.5"), toDec("0.4"), false}, true},
{"negative base proposer reward", fields{toDec("0.1"), toDec("-0.5"), toDec("0.4"), false}, true},
{"negative bonus proposer reward", fields{toDec("0.1"), toDec("0.5"), toDec("-0.4"), false}, true},
{"total sum greater than 1", fields{toDec("0.2"), toDec("0.5"), toDec("0.4"), false}, true},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
require.Equal(t, tt.wantErr, validateCommunityTax(tt.args.i) != nil)
require.Equal(t, tt.wantErr, validateBaseProposerReward(tt.args.i) != nil)
require.Equal(t, tt.wantErr, validateBonusProposerReward(tt.args.i) != nil)
p := types.Params{
CommunityTax: tt.fields.CommunityTax,
BaseProposerReward: tt.fields.BaseProposerReward,
BonusProposerReward: tt.fields.BonusProposerReward,
WithdrawAddrEnabled: tt.fields.WithdrawAddrEnabled,
}
if err := p.ValidateBasic(); (err != nil) != tt.wantErr {
t.Errorf("ValidateBasic() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestDefaultParams(t *testing.T) {
require.NoError(t, types.DefaultParams().ValidateBasic())
}