refactor(upgrade): move ValidateBasic logic to msgServer (#15752)
This commit is contained in:
parent
22eb756e48
commit
722c3f935f
@ -13,7 +13,7 @@ require (
|
||||
github.com/cometbft/cometbft v0.37.0
|
||||
github.com/cosmos/cosmos-db v1.0.0-rc.1
|
||||
github.com/cosmos/cosmos-proto v1.0.0-beta.3
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec
|
||||
github.com/cosmos/gogoproto v1.4.7
|
||||
github.com/golang/protobuf v1.5.3
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
||||
|
||||
@ -346,8 +346,8 @@ github.com/cosmos/cosmos-db v1.0.0-rc.1 h1:SjnT8B6WKMW9WEIX32qMhnEEKcI7ZP0+G1Sa9
|
||||
github.com/cosmos/cosmos-db v1.0.0-rc.1/go.mod h1:Dnmk3flSf5lkwCqvvjNpoxjpXzhxnCAFzKHlbaForso=
|
||||
github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o=
|
||||
github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I=
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5 h1:zO3mov9MaHWNnYZyQ8Wz/CZhrjfizMKvvLH41Ro/FYk=
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230330094838-d21f58c638d5/go.mod h1:aKJRE3RjbwJUFGKG+kTDLhrST9vzFr8FlsTlv4eD+80=
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec h1:BE559vEyhAjljq+iyCGJsnVnpKl7QgYrJuzP4Ax1QDc=
|
||||
github.com/cosmos/cosmos-sdk v0.46.0-beta2.0.20230407193120-0a70647deaec/go.mod h1:lD11e/GdgJ5z2KCSN0DkXr0LFLXUrYUGIoF9cVvPU28=
|
||||
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
|
||||
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
|
||||
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
|
||||
|
||||
@ -26,10 +26,18 @@ var _ types.MsgServer = msgServer{}
|
||||
|
||||
// SoftwareUpgrade implements the Msg/SoftwareUpgrade Msg service.
|
||||
func (k msgServer) SoftwareUpgrade(goCtx context.Context, req *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) {
|
||||
if _, err := sdk.AccAddressFromBech32(req.Authority); err != nil {
|
||||
return nil, errors.Wrap(err, "authority")
|
||||
}
|
||||
|
||||
if k.authority != req.Authority {
|
||||
return nil, errors.Wrapf(gov.ErrInvalidSigner, "expected %s got %s", k.authority, req.Authority)
|
||||
}
|
||||
|
||||
if err := req.Plan.ValidateBasic(); err != nil {
|
||||
return nil, errors.Wrap(err, "plan")
|
||||
}
|
||||
|
||||
ctx := sdk.UnwrapSDKContext(goCtx)
|
||||
err := k.ScheduleUpgrade(ctx, req.Plan)
|
||||
if err != nil {
|
||||
@ -41,6 +49,10 @@ func (k msgServer) SoftwareUpgrade(goCtx context.Context, req *types.MsgSoftware
|
||||
|
||||
// CancelUpgrade implements the Msg/CancelUpgrade Msg service.
|
||||
func (k msgServer) CancelUpgrade(goCtx context.Context, req *types.MsgCancelUpgrade) (*types.MsgCancelUpgradeResponse, error) {
|
||||
if _, err := sdk.AccAddressFromBech32(req.Authority); err != nil {
|
||||
return nil, errors.Wrap(err, "authority")
|
||||
}
|
||||
|
||||
if k.authority != req.Authority {
|
||||
return nil, errors.Wrapf(gov.ErrInvalidSigner, "expected %s got %s", k.authority, req.Authority)
|
||||
}
|
||||
|
||||
@ -15,6 +15,18 @@ func (s *KeeperTestSuite) TestSoftwareUpgrade() {
|
||||
expectErr bool
|
||||
errMsg string
|
||||
}{
|
||||
{
|
||||
"invalid authority address",
|
||||
&types.MsgSoftwareUpgrade{
|
||||
Authority: "authority",
|
||||
Plan: types.Plan{
|
||||
Name: "all-good",
|
||||
Height: 123450000,
|
||||
},
|
||||
},
|
||||
true,
|
||||
"authority: decoding bech32 failed",
|
||||
},
|
||||
{
|
||||
"unauthorized authority address",
|
||||
&types.MsgSoftwareUpgrade{
|
||||
@ -85,6 +97,14 @@ func (s *KeeperTestSuite) TestCancelUpgrade() {
|
||||
expectErr bool
|
||||
errMsg string
|
||||
}{
|
||||
{
|
||||
"invalid authority address",
|
||||
&types.MsgCancelUpgrade{
|
||||
Authority: "authority",
|
||||
},
|
||||
true,
|
||||
"authority: decoding bech32 failed",
|
||||
},
|
||||
{
|
||||
"unauthorized authority address",
|
||||
&types.MsgCancelUpgrade{
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
|
||||
)
|
||||
@ -17,19 +15,6 @@ func (m MsgSoftwareUpgrade) GetSignBytes() []byte {
|
||||
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
|
||||
}
|
||||
|
||||
// ValidateBasic does a sanity check on the provided data.
|
||||
func (m *MsgSoftwareUpgrade) ValidateBasic() error {
|
||||
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
|
||||
return errorsmod.Wrap(err, "authority")
|
||||
}
|
||||
|
||||
if err := m.Plan.ValidateBasic(); err != nil {
|
||||
return errorsmod.Wrap(err, "plan")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSigners returns the expected signers for MsgSoftwareUpgrade.
|
||||
func (m *MsgSoftwareUpgrade) GetSigners() []sdk.AccAddress {
|
||||
addr, _ := sdk.AccAddressFromBech32(m.Authority)
|
||||
@ -41,15 +26,6 @@ func (m MsgCancelUpgrade) GetSignBytes() []byte {
|
||||
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
|
||||
}
|
||||
|
||||
// ValidateBasic does a sanity check on the provided data.
|
||||
func (m *MsgCancelUpgrade) ValidateBasic() error {
|
||||
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
|
||||
return errorsmod.Wrap(err, "authority")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSigners returns the expected signers for MsgCancelUpgrade.
|
||||
func (m *MsgCancelUpgrade) GetSigners() []sdk.AccAddress {
|
||||
addr, _ := sdk.AccAddressFromBech32(m.Authority)
|
||||
|
||||
@ -1,108 +0,0 @@
|
||||
package types_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"cosmossdk.io/x/upgrade/types"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
var authority = sdk.AccAddress("authority")
|
||||
|
||||
func TestMsgSoftwareUpgrade(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg *types.MsgSoftwareUpgrade
|
||||
expErr bool
|
||||
errMsg string
|
||||
}{
|
||||
{
|
||||
"invalid authority address",
|
||||
&types.MsgSoftwareUpgrade{
|
||||
Authority: "authority",
|
||||
Plan: types.Plan{
|
||||
Name: "all-good",
|
||||
Height: 123450000,
|
||||
},
|
||||
},
|
||||
true,
|
||||
"authority: decoding bech32 failed",
|
||||
},
|
||||
{
|
||||
"invalid plan",
|
||||
&types.MsgSoftwareUpgrade{
|
||||
Authority: authority.String(),
|
||||
Plan: types.Plan{
|
||||
Height: 123450000,
|
||||
},
|
||||
},
|
||||
true,
|
||||
"plan",
|
||||
},
|
||||
{
|
||||
"all good",
|
||||
&types.MsgSoftwareUpgrade{
|
||||
Authority: authority.String(),
|
||||
Plan: types.Plan{
|
||||
Name: "all-good",
|
||||
Height: 123450000,
|
||||
},
|
||||
},
|
||||
false,
|
||||
"",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err := tc.msg.ValidateBasic()
|
||||
if tc.expErr {
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), tc.errMsg)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMsgCancelUpgrade(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
msg *types.MsgCancelUpgrade
|
||||
expErr bool
|
||||
errMsg string
|
||||
}{
|
||||
{
|
||||
"invalid authority address",
|
||||
&types.MsgCancelUpgrade{
|
||||
Authority: "authority",
|
||||
},
|
||||
true,
|
||||
"authority: decoding bech32 failed",
|
||||
},
|
||||
{
|
||||
"all good",
|
||||
&types.MsgCancelUpgrade{
|
||||
Authority: authority.String(),
|
||||
},
|
||||
false,
|
||||
"",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err := tc.msg.ValidateBasic()
|
||||
if tc.expErr {
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), tc.errMsg)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user