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 }