Skip to content

Commit

Permalink
test(testutil): more tests + better var names
Browse files Browse the repository at this point in the history
  • Loading branch information
Unique-Divine committed Aug 2, 2023
1 parent cac831f commit 28191fe
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 44 deletions.
10 changes: 7 additions & 3 deletions x/common/testutil/cli/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ type (
Logger Logger
}

// Validator defines an in-process Tendermint validator node. Through this object,
// a client can make RPC and API calls and interact with any client command
// or handler.
// Validator defines an in-process Tendermint validator node. Through this
// object, a client can make RPC and API calls and interact with any client
// command or handler.
Validator struct {
AppConfig *serverconfig.Config
ClientCtx client.Context
Expand Down Expand Up @@ -116,6 +116,10 @@ type (

// RPCClient wraps most important rpc calls a client would make to
// listen for events, test if it also implements events.EventSwitch.
//
// RPCClient implementations in "github.com/cometbft/cometbft/rpc" v0.37.2:
// - rcp.HTTP
// - rpc.Local
RPCClient tmclient.Client

tmNode *node.Node
Expand Down
75 changes: 41 additions & 34 deletions x/common/testutil/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,22 @@ type ExecTxOption func(*execTxOptions)
func WithTxOptions(newOptions TxOptionChanges) ExecTxOption {
return func(options *execTxOptions) {
if newOptions.BroadcastMode != nil {
options.broadcastMode = *newOptions.BroadcastMode
options.BroadcastMode = *newOptions.BroadcastMode
}
if newOptions.CanFail != nil {
options.canFail = *newOptions.CanFail
options.CanFail = *newOptions.CanFail
}
if newOptions.Fees != nil {
options.fees = *newOptions.Fees
options.Fees = *newOptions.Fees
}
if newOptions.Gas != nil {
options.gas = *newOptions.Gas
options.Gas = *newOptions.Gas
}
if newOptions.KeyringBackend != nil {
options.keyringBackend = *newOptions.KeyringBackend
options.KeyringBackend = *newOptions.KeyringBackend
}
if newOptions.SkipConfirmation != nil {
options.skipConfirmation = *newOptions.SkipConfirmation
options.SkipConfirmation = *newOptions.SkipConfirmation
}
}
}
Expand All @@ -51,39 +51,44 @@ type TxOptionChanges struct {
}

type execTxOptions struct {
fees sdk.Coins
gas int64
skipConfirmation bool
broadcastMode string
canFail bool
keyringBackend string
BroadcastMode string
CanFail bool
Fees sdk.Coins
Gas int64
KeyringBackend string
SkipConfirmation bool
}

func ExecTx(network *Network, cmd *cobra.Command, txSender sdk.AccAddress, args []string, opt ...ExecTxOption) (*sdk.TxResponse, error) {
var DEFAULT_TX_OPTIONS = execTxOptions{
Fees: sdk.NewCoins(sdk.NewCoin(denoms.NIBI, sdk.NewInt(1000))),
Gas: 2000000,
SkipConfirmation: true,
BroadcastMode: flags.BroadcastSync,
CanFail: false,
KeyringBackend: keyring.BackendTest,
}

func ExecTx(
network *Network, cmd *cobra.Command, txSender sdk.AccAddress,
args []string, opts ...ExecTxOption,
) (*sdk.TxResponse, error) {
if len(network.Validators) == 0 {
return nil, fmt.Errorf("invalid network")
}

args = append(args, fmt.Sprintf("--%s=%s", flags.FlagFrom, txSender))

options := execTxOptions{
fees: sdk.NewCoins(sdk.NewCoin(denoms.NIBI, sdk.NewInt(1000))),
gas: 2000000,
skipConfirmation: true,
broadcastMode: flags.BroadcastSync,
canFail: false,
keyringBackend: keyring.BackendTest,
}
options := DEFAULT_TX_OPTIONS

for _, o := range opt {
o(&options)
for _, opt := range opts {
opt(&options)
}

args = append(args, fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, options.broadcastMode))
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagFees, options.fees))
args = append(args, fmt.Sprintf("--%s=%d", flags.FlagGas, options.gas))
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, options.keyringBackend))
switch options.skipConfirmation {
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, options.BroadcastMode))
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagFees, options.Fees))
args = append(args, fmt.Sprintf("--%s=%d", flags.FlagGas, options.Gas))
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, options.KeyringBackend))
switch options.SkipConfirmation {
case true:
args = append(args, fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation))
case false:
Expand All @@ -109,7 +114,7 @@ func ExecTx(network *Network, cmd *cobra.Command, txSender sdk.AccAddress, args
return nil, fmt.Errorf("failed to query tx: %w", err)
}

if options.canFail {
if options.CanFail {
return resp, nil
}

Expand All @@ -120,14 +125,16 @@ func ExecTx(network *Network, cmd *cobra.Command, txSender sdk.AccAddress, args
return resp, nil
}

func (n *Network) SendTx(addr sdk.AccAddress, msgs ...sdk.Msg) (*sdk.TxResponse, error) {
cfg := n.Config
kb, info, err := n.keyBaseAndInfoForAddr(addr)
func (chain *Network) SendTx(
addr sdk.AccAddress, msgs ...sdk.Msg,
) (*sdk.TxResponse, error) {
cfg := chain.Config
kb, info, err := chain.keyBaseAndInfoForAddr(addr)
if err != nil {
return nil, err
}

rpc := n.Validators[0].RPCClient
rpc := chain.Validators[0].RPCClient
txBuilder := cfg.TxConfig.NewTxBuilder()
err = txBuilder.SetMsgs(msgs...)
if err != nil {
Expand All @@ -137,7 +144,7 @@ func (n *Network) SendTx(addr sdk.AccAddress, msgs ...sdk.Msg) (*sdk.TxResponse,
txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(cfg.BondDenom, sdk.NewInt(1000))))
txBuilder.SetGasLimit(uint64(1 * common.TO_MICRO))

acc, err := cfg.AccountRetriever.GetAccount(n.Validators[0].ClientCtx, addr)
acc, err := cfg.AccountRetriever.GetAccount(chain.Validators[0].ClientCtx, addr)
if err != nil {
return nil, err
}
Expand Down
33 changes: 26 additions & 7 deletions x/common/testutil/cli/tx_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cli_test

import (
"testing"

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

"github.com/NibiruChain/nibiru/x/common/denoms"
Expand Down Expand Up @@ -29,17 +31,34 @@ func (s *IntegrationTestSuite) TestExecTx() {
toAddr := testutil.AccAddress()
sendCoin := sdk.NewCoin(denoms.NIBI, sdk.NewInt(69))
args := []string{fromAddr.String(), toAddr.String(), sendCoin.String()}

txResp, err := cli.ExecTx(s.network, bankcli.NewSendTxCmd(), fromAddr, args)
s.NoError(err)
s.EqualValues(0, txResp.Code)

// test tx option changes
canFail := true
opts := cli.WithTxOptions(cli.TxOptionChanges{CanFail: &canFail})
txResp, err = cli.ExecTx(s.network, bankcli.NewSendTxCmd(), fromAddr, args, opts)
s.NoError(err)
s.EqualValues(0, txResp.Code)
s.T().Run("test tx option changes", func(t *testing.T) {
defaultOpts := cli.DEFAULT_TX_OPTIONS
opts := cli.WithTxOptions(cli.TxOptionChanges{
BroadcastMode: &defaultOpts.BroadcastMode,
CanFail: &defaultOpts.CanFail,
Fees: &defaultOpts.Fees,
Gas: &defaultOpts.Gas,
KeyringBackend: &defaultOpts.KeyringBackend,
SkipConfirmation: &defaultOpts.SkipConfirmation,
})
txResp, err = cli.ExecTx(s.network, bankcli.NewSendTxCmd(), fromAddr, args, opts)
s.NoError(err)
s.EqualValues(0, txResp.Code)
})

s.T().Run("fail when validators are missing", func(t *testing.T) {
networkNoVals := new(cli.Network)
*networkNoVals = *s.network
networkNoVals.Validators = []*cli.Validator{}
_, err := cli.ExecTx(
networkNoVals, bankcli.NewTxCmd(), fromAddr, args)
s.Error(err)
s.Contains(err.Error(), "")
})
}

func (s *IntegrationTestSuite) TestFillWalletFromValidator() {
Expand Down

0 comments on commit 28191fe

Please sign in to comment.