test(genutil): remove duplicate tests from genutil integration tests (#16034)

This commit is contained in:
Likhita Polavarapu 2023-05-04 20:30:10 +05:30 committed by GitHub
parent 131f382d56
commit 96730a5f2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 332 deletions

View File

@ -1,322 +0,0 @@
package genutil_test
import (
"encoding/json"
"fmt"
"math/rand"
"testing"
"time"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/math"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/require"
"gotest.tools/v3/assert"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/testutil/configurator"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
_ "github.com/cosmos/cosmos-sdk/x/auth"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
_ "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
_ "github.com/cosmos/cosmos-sdk/x/bank"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
"github.com/cosmos/cosmos-sdk/x/bank/testutil"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
_ "github.com/cosmos/cosmos-sdk/x/consensus"
"github.com/cosmos/cosmos-sdk/x/genutil"
"github.com/cosmos/cosmos-sdk/x/genutil/types"
_ "github.com/cosmos/cosmos-sdk/x/params"
_ "github.com/cosmos/cosmos-sdk/x/staking"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)
var (
priv1 = secp256k1.GenPrivKey()
priv2 = secp256k1.GenPrivKey()
pk1 = priv1.PubKey()
pk2 = priv2.PubKey()
addr1 = sdk.AccAddress(pk1.Address())
addr2 = sdk.AccAddress(pk2.Address())
desc = stakingtypes.NewDescription("testname", "", "", "", "")
comm = stakingtypes.CommissionRates{}
)
type fixture struct {
ctx sdk.Context
encodingConfig moduletestutil.TestEncodingConfig
msg1, msg2 *stakingtypes.MsgCreateValidator
accountKeeper authkeeper.AccountKeeper
bankKeeper bankkeeper.Keeper
stakingKeeper *stakingkeeper.Keeper
baseApp *baseapp.BaseApp
}
func initFixture(t assert.TestingT) *fixture {
f := &fixture{}
encCfg := moduletestutil.TestEncodingConfig{}
app, err := simtestutil.SetupWithConfiguration(
depinject.Configs(
configurator.NewAppConfig(
configurator.BankModule(),
configurator.TxModule(),
configurator.StakingModule(),
configurator.ParamsModule(),
configurator.ConsensusModule(),
configurator.AuthModule(),
),
depinject.Supply(log.NewNopLogger()),
),
simtestutil.DefaultStartUpConfig(),
&encCfg.InterfaceRegistry, &encCfg.Codec, &encCfg.TxConfig, &encCfg.Amino,
&f.accountKeeper, &f.bankKeeper, &f.stakingKeeper)
assert.NilError(t, err)
f.ctx = app.BaseApp.NewContext(false, cmtproto.Header{})
f.encodingConfig = encCfg
f.baseApp = app.BaseApp
amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50)
one := math.OneInt()
f.msg1, err = stakingtypes.NewMsgCreateValidator(
sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one)
assert.NilError(t, err)
f.msg2, err = stakingtypes.NewMsgCreateValidator(
sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one)
assert.NilError(t, err)
return f
}
func setAccountBalance(t *testing.T, f *fixture, addr sdk.AccAddress, amount int64) json.RawMessage {
acc := f.accountKeeper.NewAccountWithAddress(f.ctx, addr)
f.accountKeeper.SetAccount(f.ctx, acc)
err := testutil.FundAccount(f.ctx, f.bankKeeper, addr, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, amount)})
assert.NilError(t, err)
bankGenesisState := f.bankKeeper.ExportGenesis(f.ctx)
bankGenesis, err := f.encodingConfig.Amino.MarshalJSON(bankGenesisState) // TODO switch this to use Marshaler
assert.NilError(t, err)
return bankGenesis
}
func TestSetGenTxsInAppGenesisState(t *testing.T) {
t.Parallel()
f := initFixture(t)
var (
txBuilder = f.encodingConfig.TxConfig.NewTxBuilder()
genTxs []sdk.Tx
)
testCases := []struct {
msg string
malleate func()
expPass bool
}{
{
"one genesis transaction",
func() {
err := txBuilder.SetMsgs(f.msg1)
assert.NilError(t, err)
tx := txBuilder.GetTx()
genTxs = []sdk.Tx{tx}
},
true,
},
{
"two genesis transactions",
func() {
err := txBuilder.SetMsgs(f.msg1, f.msg2)
assert.NilError(t, err)
tx := txBuilder.GetTx()
genTxs = []sdk.Tx{tx}
},
true,
},
}
for _, tc := range testCases {
t.Run(fmt.Sprintf("Case %s", tc.msg), func(t *testing.T) {
initFixture(t)
cdc := f.encodingConfig.Codec
txJSONEncoder := f.encodingConfig.TxConfig.TxJSONEncoder()
tc.malleate()
appGenesisState, err := genutil.SetGenTxsInAppGenesisState(cdc, txJSONEncoder, make(map[string]json.RawMessage), genTxs)
assert.NilError(t, err)
assert.Assert(t, appGenesisState[types.ModuleName] != nil)
var genesisState types.GenesisState
err = cdc.UnmarshalJSON(appGenesisState[types.ModuleName], &genesisState)
assert.NilError(t, err)
assert.Assert(t, genesisState.GenTxs != nil)
})
}
}
func TestValidateAccountInGenesis(t *testing.T) {
t.Parallel()
f := initFixture(t)
var (
appGenesisState = make(map[string]json.RawMessage)
coins sdk.Coins
)
testCases := []struct {
msg string
malleate func()
expPass bool
expErrMsg string
}{
{
"account without balance in the genesis state",
func() {
coins = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}
},
false,
fmt.Sprintf("account %s does not have a balance in the genesis state", addr1),
},
{
"account without enough funds of default bond denom",
func() {
coins = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 50)}
appGenesisState[banktypes.ModuleName] = setAccountBalance(t, f, addr1, 25)
},
false,
fmt.Sprintf("account %s has a balance in genesis, but it only has 25stake available to stake, not 50stake", addr1),
},
{
"account with enough funds of default bond denom",
func() {
coins = sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)}
appGenesisState[banktypes.ModuleName] = setAccountBalance(t, f, addr1, 25)
},
true,
"",
},
}
for _, tc := range testCases {
t.Run(fmt.Sprintf("Case %s", tc.msg), func(t *testing.T) {
initFixture(t)
cdc := f.encodingConfig.Codec
f.stakingKeeper.SetParams(f.ctx, stakingtypes.DefaultParams())
stakingGenesisState := f.stakingKeeper.ExportGenesis(f.ctx)
assert.DeepEqual(t, stakingGenesisState.Params, stakingtypes.DefaultParams())
stakingGenesis, err := cdc.MarshalJSON(stakingGenesisState) // TODO switch this to use Marshaler
assert.NilError(t, err)
appGenesisState[stakingtypes.ModuleName] = stakingGenesis
tc.malleate()
err = genutil.ValidateAccountInGenesis(
appGenesisState, banktypes.GenesisBalancesIterator{},
addr1, coins, cdc,
)
if tc.expPass {
assert.NilError(t, err)
} else {
assert.ErrorContains(t, err, tc.expErrMsg)
}
})
}
}
func TestDeliverGenTxs(t *testing.T) {
t.Parallel()
f := initFixture(t)
var (
genTxs []json.RawMessage
txBuilder = f.encodingConfig.TxConfig.NewTxBuilder()
)
testCases := []struct {
msg string
malleate func()
expPass bool
expErrMsg string
}{
{
"no signature supplied",
func() {
err := txBuilder.SetMsgs(f.msg1)
assert.NilError(t, err)
genTxs = make([]json.RawMessage, 1)
tx, err := f.encodingConfig.TxConfig.TxJSONEncoder()(txBuilder.GetTx())
assert.NilError(t, err)
genTxs[0] = tx
},
false,
"no signatures supplied",
},
{
"success",
func() {
_ = setAccountBalance(t, f, addr1, 50)
_ = setAccountBalance(t, f, addr2, 1)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
msg := banktypes.NewMsgSend(addr1, addr2, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 1)})
tx, err := simtestutil.GenSignedMockTx(
r,
f.encodingConfig.TxConfig,
[]sdk.Msg{msg},
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 10)},
simtestutil.DefaultGenTxGas,
f.ctx.ChainID(),
[]uint64{7},
[]uint64{0},
priv1,
)
assert.NilError(t, err)
genTxs = make([]json.RawMessage, 1)
genTx, err := f.encodingConfig.TxConfig.TxJSONEncoder()(tx)
assert.NilError(t, err)
genTxs[0] = genTx
},
true,
"",
},
}
for _, tc := range testCases {
t.Run(fmt.Sprintf("Case %s", tc.msg), func(t *testing.T) {
initFixture(t)
tc.malleate()
if tc.expPass {
require.NotPanics(t, func() {
genutil.DeliverGenTxs(
f.ctx, genTxs, f.stakingKeeper, f.baseApp,
f.encodingConfig.TxConfig,
)
})
} else {
_, err := genutil.DeliverGenTxs(
f.ctx, genTxs, f.stakingKeeper, f.baseApp,
f.encodingConfig.TxConfig,
)
assert.ErrorContains(t, err, tc.expErrMsg)
}
})
}
}

View File

@ -143,17 +143,13 @@ func (suite *GenTxTestSuite) TestSetGenTxsInAppGenesisState() {
tc.malleate()
appGenesisState, err := genutil.SetGenTxsInAppGenesisState(cdc, txJSONEncoder, make(map[string]json.RawMessage), genTxs)
if tc.expPass {
suite.Require().NoError(err)
suite.Require().NotNil(appGenesisState[types.ModuleName])
suite.Require().NoError(err)
suite.Require().NotNil(appGenesisState[types.ModuleName])
var genesisState types.GenesisState
err := cdc.UnmarshalJSON(appGenesisState[types.ModuleName], &genesisState)
suite.Require().NoError(err)
suite.Require().NotNil(genesisState.GenTxs)
} else {
suite.Require().Error(err)
}
var genesisState types.GenesisState
err = cdc.UnmarshalJSON(appGenesisState[types.ModuleName], &genesisState)
suite.Require().NoError(err)
suite.Require().NotNil(genesisState.GenTxs)
})
}
}