cosmos-sdk/x/auth/middleware/tx_test.go
Amaury b3e922d08b
refactor: Move TxDecoder into its own middleware (#10612)
* WIP: middleware refactor

* refactor `tx.Request`

* Add MsgResponses any in sdk.Result

* add helper functions in abci

* refactor tips

* review changes

* Fix mock tests

* Update baseapp/abci.go

* Update baseapp/abci.go

* Update types/tx/middleware.go

* Update types/tx/middleware.go

* tx.Response to abci conversion

* refactor makeABCIData

* Add comments

* Fix build

* fix build error

* fix tests

* fix test

* fix tests

* Fix TestSimulateTx

* fix tests

* fix test

* Fix build

* Simplify code

* fix test build

* Use repeated bytes in txMsgData

* Fix grpc-gateway test

* Make proto-gen

* Automagically register MsgResponse

* review changes

* Use froydi's trick

* Use Any in TxMsgData

* Finally remove API breaking change

* Revert unnecessary stuff

* refactor: Move TxDecoder into its own middleware

* Add test for txDecoderMiddleware

* Fix some baseapp tests

* Fix some more tests

* Fix mock tests

* Fix middleware tests

* Add cl

* Fix tests

* Update types/tx/middleware.go

Co-authored-by: atheeshp <59333759+atheeshp@users.noreply.github.com>

Co-authored-by: atheesh <atheesh@vitwit.com>
Co-authored-by: atheeshp <59333759+atheeshp@users.noreply.github.com>
2021-12-06 10:26:15 +01:00

58 lines
1.7 KiB
Go

package middleware_test
import (
"context"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
"github.com/cosmos/cosmos-sdk/x/auth/middleware"
)
func (s *MWTestSuite) TestTxDecoderMiddleware() {
ctx := s.SetupTest(true) // setup
require := s.Require()
// Create a tx.
priv1, _, addr1 := testdata.KeyTestPubAddr()
txBuilder := s.clientCtx.TxConfig.NewTxBuilder()
err := txBuilder.SetMsgs(testdata.NewTestMsg(addr1))
require.NoError(err)
sdkTx, txBz, err := s.createTestTx(txBuilder, []cryptotypes.PrivKey{priv1}, []uint64{1}, []uint64{0}, ctx.ChainID())
require.NoError(err)
// Create a custom tx.Handler that checks that the req.Tx field is
// correctly populated.
txReqChecker := customTxHandler{func(c context.Context, r tx.Request) (tx.Response, error) {
require.NotNil(r.Tx)
require.Equal(sdkTx.GetMsgs()[0], r.Tx.GetMsgs()[0])
return tx.Response{}, nil
}}
testcases := []struct {
name string
req tx.Request
expErr bool
}{
{"empty tx bz", tx.Request{}, true},
{"tx bz and tx both given as inputs", tx.Request{Tx: sdkTx, TxBytes: txBz}, false},
{"tx bz only given as input", tx.Request{TxBytes: txBz}, false},
{"tx only given as input", tx.Request{Tx: sdkTx}, false},
}
for _, tc := range testcases {
s.Run(tc.name, func() {
txHandler := middleware.ComposeMiddlewares(
txReqChecker,
middleware.NewTxDecoderMiddleware(s.clientCtx.TxConfig.TxDecoder()),
)
_, err := txHandler.DeliverTx(sdk.WrapSDKContext(ctx), tc.req)
if tc.expErr {
require.Error(err)
} else {
require.NoError(err)
}
})
}
}