Skip to content

Commit e77a0f4

Browse files
author
Nikolas De Giorgis
authored
chore: add ValidateBasic for MsgTimeout in ChannelKeeper V2 (#7482)
* chore: add ValidateBasic for MsgTimeout in ChannelKeeper V2 * rename
1 parent 0a3b4be commit e77a0f4

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

modules/core/04-channel/v2/types/msgs.go

+17
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ var (
2626
_ sdk.Msg = (*MsgRecvPacket)(nil)
2727
_ sdk.HasValidateBasic = (*MsgRecvPacket)(nil)
2828

29+
_ sdk.Msg = (*MsgTimeout)(nil)
30+
_ sdk.HasValidateBasic = (*MsgTimeout)(nil)
31+
2932
_ sdk.Msg = (*MsgAcknowledgement)(nil)
3033
_ sdk.HasValidateBasic = (*MsgAcknowledgement)(nil)
3134
)
@@ -180,3 +183,17 @@ func NewMsgTimeout(packet Packet, proofUnreceived []byte, proofHeight clienttype
180183
Signer: signer,
181184
}
182185
}
186+
187+
// ValidateBasic performs basic checks on a MsgTimeout
188+
func (msg *MsgTimeout) ValidateBasic() error {
189+
if len(msg.ProofUnreceived) == 0 {
190+
return errorsmod.Wrap(commitmenttypesv1.ErrInvalidProof, "proof unreceived can not be empty")
191+
}
192+
193+
_, err := sdk.AccAddressFromBech32(msg.Signer)
194+
if err != nil {
195+
return errorsmod.Wrapf(ibcerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err)
196+
}
197+
198+
return msg.Packet.ValidateBasic()
199+
}

modules/core/04-channel/v2/types/msgs_test.go

+56-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ func (s *TypesTestSuite) TestMsgRecvPacketValidateBasic() {
272272

273273
func (s *TypesTestSuite) TestMsgAcknowledge_ValidateBasic() {
274274
var msg *types.MsgAcknowledgement
275-
276275
testCases := []struct {
277276
name string
278277
malleate func()
@@ -326,3 +325,59 @@ func (s *TypesTestSuite) TestMsgAcknowledge_ValidateBasic() {
326325
})
327326
}
328327
}
328+
329+
func (s *TypesTestSuite) TestMsgTimeoutValidateBasic() {
330+
var msg *types.MsgTimeout
331+
332+
testCases := []struct {
333+
name string
334+
malleate func()
335+
expError error
336+
}{
337+
{
338+
name: "success",
339+
malleate: func() {},
340+
},
341+
{
342+
name: "failure: invalid signer",
343+
malleate: func() {
344+
msg.Signer = ""
345+
},
346+
expError: ibcerrors.ErrInvalidAddress,
347+
},
348+
{
349+
name: "failure: invalid packet",
350+
malleate: func() {
351+
msg.Packet.Sequence = 0
352+
},
353+
expError: types.ErrInvalidPacket,
354+
},
355+
{
356+
name: "failure: invalid proof unreceived",
357+
malleate: func() {
358+
msg.ProofUnreceived = []byte{}
359+
},
360+
expError: commitmenttypes.ErrInvalidProof,
361+
},
362+
}
363+
for _, tc := range testCases {
364+
s.Run(tc.name, func() {
365+
msg = types.NewMsgTimeout(
366+
types.NewPacket(1, ibctesting.FirstChannelID, ibctesting.SecondChannelID, s.chainA.GetTimeoutTimestamp(), mockv2.NewMockPacketData(mockv2.ModuleNameA, mockv2.ModuleNameB)),
367+
testProof,
368+
clienttypes.ZeroHeight(),
369+
s.chainA.SenderAccount.GetAddress().String(),
370+
)
371+
372+
tc.malleate()
373+
374+
err := msg.ValidateBasic()
375+
expPass := tc.expError == nil
376+
if expPass {
377+
s.Require().NoError(err)
378+
} else {
379+
ibctesting.RequireErrorIsOrContains(s.T(), err, tc.expError)
380+
}
381+
})
382+
}
383+
}

0 commit comments

Comments
 (0)