github.com/Finschia/finschia-sdk@v0.49.1/x/genutil/client/testutil/suite.go (about)

     1  package testutil
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"path/filepath"
     8  
     9  	"github.com/stretchr/testify/suite"
    10  
    11  	"github.com/Finschia/finschia-sdk/client/flags"
    12  	"github.com/Finschia/finschia-sdk/simapp"
    13  	clitestutil "github.com/Finschia/finschia-sdk/testutil/cli"
    14  	"github.com/Finschia/finschia-sdk/testutil/network"
    15  	sdk "github.com/Finschia/finschia-sdk/types"
    16  	banktypes "github.com/Finschia/finschia-sdk/x/bank/types"
    17  	"github.com/Finschia/finschia-sdk/x/genutil/client/cli"
    18  	stakingcli "github.com/Finschia/finschia-sdk/x/staking/client/cli"
    19  	"github.com/Finschia/finschia-sdk/x/staking/types"
    20  )
    21  
    22  type IntegrationTestSuite struct {
    23  	suite.Suite
    24  
    25  	cfg     network.Config
    26  	network *network.Network
    27  }
    28  
    29  func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite {
    30  	return &IntegrationTestSuite{cfg: cfg}
    31  }
    32  
    33  func (s *IntegrationTestSuite) SetupSuite() {
    34  	s.T().Log("setting up integration test suite")
    35  
    36  	s.network = network.New(s.T(), s.cfg)
    37  
    38  	_, err := s.network.WaitForHeight(1)
    39  	s.Require().NoError(err)
    40  }
    41  
    42  func (s *IntegrationTestSuite) TearDownSuite() {
    43  	s.T().Log("tearing down integration test suite")
    44  	s.network.Cleanup()
    45  }
    46  
    47  func (s *IntegrationTestSuite) TestGenTxCmd() {
    48  	val := s.network.Validators[0]
    49  	clientCtx := val.ClientCtx
    50  	amount := sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(12))
    51  
    52  	tests := []struct {
    53  		name     string
    54  		args     []string
    55  		expError bool
    56  	}{
    57  		{
    58  			name: "invalid commission rate returns error",
    59  			args: []string{
    60  				fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
    61  				fmt.Sprintf("--%s=1", stakingcli.FlagCommissionRate),
    62  				val.Moniker,
    63  				amount.String(),
    64  			},
    65  			expError: true,
    66  		},
    67  		{
    68  			name: "valid gentx",
    69  			args: []string{
    70  				fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
    71  				val.Moniker,
    72  				amount.String(),
    73  			},
    74  			expError: false,
    75  		},
    76  		{
    77  			name: "invalid pubkey",
    78  			args: []string{
    79  				fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
    80  				fmt.Sprintf("--%s={\"key\":\"BOIkjkFruMpfOFC9oNPhiJGfmY2pHF/gwHdLDLnrnS0=\"}", stakingcli.FlagPubKey),
    81  				val.Moniker,
    82  				amount.String(),
    83  			},
    84  			expError: true,
    85  		},
    86  		{
    87  			name: "valid pubkey flag",
    88  			args: []string{
    89  				fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
    90  				fmt.Sprintf("--%s={\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"BOIkjkFruMpfOFC9oNPhiJGfmY2pHF/gwHdLDLnrnS0=\"}", stakingcli.FlagPubKey),
    91  				val.Moniker,
    92  				amount.String(),
    93  			},
    94  			expError: false,
    95  		},
    96  	}
    97  
    98  	for _, tc := range tests {
    99  		dir := s.T().TempDir()
   100  		genTxFile := filepath.Join(dir, "myTx")
   101  		tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagOutputDocument, genTxFile))
   102  
   103  		s.Run(tc.name, func() {
   104  			cmd := cli.GenTxCmd(
   105  				simapp.ModuleBasics,
   106  				val.ClientCtx.TxConfig,
   107  				banktypes.GenesisBalancesIterator{},
   108  				val.ClientCtx.HomeDir)
   109  
   110  			out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
   111  
   112  			if tc.expError {
   113  				s.Require().Error(err)
   114  
   115  				_, err = os.Open(genTxFile)
   116  				s.Require().Error(err)
   117  			} else {
   118  				s.Require().NoError(err, "test: %s\noutput: %s", tc.name, out.String())
   119  
   120  				// validate generated transaction.
   121  				open, err := os.Open(genTxFile)
   122  				s.Require().NoError(err)
   123  
   124  				all, err := io.ReadAll(open)
   125  				s.Require().NoError(err)
   126  
   127  				tx, err := val.ClientCtx.TxConfig.TxJSONDecoder()(all)
   128  				s.Require().NoError(err)
   129  
   130  				msgs := tx.GetMsgs()
   131  				s.Require().Len(msgs, 1)
   132  
   133  				s.Require().Equal(sdk.MsgTypeURL(&types.MsgCreateValidator{}), sdk.MsgTypeURL(msgs[0]))
   134  				s.Require().True(val.Address.Equals(msgs[0].GetSigners()[0]))
   135  				s.Require().Equal(amount, msgs[0].(*types.MsgCreateValidator).Value)
   136  				s.Require().NoError(tx.ValidateBasic())
   137  			}
   138  		})
   139  	}
   140  }