@@ -174,7 +174,7 @@ func (suite *AnteTestSuite) createUpdateClientMessage() sdk.Msg {
174174 return msg
175175}
176176
177- func (suite * AnteTestSuite ) TestAnteDecorator () {
177+ func (suite * AnteTestSuite ) TestAnteDecoratorCheckTx () {
178178 testCases := []struct {
179179 name string
180180 malleate func (suite * AnteTestSuite ) []sdk.Msg
@@ -497,3 +497,95 @@ func (suite *AnteTestSuite) TestAnteDecorator() {
497497 })
498498 }
499499}
500+
501+ func (suite * AnteTestSuite ) TestAnteDecoratorReCheckTx () {
502+ testCases := []struct {
503+ name string
504+ malleate func (suite * AnteTestSuite ) []sdk.Msg
505+ expError error
506+ }{
507+ {
508+ "success on one new RecvPacket message" ,
509+ func (suite * AnteTestSuite ) []sdk.Msg {
510+ // the RecvPacket message has not been submitted to the chain yet, so it will succeed
511+ return []sdk.Msg {suite .createRecvPacketMessage (false )}
512+ },
513+ nil ,
514+ },
515+ {
516+ "success on one redundant and one new RecvPacket message" ,
517+ func (suite * AnteTestSuite ) []sdk.Msg {
518+ return []sdk.Msg {
519+ suite .createRecvPacketMessage (true ),
520+ suite .createRecvPacketMessage (false ),
521+ }
522+ },
523+ nil ,
524+ },
525+ {
526+ "success on invalid proof (proof checks occur in checkTx)" ,
527+ func (suite * AnteTestSuite ) []sdk.Msg {
528+ msg := suite .createRecvPacketMessage (false )
529+ msg .ProofCommitment = []byte ("invalid-proof" )
530+ return []sdk.Msg {msg }
531+ },
532+ nil ,
533+ },
534+ {
535+ "success on app callback error, app callbacks are skipped for performance" ,
536+ func (suite * AnteTestSuite ) []sdk.Msg {
537+ suite .chainB .GetSimApp ().IBCMockModule .IBCApp .OnRecvPacket = func (
538+ ctx sdk.Context , packet channeltypes.Packet , relayer sdk.AccAddress ,
539+ ) exported.Acknowledgement {
540+ panic (fmt .Errorf ("failed OnRecvPacket mock callback" ))
541+ }
542+
543+ // the RecvPacket message has not been submitted to the chain yet, so it will succeed
544+ return []sdk.Msg {suite .createRecvPacketMessage (false )}
545+ },
546+ nil ,
547+ },
548+ {
549+ "no success on one redundant RecvPacket message" ,
550+ func (suite * AnteTestSuite ) []sdk.Msg {
551+ return []sdk.Msg {suite .createRecvPacketMessage (true )}
552+ },
553+ channeltypes .ErrRedundantTx ,
554+ },
555+ }
556+
557+ for _ , tc := range testCases {
558+ tc := tc
559+
560+ suite .Run (tc .name , func () {
561+ // reset suite
562+ suite .SetupTest ()
563+
564+ k := suite .chainB .App .GetIBCKeeper ()
565+ decorator := ante .NewRedundantRelayDecorator (k )
566+
567+ msgs := tc .malleate (suite )
568+
569+ deliverCtx := suite .chainB .GetContext ().WithIsCheckTx (false )
570+ reCheckCtx := suite .chainB .GetContext ().WithIsReCheckTx (true )
571+
572+ // create multimsg tx
573+ txBuilder := suite .chainB .TxConfig .NewTxBuilder ()
574+ err := txBuilder .SetMsgs (msgs ... )
575+ suite .Require ().NoError (err )
576+ tx := txBuilder .GetTx ()
577+
578+ next := func (ctx sdk.Context , tx sdk.Tx , simulate bool ) (newCtx sdk.Context , err error ) { return ctx , nil }
579+
580+ _ , err = decorator .AnteHandle (deliverCtx , tx , false , next )
581+ suite .Require ().NoError (err , "antedecorator should not error on DeliverTx" )
582+
583+ _ , err = decorator .AnteHandle (reCheckCtx , tx , false , next )
584+ if tc .expError == nil {
585+ suite .Require ().NoError (err , "non-strict decorator did not pass as expected" )
586+ } else {
587+ suite .Require ().ErrorIs (err , tc .expError , "non-strict antehandler did not return error as expected" )
588+ }
589+ })
590+ }
591+ }
0 commit comments