refactor!: Remove sdk.Router and refactor baseapp tests (#13005)

* test

* progress-ish

* progress

* progress

* make mocks

* progress

* test

* progress

* progress

* progress

* progress

* progress

* progress

* fix mock tests

* progress

* pretty much done, might need some tidying up

* lint

* re-enable blockgas test

* remove router

* gofumpt

* remove more references of Router

* fix

* remove unused code

* remove unused code

Co-authored-by: Marko <marbar3778@yahoo.com>
This commit is contained in:
Facundo Medica 2022-08-30 18:50:47 -03:00 committed by GitHub
parent 2c527d0650
commit 797bd12af5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 3792 additions and 2445 deletions

View File

@ -1,10 +1,13 @@
package baseapp
import (
"encoding/json"
"os"
"testing"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
dbm "github.com/tendermint/tm-db"
@ -12,8 +15,13 @@ import (
"github.com/cosmos/cosmos-sdk/snapshots"
snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types"
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func defaultLogger() log.Logger {
return log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "sdk/app")
}
func TestGetBlockRentionHeight(t *testing.T) {
logger := defaultLogger()
db := dbm.NewMemDB()
@ -164,3 +172,40 @@ func TestBaseAppCreateQueryContext(t *testing.T) {
})
}
}
type paramStore struct {
db *dbm.MemDB
}
func (ps *paramStore) Set(_ sdk.Context, key []byte, value interface{}) {
bz, err := json.Marshal(value)
if err != nil {
panic(err)
}
ps.db.Set(key, bz)
}
func (ps *paramStore) Has(_ sdk.Context, key []byte) bool {
ok, err := ps.db.Has(key)
if err != nil {
panic(err)
}
return ok
}
func (ps *paramStore) Get(_ sdk.Context, key []byte, ptr interface{}) {
bz, err := ps.db.Get(key)
if err != nil {
panic(err)
}
if len(bz) == 0 {
return
}
if err := json.Unmarshal(bz, ptr); err != nil {
panic(err)
}
}

View File

@ -18,7 +18,6 @@ import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
)
const (
@ -49,7 +48,6 @@ type BaseApp struct { //nolint: maligned
db dbm.DB // common DB backend
cms sdk.CommitMultiStore // Main (uncached) state
storeLoader StoreLoader // function to handle store loading, may be overridden with SetStoreLoader()
router sdk.Router // handle any kind of legacy message
queryRouter sdk.QueryRouter // router for redirecting query calls
grpcQueryRouter *GRPCQueryRouter // router for redirecting gRPC query calls
msgServiceRouter *MsgServiceRouter // router for redirecting Msg service messages
@ -149,7 +147,6 @@ func NewBaseApp(
db: db,
cms: store.NewCommitMultiStore(db),
storeLoader: DefaultStoreLoader,
router: NewRouter(),
queryRouter: NewQueryRouter(),
grpcQueryRouter: NewGRPCQueryRouter(),
msgServiceRouter: NewMsgServiceRouter(),
@ -367,17 +364,6 @@ func (app *BaseApp) setIndexEvents(ie []string) {
}
}
// Router returns the legacy router of the BaseApp.
func (app *BaseApp) Router() sdk.Router {
if app.sealed {
// We cannot return a Router when the app is sealed because we can't have
// any routes modified which would cause unexpected routing behavior.
panic("Router() on sealed BaseApp")
}
return app.router
}
// QueryRouter returns the QueryRouter of a BaseApp.
func (app *BaseApp) QueryRouter() sdk.QueryRouter { return app.queryRouter }
@ -749,20 +735,6 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (*s
// ADR 031 request type routing
msgResult, err = handler(ctx, msg)
eventMsgName = sdk.MsgTypeURL(msg)
} else if legacyMsg, ok := msg.(legacytx.LegacyMsg); ok {
// legacy sdk.Msg routing
// Assuming that the app developer has migrated all their Msgs to
// proto messages and has registered all `Msg services`, then this
// path should never be called, because all those Msgs should be
// registered within the `msgServiceRouter` already.
msgRoute := legacyMsg.Route()
eventMsgName = legacyMsg.Type()
handler := app.router.Route(ctx, msgRoute)
if handler == nil {
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized message route: %s; message index: %d", msgRoute, i)
}
msgResult, err = handler(ctx, msg)
} else {
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "can't route message %+v", msg)
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
package baseapp_test
import (
"fmt"
"context"
"math"
"testing"
@ -12,9 +12,8 @@ import (
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
dbm "github.com/tendermint/tm-db"
bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1"
"cosmossdk.io/depinject"
"github.com/cosmos/cosmos-sdk/baseapp"
baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
@ -39,6 +38,22 @@ import (
var blockMaxGas = uint64(simtestutil.DefaultConsensusParams.Block.MaxGas)
type BlockGasImpl struct {
panicTx bool
gasToConsume uint64
key store.StoreKey
}
func (m BlockGasImpl) Set(ctx context.Context, msg *baseapptestutil.MsgKeyValue) (*baseapptestutil.MsgCreateKeyValueResponse, error) {
sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx.KVStore(m.key).Set(msg.Key, msg.Value)
sdkCtx.GasMeter().ConsumeGas(m.gasToConsume, "TestMsg")
if m.panicTx {
panic("panic in tx execution")
}
return &baseapptestutil.MsgCreateKeyValueResponse{}, nil
}
func TestBaseApp_BlockGas(t *testing.T) {
testcases := []struct {
name string
@ -68,25 +83,7 @@ func TestBaseApp_BlockGas(t *testing.T) {
err error
)
appConfig := depinject.Configs(makeTestConfig(),
depinject.ProvideInModule(banktypes.ModuleName,
func(_ *bankmodulev1.Module, key *store.KVStoreKey) runtime.BaseAppOption {
return func(app *baseapp.BaseApp) {
route := (&testdata.TestMsg{}).Route()
app.Router().AddRoute(sdk.NewRoute(route, func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
_, ok := msg.(*testdata.TestMsg)
if !ok {
return &sdk.Result{}, fmt.Errorf("Wrong Msg type, expected %T, got %T", (*testdata.TestMsg)(nil), msg)
}
ctx.KVStore(key).Set([]byte("ok"), []byte("ok"))
ctx.GasMeter().ConsumeGas(tc.gasToConsume, "TestMsg")
if tc.panicTx {
panic("panic in tx execution")
}
return &sdk.Result{}, nil
}))
}
}))
appConfig := depinject.Configs(makeTestConfig())
err = depinject.Inject(appConfig,
&bankKeeper,
@ -105,9 +102,13 @@ func TestBaseApp_BlockGas(t *testing.T) {
require.NoError(t, err)
t.Run(tc.name, func(t *testing.T) {
interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil),
&testdata.TestMsg{},
)
baseapptestutil.RegisterInterfaces(interfaceRegistry)
baseapptestutil.RegisterKeyValueServer(bapp.MsgServiceRouter(), BlockGasImpl{
panicTx: tc.panicTx,
gasToConsume: tc.gasToConsume,
key: bapp.UnsafeFindStoreKey(banktypes.ModuleName),
})
genState := GenesisStateWithSingleValidator(t, cdc, appBuilder)
stateBytes, err := tmjson.MarshalIndent(genState, "", " ")
require.NoError(t, err)
@ -134,7 +135,11 @@ func TestBaseApp_BlockGas(t *testing.T) {
require.Equal(t, uint64(0), seq)
// msg and signatures
msg := testdata.NewTestMsg(addr1)
msg := &baseapptestutil.MsgKeyValue{
Key: []byte("ok"),
Value: []byte("ok"),
Signer: addr1.String(),
}
txBuilder := txConfig.NewTxBuilder()
@ -166,7 +171,7 @@ func TestBaseApp_BlockGas(t *testing.T) {
require.Equal(t, []byte("ok"), okValue)
}
// check block gas is always consumed
baseGas := uint64(52744) // baseGas is the gas consumed before tx msg
baseGas := uint64(52864) // baseGas is the gas consumed before tx msg
expGasConsumed := addUint64Saturating(tc.gasToConsume, baseGas)
if expGasConsumed > txtypes.MaxGasWanted {
// capped by gasLimit

2186
baseapp/deliver_tx_test.go Normal file

File diff suppressed because it is too large Load Diff

View File

@ -200,14 +200,6 @@ func (app *BaseApp) SetStoreLoader(loader StoreLoader) {
app.storeLoader = loader
}
// SetRouter allows us to customize the router.
func (app *BaseApp) SetRouter(router sdk.Router) {
if app.sealed {
panic("SetRouter() on sealed BaseApp")
}
app.router = router
}
// SetSnapshot sets the snapshot store and options.
func (app *BaseApp) SetSnapshot(snapshotStore *snapshots.Store, opts snapshottypes.SnapshotOptions) {
if app.sealed {

View File

@ -1,41 +0,0 @@
package baseapp
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
)
type Router struct {
routes map[string]sdk.Handler
}
var _ sdk.Router = NewRouter()
// NewRouter returns a reference to a new router.
func NewRouter() *Router {
return &Router{
routes: make(map[string]sdk.Handler),
}
}
// AddRoute adds a route path to the router with a given handler. The route must
// be alphanumeric.
func (rtr *Router) AddRoute(route sdk.Route) sdk.Router {
if !sdk.IsAlphaNumeric(route.Path()) {
panic("route expressions can only contain alphanumeric characters")
}
if rtr.routes[route.Path()] != nil {
panic(fmt.Sprintf("route %s has already been initialized", route.Path()))
}
rtr.routes[route.Path()] = route.Handler()
return rtr
}
// Route returns a handler for a given route path.
//
// TODO: Handle expressive matches.
func (rtr *Router) Route(_ sdk.Context, path string) sdk.Handler {
return rtr.routes[path]
}

View File

@ -1,31 +0,0 @@
package baseapp
import (
"testing"
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
)
var testHandler = func(_ sdk.Context, _ sdk.Msg) (*sdk.Result, error) {
return &sdk.Result{}, nil
}
func TestRouter(t *testing.T) {
rtr := NewRouter()
// require panic on invalid route
require.Panics(t, func() {
rtr.AddRoute(sdk.NewRoute("*", testHandler))
})
rtr.AddRoute(sdk.NewRoute("testRoute", testHandler))
h := rtr.Route(sdk.Context{}, "testRoute")
require.NotNil(t, h)
// require panic on duplicate route
require.Panics(t, func() {
rtr.AddRoute(sdk.NewRoute("testRoute", testHandler))
})
}

View File

@ -0,0 +1,5 @@
version: v1
plugins:
- name: gocosmos
out: ../..
opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types

17
baseapp/testutil/buf.lock Normal file
View File

@ -0,0 +1,17 @@
# Generated by buf. DO NOT EDIT.
version: v1
deps:
- remote: buf.build
owner: cosmos
repository: cosmos-proto
branch: main
commit: 9e9a53f8db0d493f8b8c66d458c767c1
digest: b1-6w7Hozd_Oo_yZ1Sku8Nhz9qou-4licLr6VmEyeI9jO4=
create_time: 2021-12-02T20:41:47.795828Z
- remote: buf.build
owner: cosmos
repository: gogo-proto
branch: main
commit: bee5511075b7499da6178d9e4aaa628b
digest: b1-rrBIustouD-S80cVoZ_rM0qJsmei9AgbXy9GPQu6vxg=
create_time: 2021-12-02T20:01:17.069307Z

View File

@ -0,0 +1,4 @@
version: v1
deps:
- buf.build/cosmos/gogo-proto
- buf.build/cosmos/cosmos-proto

View File

@ -0,0 +1,56 @@
package testutil
import (
"github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/msgservice"
)
func RegisterInterfaces(registry types.InterfaceRegistry) {
registry.RegisterImplementations(
(*sdk.Msg)(nil),
&MsgCounter{},
&MsgCounter2{},
&MsgKeyValue{},
)
msgservice.RegisterMsgServiceDesc(registry, &_Counter_serviceDesc)
msgservice.RegisterMsgServiceDesc(registry, &_Counter2_serviceDesc)
msgservice.RegisterMsgServiceDesc(registry, &_KeyValue_serviceDesc)
}
var _ sdk.Msg = &MsgCounter{}
func (msg *MsgCounter) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{} }
func (msg *MsgCounter) ValidateBasic() error {
if msg.Counter >= 0 {
return nil
}
return sdkerrors.Wrap(sdkerrors.ErrInvalidSequence, "counter should be a non-negative integer")
}
var _ sdk.Msg = &MsgCounter2{}
func (msg *MsgCounter2) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{} }
func (msg *MsgCounter2) ValidateBasic() error {
if msg.Counter >= 0 {
return nil
}
return sdkerrors.Wrap(sdkerrors.ErrInvalidSequence, "counter should be a non-negative integer")
}
var _ sdk.Msg = &MsgKeyValue{}
func (msg *MsgKeyValue) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{sdk.MustAccAddressFromBech32(msg.Signer)}
}
func (msg *MsgKeyValue) ValidateBasic() error {
if msg.Key == nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "key cannot be nil")
}
if msg.Value == nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "value cannot be nil")
}
return nil
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,39 @@
syntax = "proto3";
package testdata;
import "gogoproto/gogo.proto";
import "google/protobuf/any.proto";
option go_package = "github.com/cosmos/cosmos-sdk/baseapp/testutil";
message MsgCounter {
int64 counter = 1;
bool fail_on_handler = 2;
}
message MsgCounter2 {
int64 counter = 1;
bool fail_on_handler = 2;
}
message MsgCreateCounterResponse {}
message MsgKeyValue {
bytes key = 1;
bytes value = 2;
string signer = 3;
}
message MsgCreateKeyValueResponse {}
service Counter {
rpc IncrementCounter(MsgCounter) returns (MsgCreateCounterResponse);
}
service Counter2 {
rpc IncrementCounter(MsgCounter2) returns (MsgCreateCounterResponse);
}
service KeyValue {
rpc Set(MsgKeyValue) returns (MsgCreateKeyValueResponse);
}

View File

@ -2,11 +2,11 @@
package testpb
import (
v1beta11 "cosmossdk.io/api/cosmos/base/query/v1beta1"
v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1"
fmt "fmt"
_ "github.com/cosmos/cosmos-proto"
runtime "github.com/cosmos/cosmos-proto/runtime"
v1beta11 "cosmossdk.io/api/cosmos/base/query/v1beta1"
v1beta1 "cosmossdk.io/api/cosmos/base/v1beta1"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"

View File

@ -35,6 +35,9 @@ cd ..
# generate codec/testdata proto code
(cd testutil/testdata; buf generate)
# generate baseapp test messages
(cd baseapp/testutil; buf generate)
# move proto files to the right places
cp -r github.com/cosmos/cosmos-sdk/* ./
rm -rf github.com

View File

@ -1,6 +1,7 @@
package mock
import (
"context"
"encoding/json"
"errors"
"fmt"
@ -8,12 +9,14 @@ import (
"github.com/tendermint/tendermint/types"
db "github.com/tendermint/tm-db"
"google.golang.org/grpc"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
bam "github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
@ -38,8 +41,23 @@ func NewApp(rootDir string, logger log.Logger) (abci.Application, error) {
baseApp.SetInitChainer(InitChainer(capKeyMainStore))
// Set a Route.
baseApp.Router().AddRoute(sdk.NewRoute("kvstore", KVStoreHandler(capKeyMainStore)))
interfaceRegistry := codectypes.NewInterfaceRegistry()
interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil), &kvstoreTx{})
router := bam.NewMsgServiceRouter()
router.SetInterfaceRegistry(interfaceRegistry)
newDesc := &grpc.ServiceDesc{
ServiceName: "test",
Methods: []grpc.MethodDesc{
{
MethodName: "Test",
Handler: _Msg_Test_Handler,
},
},
}
router.RegisterService(newDesc, &MsgServerImpl{capKeyMainStore})
baseApp.SetMsgServiceRouter(router)
// Load latest version.
if err := baseApp.LoadLatestVersion(); err != nil {
@ -53,7 +71,7 @@ func NewApp(rootDir string, logger log.Logger) (abci.Application, error) {
// them to the db
func KVStoreHandler(storeKey storetypes.StoreKey) sdk.Handler {
return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
dTx, ok := msg.(kvstoreTx)
dTx, ok := msg.(*kvstoreTx)
if !ok {
return nil, errors.New("KVStoreHandler should only receive kvstoreTx")
}
@ -126,3 +144,34 @@ func AppGenStateEmpty(_ *codec.LegacyAmino, _ types.GenesisDoc, _ []json.RawMess
appState = json.RawMessage(``)
return
}
// Manually write the handlers for this custom message
type MsgServer interface {
Test(ctx context.Context, msg *kvstoreTx) (*sdk.Result, error)
}
type MsgServerImpl struct {
capKeyMainStore *storetypes.KVStoreKey
}
func _Msg_Test_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(kvstoreTx)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).Test(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/kvstoreTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).Test(ctx, req.(*kvstoreTx))
}
return interceptor(ctx, in, info, handler)
}
func (m MsgServerImpl) Test(ctx context.Context, msg *kvstoreTx) (*sdk.Result, error) {
return KVStoreHandler(m.capKeyMainStore)(sdk.UnwrapSDKContext(ctx), msg)
}

View File

@ -16,50 +16,42 @@ type kvstoreTx struct {
}
// dummy implementation of proto.Message
func (msg kvstoreTx) Reset() {}
func (msg kvstoreTx) String() string { return "TODO" }
func (msg kvstoreTx) ProtoMessage() {}
func (msg *kvstoreTx) Reset() {}
func (msg *kvstoreTx) String() string { return "TODO" }
func (msg *kvstoreTx) ProtoMessage() {}
var (
_ sdk.Tx = kvstoreTx{}
_ sdk.Msg = kvstoreTx{}
_ sdk.Tx = &kvstoreTx{}
_ sdk.Msg = &kvstoreTx{}
)
func NewTx(key, value string) kvstoreTx {
func NewTx(key, value string) *kvstoreTx {
bytes := fmt.Sprintf("%s=%s", key, value)
return kvstoreTx{
return &kvstoreTx{
key: []byte(key),
value: []byte(value),
bytes: []byte(bytes),
}
}
func (tx kvstoreTx) Route() string {
return "kvstore"
}
func (tx kvstoreTx) Type() string {
func (tx *kvstoreTx) Type() string {
return "kvstore_tx"
}
func (tx kvstoreTx) GetMsgs() []sdk.Msg {
func (tx *kvstoreTx) GetMsgs() []sdk.Msg {
return []sdk.Msg{tx}
}
func (tx kvstoreTx) GetMemo() string {
return ""
}
func (tx kvstoreTx) GetSignBytes() []byte {
func (tx *kvstoreTx) GetSignBytes() []byte {
return tx.bytes
}
// Should the app be calling this? Or only handlers?
func (tx kvstoreTx) ValidateBasic() error {
func (tx *kvstoreTx) ValidateBasic() error {
return nil
}
func (tx kvstoreTx) GetSigners() []sdk.AccAddress {
func (tx *kvstoreTx) GetSigners() []sdk.AccAddress {
return nil
}
@ -71,10 +63,10 @@ func decodeTx(txBytes []byte) (sdk.Tx, error) {
split := bytes.Split(txBytes, []byte("="))
if len(split) == 1 { //nolint:gocritic
k := split[0]
tx = kvstoreTx{k, k, txBytes}
tx = &kvstoreTx{k, k, txBytes}
} else if len(split) == 2 {
k, v := split[0], split[1]
tx = kvstoreTx{k, v, txBytes}
tx = &kvstoreTx{k, v, txBytes}
} else {
return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "too many '='")
}

View File

@ -1,9 +1,10 @@
package cachekv
import (
db "github.com/tendermint/tm-db"
"strconv"
"testing"
db "github.com/tendermint/tm-db"
)
func BenchmarkLargeUnsortedMisses(b *testing.B) {

View File

@ -59,7 +59,6 @@ type GenTxTestSuite struct {
}
func (suite *GenTxTestSuite) SetupTest() {
encCfg := moduletestutil.TestEncodingConfig{}
app, err := simtestutil.SetupWithConfiguration(

View File

@ -11,57 +11,6 @@ import (
gomock "github.com/golang/mock/gomock"
)
// MockRouter is a mock of Router interface.
type MockRouter struct {
ctrl *gomock.Controller
recorder *MockRouterMockRecorder
}
// MockRouterMockRecorder is the mock recorder for MockRouter.
type MockRouterMockRecorder struct {
mock *MockRouter
}
// NewMockRouter creates a new mock instance.
func NewMockRouter(ctrl *gomock.Controller) *MockRouter {
mock := &MockRouter{ctrl: ctrl}
mock.recorder = &MockRouterMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockRouter) EXPECT() *MockRouterMockRecorder {
return m.recorder
}
// AddRoute mocks base method.
func (m *MockRouter) AddRoute(r types.Route) types.Router {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "AddRoute", r)
ret0, _ := ret[0].(types.Router)
return ret0
}
// AddRoute indicates an expected call of AddRoute.
func (mr *MockRouterMockRecorder) AddRoute(r interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddRoute", reflect.TypeOf((*MockRouter)(nil).AddRoute), r)
}
// Route mocks base method.
func (m *MockRouter) Route(ctx types.Context, path string) types.Handler {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Route", ctx, path)
ret0, _ := ret[0].(types.Handler)
return ret0
}
// Route indicates an expected call of Route.
func (mr *MockRouterMockRecorder) Route(ctx, path interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Route", reflect.TypeOf((*MockRouter)(nil).Route), ctx, path)
}
// MockQueryRouter is a mock of QueryRouter interface.
type MockQueryRouter struct {
ctrl *gomock.Controller

View File

@ -189,9 +189,6 @@ func NewGenesisOnlyAppModule(amg AppModuleGenesis) AppModule {
// RegisterInvariants is a placeholder function register no invariants
func (GenesisOnlyAppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}
// Route empty module message route
func (GenesisOnlyAppModule) Route() sdk.Route { return sdk.Route{} }
// QuerierRoute returns an empty module querier route
func (GenesisOnlyAppModule) QuerierRoute() string { return "" }

View File

@ -2,7 +2,6 @@ package types
import (
"regexp"
"strings"
)
var (
@ -27,37 +26,6 @@ var (
IsNumeric = regexp.MustCompile(`^[0-9]+$`).MatchString
)
// Router provides handlers for each transaction type.
type Router interface {
AddRoute(r Route) Router
Route(ctx Context, path string) Handler
}
type Route struct {
path string
handler Handler
}
// NewRoute returns an instance of Route.
func NewRoute(p string, h Handler) Route {
return Route{path: strings.TrimSpace(p), handler: h}
}
// Path returns the path the route has assigned.
func (r Route) Path() string {
return r.path
}
// Handler returns the handler that handles the route.
func (r Route) Handler() Handler {
return r.handler
}
// Empty returns true only if both handler and path are not empty.
func (r Route) Empty() bool {
return r.handler == nil || r.path == ""
}
// QueryRouter provides queryables for each query path.
type QueryRouter interface {
AddRoute(r string, h Querier) QueryRouter

View File

@ -1,58 +0,0 @@
package types_test
import (
"testing"
"github.com/stretchr/testify/suite"
sdk "github.com/cosmos/cosmos-sdk/types"
)
type routeTestSuite struct {
suite.Suite
}
func TestRouteTestSuite(t *testing.T) {
suite.Run(t, new(routeTestSuite))
}
func (s *routeTestSuite) SetupSuite() {
s.T().Parallel()
}
func (s *routeTestSuite) TestNilRoute() {
tests := []struct {
name string
route sdk.Route
expected bool
}{
{
name: "all empty",
route: sdk.NewRoute("", nil),
expected: true,
},
{
name: "only path",
route: sdk.NewRoute("some", nil),
expected: true,
},
{
name: "only handler",
route: sdk.NewRoute("", func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
return nil, nil
}),
expected: true,
},
{
name: "correct route",
route: sdk.NewRoute("some", func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
return nil, nil
}),
expected: false,
},
}
for _, tt := range tests {
s.Require().Equal(tt.expected, tt.route.Empty())
}
}

View File

@ -30,7 +30,8 @@ func genSequenceOfTxs(txGen client.TxConfig,
accNums []uint64,
initSeqNums []uint64,
numToGenerate int,
priv ...cryptotypes.PrivKey) ([]sdk.Tx, error) {
priv ...cryptotypes.PrivKey,
) ([]sdk.Tx, error) {
txs := make([]sdk.Tx, numToGenerate)
var err error
for i := 0; i < numToGenerate; i++ {
@ -58,7 +59,7 @@ func genSequenceOfTxs(txGen client.TxConfig,
}
func BenchmarkOneBankSendTxPerBlock(b *testing.B) {
//b.Skip("Skipping benchmark with buggy code reported at https://github.com/cosmos/cosmos-sdk/issues/10023")
// b.Skip("Skipping benchmark with buggy code reported at https://github.com/cosmos/cosmos-sdk/issues/10023")
b.ReportAllocs()
// Add an account at genesis
@ -103,7 +104,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) {
}
func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) {
//b.Skip("Skipping benchmark with buggy code reported at https://github.com/cosmos/cosmos-sdk/issues/10023")
// b.Skip("Skipping benchmark with buggy code reported at https://github.com/cosmos/cosmos-sdk/issues/10023")
b.ReportAllocs()
// Add an account at genesis

View File

@ -36,7 +36,6 @@ type SimTestSuite struct {
}
func (suite *SimTestSuite) SetupTest() {
var (
appBuilder *runtime.AppBuilder
err error

View File

@ -467,7 +467,6 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) {
bankKeeper.EXPECT().SendCoinsFromModuleToAccount(ctx, disttypes.ModuleName, addr, expCommission)
_, err = distrKeeper.WithdrawValidatorCommission(ctx, valAddr)
require.Nil(t, err)
}
func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) {

View File

@ -1,9 +1,14 @@
package genutil_test
import (
"cosmossdk.io/math"
"encoding/json"
"fmt"
"math/rand"
"testing"
"time"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/testutil"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
@ -19,9 +24,6 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
abci "github.com/tendermint/tendermint/abci/types"
"math/rand"
"testing"
"time"
)
var (
@ -90,7 +92,6 @@ func (suite *GenTxTestSuite) setAccountBalance(balances []banktypes.Balance) jso
}
for _, balance := range balances {
bankGenesisState.Balances = append(bankGenesisState.Balances, balance)
}
for _, balance := range bankGenesisState.Balances {
bankGenesisState.Supply.Add(balance.Coins...)
@ -261,7 +262,6 @@ func (suite *GenTxTestSuite) TestDeliverGenTxs() {
genTxs[0] = tx
},
func(_ abci.RequestDeliverTx) abci.ResponseDeliverTx {
return abci.ResponseDeliverTx{
Code: sdkerrors.ErrNoSignatures.ABCICode(),
GasWanted: int64(10000000),

View File

@ -10,7 +10,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
"github.com/cosmos/cosmos-sdk/x/gov"
v1gov "github.com/cosmos/cosmos-sdk/x/gov/migrations/v1"
v1gov "github.com/cosmos/cosmos-sdk/x/gov/migrations/v1"
v3gov "github.com/cosmos/cosmos-sdk/x/gov/migrations/v3"
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"