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 }