Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove all auth dependency from baseapp #20066

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2,078 changes: 153 additions & 1,925 deletions baseapp/abci_test.go

Large diffs are not rendered by default.

456 changes: 8 additions & 448 deletions baseapp/baseapp_test.go

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion baseapp/grpcrouter_test.go
Expand Up @@ -17,6 +17,8 @@ import (
"github.com/cosmos/cosmos-sdk/testutil/testdata"
testdata_pulsar "github.com/cosmos/cosmos-sdk/testutil/testdata/testpb"
sdk "github.com/cosmos/cosmos-sdk/types"
baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil"

)

func TestGRPCQueryRouter(t *testing.T) {
Expand Down Expand Up @@ -102,7 +104,7 @@ func TestRegisterQueryServiceTwice(t *testing.T) {
var appBuilder *runtime.AppBuilder
err := depinject.Inject(
depinject.Configs(
makeMinimalConfig(),
baseapptestutil.MakeMinimalConfig(),
depinject.Supply(log.NewTestLogger(t)),
),
&appBuilder)
Expand Down
95 changes: 4 additions & 91 deletions baseapp/msg_service_router_test.go
@@ -1,24 +1,18 @@
package baseapp_test

import (
"context"
"testing"

abci "github.com/cometbft/cometbft/abci/types"
dbm "github.com/cosmos/cosmos-db"
"github.com/stretchr/testify/require"

"cosmossdk.io/depinject"
"cosmossdk.io/log"
authsigning "cosmossdk.io/x/auth/signing"
authtx "cosmossdk.io/x/auth/tx"

"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil"
)

func TestRegisterMsgService(t *testing.T) {
Expand All @@ -29,7 +23,7 @@ func TestRegisterMsgService(t *testing.T) {
)
err := depinject.Inject(
depinject.Configs(
makeMinimalConfig(),
baseapptestutil.MakeMinimalConfig(),
depinject.Supply(log.NewTestLogger(t)),
), &appBuilder, &registry)
require.NoError(t, err)
Expand Down Expand Up @@ -61,7 +55,7 @@ func TestRegisterMsgServiceTwice(t *testing.T) {
)
err := depinject.Inject(
depinject.Configs(
makeMinimalConfig(),
baseapptestutil.MakeMinimalConfig(),
depinject.Supply(log.NewTestLogger(t)),
), &appBuilder, &registry)
require.NoError(t, err)
Expand Down Expand Up @@ -94,7 +88,7 @@ func TestHybridHandlerByMsgName(t *testing.T) {
)
err := depinject.Inject(
depinject.Configs(
makeMinimalConfig(),
baseapptestutil.MakeMinimalConfig(),
depinject.Supply(log.NewTestLogger(t)),
), &appBuilder, &registry)
require.NoError(t, err)
Expand All @@ -120,84 +114,3 @@ func TestHybridHandlerByMsgName(t *testing.T) {
require.NoError(t, err)
require.Equal(t, resp.Name, "Spot")
}

func TestMsgService(t *testing.T) {
priv, _, _ := testdata.KeyTestPubAddr()

var (
appBuilder *runtime.AppBuilder
cdc codec.Codec
interfaceRegistry codectypes.InterfaceRegistry
)
err := depinject.Inject(
depinject.Configs(
makeMinimalConfig(),
depinject.Supply(log.NewNopLogger()),
), &appBuilder, &cdc, &interfaceRegistry)
require.NoError(t, err)
app := appBuilder.Build(dbm.NewMemDB(), nil)
signingCtx := interfaceRegistry.SigningContext()

// patch in TxConfig instead of using an output from x/auth/tx
txConfig := authtx.NewTxConfig(cdc, signingCtx.AddressCodec(), signingCtx.ValidatorAddressCodec(), authtx.DefaultSignModes)
// set the TxDecoder in the BaseApp for minimal tx simulations
app.SetTxDecoder(txConfig.TxDecoder())

defaultSignMode, err := authsigning.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode())
require.NoError(t, err)

testdata.RegisterInterfaces(interfaceRegistry)
testdata.RegisterMsgServer(
app.MsgServiceRouter(),
testdata.MsgServerImpl{},
)
_, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{Height: 1})
require.NoError(t, err)

_, _, addr := testdata.KeyTestPubAddr()
msg := testdata.MsgCreateDog{
Dog: &testdata.Dog{Name: "Spot"},
Owner: addr.String(),
}

txBuilder := txConfig.NewTxBuilder()
txBuilder.SetFeeAmount(testdata.NewTestFeeAmount())
txBuilder.SetGasLimit(testdata.NewTestGasLimit())
err = txBuilder.SetMsgs(&msg)
require.NoError(t, err)

// First round: we gather all the signer infos. We use the "set empty
// signature" hack to do that.
sigV2 := signing.SignatureV2{
PubKey: priv.PubKey(),
Data: &signing.SingleSignatureData{
SignMode: defaultSignMode,
Signature: nil,
},
Sequence: 0,
}

err = txBuilder.SetSignatures(sigV2)
require.NoError(t, err)

// Second round: all signer infos are set, so each signer can sign.
signerData := authsigning.SignerData{
ChainID: "test",
AccountNumber: 0,
Sequence: 0,
PubKey: priv.PubKey(),
}
sigV2, err = tx.SignWithPrivKey(
context.TODO(), defaultSignMode, signerData,
txBuilder, priv, txConfig, 0)
require.NoError(t, err)
err = txBuilder.SetSignatures(sigV2)
require.NoError(t, err)

// Send the tx to the app
txBytes, err := txConfig.TxEncoder()(txBuilder.GetTx())
require.NoError(t, err)
res, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{Height: 1, Txs: [][]byte{txBytes}})
require.NoError(t, err)
require.Equal(t, abci.CodeTypeOK, res.TxResults[0].Code, "res=%+v", res)
}
59 changes: 59 additions & 0 deletions baseapp/testutil/mock/param_store.go
@@ -0,0 +1,59 @@
package mock

import (
"context"
"encoding/json"
"errors"


cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
dbm "github.com/cosmos/cosmos-db"



"github.com/cosmos/cosmos-sdk/baseapp"

)

var ParamStoreKey = []byte("paramstore")

type ParamStore struct {
db *dbm.MemDB
}

var _ baseapp.ParamStore = (*ParamStore)(nil)

func NewMockParamStore(db *dbm.MemDB) *ParamStore {
return &ParamStore{db: db}
}

func (ps ParamStore) Set(_ context.Context, value cmtproto.ConsensusParams) error {
bz, err := json.Marshal(value)
if err != nil {
return err
}

return ps.db.Set(ParamStoreKey, bz)
}

func (ps ParamStore) Has(_ context.Context) (bool, error) {
return ps.db.Has(ParamStoreKey)
}

func (ps ParamStore) Get(_ context.Context) (cmtproto.ConsensusParams, error) {
bz, err := ps.db.Get(ParamStoreKey)
if err != nil {
return cmtproto.ConsensusParams{}, err
}

if len(bz) == 0 {
return cmtproto.ConsensusParams{}, errors.New("params not found")
}

var params cmtproto.ConsensusParams
if err := json.Unmarshal(bz, &params); err != nil {
return cmtproto.ConsensusParams{}, err
}

return params, nil
}
70 changes: 70 additions & 0 deletions baseapp/testutil/utils.go
@@ -0,0 +1,70 @@
package testutil

import (

"reflect"
"testing"
"unsafe"


"github.com/stretchr/testify/require"

runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1"
appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1"
"cosmossdk.io/core/address"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
storetypes "cosmossdk.io/store/types"

"github.com/cosmos/cosmos-sdk/baseapp"

addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/mempool"
)



func MakeMinimalConfig() depinject.Config {
var (
mempoolOpt = baseapp.SetMempool(mempool.NewSenderNonceMempool())
addressCodec = func() address.Codec { return addresscodec.NewBech32Codec("cosmos") }
validatorAddressCodec = func() address.ValidatorAddressCodec { return addresscodec.NewBech32Codec("cosmosvaloper") }
consensusAddressCodec = func() address.ConsensusAddressCodec { return addresscodec.NewBech32Codec("cosmosvalcons") }
)

return depinject.Configs(
depinject.Supply(mempoolOpt, addressCodec, validatorAddressCodec, consensusAddressCodec),
appconfig.Compose(&appv1alpha1.Config{
Modules: []*appv1alpha1.ModuleConfig{
{
Name: "runtime",
Config: appconfig.WrapAny(&runtimev1alpha1.Module{
AppName: "BaseAppApp",
}),
},
},
}))
}

func TestLoadVersionHelper(t *testing.T, app *baseapp.BaseApp, expectedHeight int64, expectedID storetypes.CommitID) {
t.Helper()
lastHeight := app.LastBlockHeight()
lastID := app.LastCommitID()
require.Equal(t, expectedHeight, lastHeight)
require.Equal(t, expectedID, lastID)
}

func GetCheckStateCtx(app *baseapp.BaseApp) sdk.Context {
v := reflect.ValueOf(app).Elem()
f := v.FieldByName("checkState")
rf := reflect.NewAt(f.Type(), unsafe.Pointer(f.UnsafeAddr())).Elem()

Check warning

Code scanning / Golang security checks by gosec

Use of unsafe calls should be audited Warning

Use of unsafe calls should be audited
return rf.MethodByName("Context").Call(nil)[0].Interface().(sdk.Context)
}

func GetFinalizeBlockStateCtx(app *baseapp.BaseApp) sdk.Context {
v := reflect.ValueOf(app).Elem()
f := v.FieldByName("finalizeBlockState")
rf := reflect.NewAt(f.Type(), unsafe.Pointer(f.UnsafeAddr())).Elem()

Check warning

Code scanning / Golang security checks by gosec

Use of unsafe calls should be audited Warning

Use of unsafe calls should be audited
return rf.MethodByName("Context").Call(nil)[0].Interface().(sdk.Context)
}