From d65577e484397a6b35f6eb18eb4cc3ae99f64ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:29:30 +0200 Subject: [PATCH] feat: add unpacket inerfaces message assertion --- modules/core/02-client/types/msgs.go | 6 +++++ modules/core/02-client/types/msgs_test.go | 28 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/modules/core/02-client/types/msgs.go b/modules/core/02-client/types/msgs.go index 9599b176c26..4f5b3116162 100644 --- a/modules/core/02-client/types/msgs.go +++ b/modules/core/02-client/types/msgs.go @@ -25,6 +25,7 @@ var ( _ codectypes.UnpackInterfacesMessage = (*MsgUpdateClient)(nil) _ codectypes.UnpackInterfacesMessage = (*MsgSubmitMisbehaviour)(nil) _ codectypes.UnpackInterfacesMessage = (*MsgUpgradeClient)(nil) + _ codectypes.UnpackInterfacesMessage = (*MsgIBCSoftwareUpgrade)(nil) ) // NewMsgCreateClient creates a new MsgCreateClient instance @@ -329,6 +330,11 @@ func (msg *MsgIBCSoftwareUpgrade) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{accAddr} } +// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces +func (msg *MsgIBCSoftwareUpgrade) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + return unpacker.UnpackAny(msg.UpgradedClientState, new(exported.ClientState)) +} + // NewMsgRecoverClient creates a new MsgRecoverClient instance func NewMsgRecoverClient(signer, subjectClientID, substituteClientID string) *MsgRecoverClient { return &MsgRecoverClient{ diff --git a/modules/core/02-client/types/msgs_test.go b/modules/core/02-client/types/msgs_test.go index cdffa92a415..46a5409860e 100644 --- a/modules/core/02-client/types/msgs_test.go +++ b/modules/core/02-client/types/msgs_test.go @@ -923,3 +923,31 @@ func (suite *TypesTestSuite) TestMsgIBCSoftwareUpgrade_ValidateBasic() { } } } + +// tests a MsgIBCSoftwareUpgrade can be marshaled and unmarshaled, and the +// client state can be unpacked +func (suite *TypesTestSuite) TestMarshalMsgIBCSoftwareUpgrade() { + cdc := suite.chainA.App.AppCodec() + + // create proposal + plan := upgradetypes.Plan{ + Name: "upgrade ibc", + Height: 1000, + } + + msg, err := types.NewMsgIBCSoftwareUpgrade(ibctesting.TestAccAddress, plan, &ibctm.ClientState{}) + suite.Require().NoError(err) + + // marshal message + bz, err := cdc.MarshalJSON(msg) + suite.Require().NoError(err) + + // unmarshal proposal + newMsg := &types.MsgIBCSoftwareUpgrade{} + err = cdc.UnmarshalJSON(bz, newMsg) + suite.Require().NoError(err) + + // unpack client state + _, err = types.UnpackClientState(newMsg.UpgradedClientState) + suite.Require().NoError(err) +}