github.com/Finschia/finschia-sdk@v0.48.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  		tc := tc
   100  
   101  		dir := s.T().TempDir()
   102  		genTxFile := filepath.Join(dir, "myTx")
   103  		tc.args = append(tc.args, fmt.Sprintf("--%s=%s", flags.FlagOutputDocument, genTxFile))
   104  
   105  		s.Run(tc.name, func() {
   106  			cmd := cli.GenTxCmd(
   107  				simapp.ModuleBasics,
   108  				val.ClientCtx.TxConfig,
   109  				banktypes.GenesisBalancesIterator{},
   110  				val.ClientCtx.HomeDir)
   111  
   112  			out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
   113  
   114  			if tc.expError {
   115  				s.Require().Error(err)
   116  
   117  				_, err = os.Open(genTxFile)
   118  				s.Require().Error(err)
   119  			} else {
   120  				s.Require().NoError(err, "test: %s\noutput: %s", tc.name, out.String())
   121  
   122  				// validate generated transaction.
   123  				open, err := os.Open(genTxFile)
   124  				s.Require().NoError(err)
   125  
   126  				all, err := io.ReadAll(open)
   127  				s.Require().NoError(err)
   128  
   129  				tx, err := val.ClientCtx.TxConfig.TxJSONDecoder()(all)
   130  				s.Require().NoError(err)
   131  
   132  				msgs := tx.GetMsgs()
   133  				s.Require().Len(msgs, 1)
   134  
   135  				s.Require().Equal(sdk.MsgTypeURL(&types.MsgCreateValidator{}), sdk.MsgTypeURL(msgs[0]))
   136  				s.Require().True(val.Address.Equals(msgs[0].GetSigners()[0]))
   137  				s.Require().Equal(amount, msgs[0].(*types.MsgCreateValidator).Value)
   138  				s.Require().NoError(tx.ValidateBasic())
   139  			}
   140  		})
   141  	}
   142  }