From 3c65c3dacded18f2d0b9f607bc7f679feff6afad Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Fri, 23 Apr 2021 14:49:49 -0400 Subject: [PATCH] Make integration test suites reusable by apps (#6711) * WIP on refactoring new integration tests. * godocs * godocs * Fix ineff assign * Updates * Updates * fix test * refactor crisis, distr testsuites * fix import issue * refactor x/auth * refactor x/authz * refactor x/evidence * refactor x/feegrant * refactor x/genutil * refactor x/gov * refactor x/mint * refactor x/params * refactor x/{auth_vesting, slashing, staking} * fix lint * fix tests & lint * fix lint * fix tests * lint * lint * fix lint memory * add missing `norace` build flag * update feegrant cfg * fix lint Co-authored-by: atheesh Co-authored-by: atheeshp <59333759+atheeshp@users.noreply.github.com> --- x/auth/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 137 +++++++++--------- x/auth/vesting/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 31 ++-- x/authz/client/testutil/cli_test.go | 17 +++ .../{cli/query_test.go => testutil/query.go} | 9 +- .../client/{cli/tx_test.go => testutil/tx.go} | 73 ++++------ x/bank/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 107 ++++++++++---- x/crisis/client/testsuite/cli_test.go | 17 +++ .../{cli/cli_test.go => testsuite/suite.go} | 28 ++-- x/distribution/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 92 ++++++------ x/evidence/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 23 ++- x/feegrant/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 66 ++++----- x/genutil/client/testutil/cli_test.go | 17 +++ .../migrate_test.go => testutil/migrate.go} | 3 +- .../{cli/gentx_test.go => testutil/suite.go} | 17 +-- .../validate_genesis.go} | 3 +- x/gov/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 55 +++---- x/mint/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 32 ++-- x/params/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 19 +-- x/slashing/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 23 +-- x/staking/client/rest/grpc_query_test.go | 6 +- x/staking/client/testutil/cli_test.go | 17 +++ .../{cli/cli_test.go => testutil/suite.go} | 78 +++++----- 32 files changed, 616 insertions(+), 424 deletions(-) create mode 100644 x/auth/client/testutil/cli_test.go rename x/auth/client/{cli/cli_test.go => testutil/suite.go} (83%) create mode 100644 x/auth/vesting/client/testutil/cli_test.go rename x/auth/vesting/client/{cli/cli_test.go => testutil/suite.go} (93%) create mode 100644 x/authz/client/testutil/cli_test.go rename x/authz/client/{cli/query_test.go => testutil/query.go} (95%) rename x/authz/client/{cli/tx_test.go => testutil/tx.go} (93%) create mode 100644 x/bank/client/testutil/cli_test.go rename x/bank/client/{cli/cli_test.go => testutil/suite.go} (83%) create mode 100644 x/crisis/client/testsuite/cli_test.go rename x/crisis/client/{cli/cli_test.go => testsuite/suite.go} (89%) create mode 100644 x/distribution/client/testutil/cli_test.go rename x/distribution/client/{cli/cli_test.go => testutil/suite.go} (92%) create mode 100644 x/evidence/client/testutil/cli_test.go rename x/evidence/client/{cli/cli_test.go => testutil/suite.go} (81%) create mode 100644 x/feegrant/client/testutil/cli_test.go rename x/feegrant/client/{cli/cli_test.go => testutil/suite.go} (96%) create mode 100644 x/genutil/client/testutil/cli_test.go rename x/genutil/client/{cli/migrate_test.go => testutil/migrate.go} (98%) rename x/genutil/client/{cli/gentx_test.go => testutil/suite.go} (90%) rename x/genutil/client/{cli/validate_genesis_test.go => testutil/validate_genesis.go} (98%) create mode 100644 x/gov/client/testutil/cli_test.go rename x/gov/client/{cli/cli_test.go => testutil/suite.go} (94%) create mode 100644 x/mint/client/testutil/cli_test.go rename x/mint/client/{cli/cli_test.go => testutil/suite.go} (87%) create mode 100644 x/params/client/testutil/cli_test.go rename x/params/client/{cli/cli_test.go => testutil/suite.go} (86%) create mode 100644 x/slashing/client/testutil/cli_test.go rename x/slashing/client/{cli/cli_test.go => testutil/suite.go} (94%) create mode 100644 x/staking/client/testutil/cli_test.go rename x/staking/client/{cli/cli_test.go => testutil/suite.go} (97%) diff --git a/x/auth/client/testutil/cli_test.go b/x/auth/client/testutil/cli_test.go new file mode 100644 index 000000000..0a7a5cc25 --- /dev/null +++ b/x/auth/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 2 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/auth/client/cli/cli_test.go b/x/auth/client/testutil/suite.go similarity index 83% rename from x/auth/client/cli/cli_test.go rename to x/auth/client/testutil/suite.go index 15f95d92b..4c75d2b41 100644 --- a/x/auth/client/cli/cli_test.go +++ b/x/auth/client/testutil/suite.go @@ -1,6 +1,4 @@ -// +build norace - -package cli_test +package testutil import ( "context" @@ -31,7 +29,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx/signing" authcli "github.com/cosmos/cosmos-sdk/x/auth/client/cli" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" - authtest "github.com/cosmos/cosmos-sdk/x/auth/client/testutil" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -44,14 +41,14 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 2 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) kb := s.network.Validators[0].ClientCtx.Keyring _, _, err := kb.NewMnemonic("newAccount", keyring.English, sdk.FullFundraiserPath, keyring.DefaultBIP39Passphrase, hd.Secp256k1) @@ -88,14 +85,15 @@ func (s *IntegrationTestSuite) TestCLIValidateSignatures() { // write unsigned tx to file unsignedTx := testutil.WriteToNewTempFile(s.T(), res.String()) - res, err = authtest.TxSignExec(val.ClientCtx, val.Address, unsignedTx.Name()) + res, err = TxSignExec(val.ClientCtx, val.Address, unsignedTx.Name()) s.Require().NoError(err) signedTx, err := val.ClientCtx.TxConfig.TxJSONDecoder()(res.Bytes()) s.Require().NoError(err) signedTxFile := testutil.WriteToNewTempFile(s.T(), res.String()) txBuilder, err := val.ClientCtx.TxConfig.WrapTxBuilder(signedTx) - res, err = authtest.TxValidateSignaturesExec(val.ClientCtx, signedTxFile.Name()) + s.Require().NoError(err) + _, err = TxValidateSignaturesExec(val.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) txBuilder.SetMemo("MODIFIED TX") @@ -104,7 +102,7 @@ func (s *IntegrationTestSuite) TestCLIValidateSignatures() { modifiedTxFile := testutil.WriteToNewTempFile(s.T(), string(bz)) - res, err = authtest.TxValidateSignaturesExec(val.ClientCtx, modifiedTxFile.Name()) + _, err = TxValidateSignaturesExec(val.ClientCtx, modifiedTxFile.Name()) s.Require().EqualError(err, "signatures validation failed") } @@ -123,30 +121,30 @@ func (s *IntegrationTestSuite) TestCLISignBatch() { val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) // sign-batch file - offline is set but account-number and sequence are not - res, err := authtest.TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--offline") + _, err = TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--offline") s.Require().EqualError(err, "required flag(s) \"account-number\", \"sequence\" not set") // sign-batch file - res, err = authtest.TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID)) + res, err := TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID)) s.Require().NoError(err) s.Require().Equal(3, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // sign-batch file - res, err = authtest.TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--signature-only") + res, err = TxSignBatchExec(val.ClientCtx, val.Address, outputFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--signature-only") s.Require().NoError(err) s.Require().Equal(3, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // Sign batch malformed tx file. malformedFile := testutil.WriteToNewTempFile(s.T(), fmt.Sprintf("%smalformed", generatedStd)) - res, err = authtest.TxSignBatchExec(val.ClientCtx, val.Address, malformedFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID)) + _, err = TxSignBatchExec(val.ClientCtx, val.Address, malformedFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID)) s.Require().Error(err) // Sign batch malformed tx file signature only. - res, err = authtest.TxSignBatchExec(val.ClientCtx, val.Address, malformedFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--signature-only") + _, err = TxSignBatchExec(val.ClientCtx, val.Address, malformedFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--signature-only") s.Require().Error(err) } -func (s *IntegrationTestSuite) TestCLISign_AminoJSON() { +func (s *IntegrationTestSuite) TestCLISignAminoJSON() { require := s.Require() val1 := s.network.Validators[0] txCfg := val1.ClientCtx.TxConfig @@ -168,13 +166,13 @@ func (s *IntegrationTestSuite) TestCLISign_AminoJSON() { require.NoError(err) // query account info - queryResJSON, err := authtest.QueryAccountExec(val1.ClientCtx, val1.Address) + queryResJSON, err := QueryAccountExec(val1.ClientCtx, val1.Address) require.NoError(err) var account authtypes.AccountI require.NoError(val1.ClientCtx.JSONMarshaler.UnmarshalInterfaceJSON(queryResJSON.Bytes(), &account)) /**** test signature-only ****/ - res, err := authtest.TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, + res, err := TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, sigOnlyFlag, signModeAminoFlag) require.NoError(err) checkSignatures(require, txCfg, res.Bytes(), valInfo.GetPubKey()) @@ -184,7 +182,7 @@ func (s *IntegrationTestSuite) TestCLISign_AminoJSON() { require.Equal(account.GetSequence(), sigs[0].Sequence) /**** test full output ****/ - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, signModeAminoFlag) + res, err = TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, signModeAminoFlag) require.NoError(err) // txCfg.UnmarshalSignatureJSON can't unmarshal a fragment of the signature, so we create this structure. @@ -199,14 +197,14 @@ func (s *IntegrationTestSuite) TestCLISign_AminoJSON() { /**** test file output ****/ filenameSigned := filepath.Join(s.T().TempDir(), "test_sign_out.json") fileFlag := fmt.Sprintf("--%s=%s", flags.FlagOutputDocument, filenameSigned) - _, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, fileFlag, signModeAminoFlag) + _, err = TxSignExec(val1.ClientCtx, val1.Address, fileUnsigned.Name(), chainFlag, fileFlag, signModeAminoFlag) require.NoError(err) fContent, err := ioutil.ReadFile(filenameSigned) require.NoError(err) require.Equal(res.String(), string(fContent)) /**** try to append to the previously signed transaction ****/ - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, + res, err = TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, sigOnlyFlag, signModeAminoFlag) require.NoError(err) checkSignatures(require, txCfg, res.Bytes(), valInfo.GetPubKey(), valInfo.GetPubKey()) @@ -217,12 +215,13 @@ func (s *IntegrationTestSuite) TestCLISign_AminoJSON() { // account. Changing the file is too much hacking, because TxDecoder returns sdk.Tx, which doesn't // provide functionality to check / manage `auth_info`. // Cases with different keys are are covered in unit tests of `tx.Sign`. - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, + res, err = TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, sigOnlyFlag, "--overwrite", signModeAminoFlag) + require.NoError(err) checkSignatures(require, txCfg, res.Bytes(), valInfo.GetPubKey()) /**** test flagAmino ****/ - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, + res, err = TxSignExec(val1.ClientCtx, val1.Address, filenameSigned, chainFlag, "--amino=true", signModeAminoFlag) require.NoError(err) @@ -393,23 +392,23 @@ func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { unsignedTxFile := testutil.WriteToNewTempFile(s.T(), finalGeneratedTx.String()) // Test validate-signatures - res, err := authtest.TxValidateSignaturesExec(val1.ClientCtx, unsignedTxFile.Name()) + res, err := TxValidateSignaturesExec(val1.ClientCtx, unsignedTxFile.Name()) s.Require().EqualError(err, "signatures validation failed") s.Require().True(strings.Contains(res.String(), fmt.Sprintf("Signers:\n 0: %v\n\nSignatures:\n\n", val1.Address.String()))) // Test sign // Does not work in offline mode - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name(), "--offline") + _, err = TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name(), "--offline") s.Require().EqualError(err, "required flag(s) \"account-number\", \"sequence\" not set") // But works offline if we set account number and sequence val1.ClientCtx.HomeDir = strings.Replace(val1.ClientCtx.HomeDir, "simd", "simcli", 1) - res, err = authtest.TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name(), "--offline", "--account-number", "1", "--sequence", "1") + _, err = TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name(), "--offline", "--account-number", "1", "--sequence", "1") s.Require().NoError(err) // Sign transaction - signedTx, err := authtest.TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name()) + signedTx, err := TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name()) s.Require().NoError(err) signedFinalTx, err := txCfg.TxJSONDecoder()(signedTx.Bytes()) s.Require().NoError(err) @@ -425,7 +424,7 @@ func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx.String()) // validate Signature - res, err = authtest.TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) + res, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) s.Require().True(strings.Contains(res.String(), "[OK]")) @@ -440,14 +439,14 @@ func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { // Test broadcast // Does not work in offline mode - res, err = authtest.TxBroadcastExec(val1.ClientCtx, signedTxFile.Name(), "--offline") + _, err = TxBroadcastExec(val1.ClientCtx, signedTxFile.Name(), "--offline") s.Require().EqualError(err, "cannot broadcast tx during offline mode") s.Require().NoError(s.network.WaitForNextBlock()) // Broadcast correct transaction. val1.ClientCtx.BroadcastMode = flags.BroadcastBlock - res, err = authtest.TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) + _, err = TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) @@ -510,18 +509,18 @@ func (s *IntegrationTestSuite) TestCLIMultisignInsufficientCosigners() { // Multisign, sign with one signature val1.ClientCtx.HomeDir = strings.Replace(val1.ClientCtx.HomeDir, "simd", "simcli", 1) - account1Signature, err := authtest.TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) + account1Signature, err := TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) - multiSigWith1Signature, err := authtest.TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name()) + multiSigWith1Signature, err := TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name()) s.Require().NoError(err) // Save tx to file multiSigWith1SignatureFile := testutil.WriteToNewTempFile(s.T(), multiSigWith1Signature.String()) - _, err = authtest.TxValidateSignaturesExec(val1.ClientCtx, multiSigWith1SignatureFile.Name()) + _, err = TxValidateSignaturesExec(val1.ClientCtx, multiSigWith1SignatureFile.Name()) s.Require().Error(err) } @@ -540,12 +539,12 @@ func (s *IntegrationTestSuite) TestCLIEncode() { savedTxFile := testutil.WriteToNewTempFile(s.T(), normalGeneratedTx.String()) // Encode - encodeExec, err := authtest.TxEncodeExec(val1.ClientCtx, savedTxFile.Name()) + encodeExec, err := TxEncodeExec(val1.ClientCtx, savedTxFile.Name()) s.Require().NoError(err) trimmedBase64 := strings.Trim(encodeExec.String(), "\"\n") // Check that the transaction decodes as expected - decodedTx, err := authtest.TxDecodeExec(val1.ClientCtx, trimmedBase64) + decodedTx, err := TxDecodeExec(val1.ClientCtx, trimmedBase64) s.Require().NoError(err) txCfg := val1.ClientCtx.TxConfig @@ -616,28 +615,28 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { // Sign with account1 val1.ClientCtx.HomeDir = strings.Replace(val1.ClientCtx.HomeDir, "simd", "simcli", 1) - account1Signature, err := authtest.TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) + account1Signature, err := TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) // Sign with account1 - account2Signature, err := authtest.TxSignExec(val1.ClientCtx, account2.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) + account2Signature, err := TxSignExec(val1.ClientCtx, account2.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) - multiSigWith2Signatures, err := authtest.TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name(), sign2File.Name()) + multiSigWith2Signatures, err := TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name(), sign2File.Name()) s.Require().NoError(err) // Write the output to disk signedTxFile := testutil.WriteToNewTempFile(s.T(), multiSigWith2Signatures.String()) - _, err = authtest.TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) + _, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) val1.ClientCtx.BroadcastMode = flags.BroadcastBlock - _, err = authtest.TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) + _, err = TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) @@ -662,7 +661,7 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { val1, multisigInfo.GetAddress(), sdk.NewCoins(sendTokens), ) - + s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) resp, err := bankcli.QueryBalancesExec(val1.ClientCtx, multisigInfo.GetAddress()) @@ -693,33 +692,33 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { // Sign with account1 val1.ClientCtx.HomeDir = strings.Replace(val1.ClientCtx.HomeDir, "simd", "simcli", 1) - account1Signature, err := authtest.TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) + account1Signature, err := TxSignExec(val1.ClientCtx, account1.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) // Sign with account1 - account2Signature, err := authtest.TxSignExec(val1.ClientCtx, account2.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) + account2Signature, err := TxSignExec(val1.ClientCtx, account2.GetAddress(), multiGeneratedTxFile.Name(), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) // Does not work in offline mode. - _, err = authtest.TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), "--offline", sign1File.Name(), sign2File.Name()) + _, err = TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), "--offline", sign1File.Name(), sign2File.Name()) s.Require().EqualError(err, fmt.Sprintf("couldn't verify signature for address %s", account1.GetAddress())) val1.ClientCtx.Offline = false - multiSigWith2Signatures, err := authtest.TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name(), sign2File.Name()) + multiSigWith2Signatures, err := TxMultiSignExec(val1.ClientCtx, multisigInfo.GetName(), multiGeneratedTxFile.Name(), sign1File.Name(), sign2File.Name()) s.Require().NoError(err) // Write the output to disk signedTxFile := testutil.WriteToNewTempFile(s.T(), multiSigWith2Signatures.String()) - _, err = authtest.TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) + _, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) val1.ClientCtx.BroadcastMode = flags.BroadcastBlock - _, err = authtest.TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) + _, err = TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) @@ -734,6 +733,7 @@ func (s *IntegrationTestSuite) TestSignBatchMultisig() { account2, err := val.ClientCtx.Keyring.Key("newAccount2") s.Require().NoError(err) multisigInfo, err := val.ClientCtx.Keyring.Key("multi") + s.Require().NoError(err) // Send coins from validator to multisig. sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 10) @@ -764,20 +764,20 @@ func (s *IntegrationTestSuite) TestSignBatchMultisig() { val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) // sign-batch file - res, err := authtest.TxSignBatchExec(val.ClientCtx, account1.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String()) + res, err := TxSignBatchExec(val.ClientCtx, account1.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) s.Require().Equal(1, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file file1 := testutil.WriteToNewTempFile(s.T(), res.String()) // sign-batch file with account2 - res, err = authtest.TxSignBatchExec(val.ClientCtx, account2.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String()) + res, err = TxSignBatchExec(val.ClientCtx, account2.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String()) s.Require().NoError(err) s.Require().Equal(1, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file2 file2 := testutil.WriteToNewTempFile(s.T(), res.String()) - res, err = authtest.TxMultiSignExec(val.ClientCtx, multisigInfo.GetName(), filename.Name(), file1.Name(), file2.Name()) + _, err = TxMultiSignExec(val.ClientCtx, multisigInfo.GetName(), filename.Name(), file1.Name(), file2.Name()) s.Require().NoError(err) } @@ -790,6 +790,7 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { account2, err := val.ClientCtx.Keyring.Key("newAccount2") s.Require().NoError(err) multisigInfo, err := val.ClientCtx.Keyring.Key("multi") + s.Require().NoError(err) // Send coins from validator to multisig. sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 1000) @@ -819,26 +820,26 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { filename := testutil.WriteToNewTempFile(s.T(), strings.Repeat(generatedStd.String(), 3)) val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) - queryResJSON, err := authtest.QueryAccountExec(val.ClientCtx, multisigInfo.GetAddress()) + queryResJSON, err := QueryAccountExec(val.ClientCtx, multisigInfo.GetAddress()) s.Require().NoError(err) var account authtypes.AccountI s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalInterfaceJSON(queryResJSON.Bytes(), &account)) // sign-batch file - res, err := authtest.TxSignBatchExec(val.ClientCtx, account1.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String(), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=%s", flags.FlagAccountNumber, fmt.Sprint(account.GetAccountNumber())), fmt.Sprintf("--%s=%s", flags.FlagSequence, fmt.Sprint(account.GetSequence()))) + res, err := TxSignBatchExec(val.ClientCtx, account1.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String(), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=%s", flags.FlagAccountNumber, fmt.Sprint(account.GetAccountNumber())), fmt.Sprintf("--%s=%s", flags.FlagSequence, fmt.Sprint(account.GetSequence()))) s.Require().NoError(err) s.Require().Equal(3, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file file1 := testutil.WriteToNewTempFile(s.T(), res.String()) // sign-batch file with account2 - res, err = authtest.TxSignBatchExec(val.ClientCtx, account2.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String(), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=%s", flags.FlagAccountNumber, fmt.Sprint(account.GetAccountNumber())), fmt.Sprintf("--%s=%s", flags.FlagSequence, fmt.Sprint(account.GetSequence()))) + res, err = TxSignBatchExec(val.ClientCtx, account2.GetAddress(), filename.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID), "--multisig", multisigInfo.GetAddress().String(), fmt.Sprintf("--%s", flags.FlagOffline), fmt.Sprintf("--%s=%s", flags.FlagAccountNumber, fmt.Sprint(account.GetAccountNumber())), fmt.Sprintf("--%s=%s", flags.FlagSequence, fmt.Sprint(account.GetSequence()))) s.Require().NoError(err) s.Require().Equal(3, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // multisign the file file2 := testutil.WriteToNewTempFile(s.T(), res.String()) - res, err = authtest.TxMultiSignBatchExec(val.ClientCtx, filename.Name(), multisigInfo.GetName(), file1.Name(), file2.Name()) + res, err = TxMultiSignBatchExec(val.ClientCtx, filename.Name(), multisigInfo.GetName(), file1.Name(), file2.Name()) s.Require().NoError(err) signedTxs := strings.Split(strings.Trim(res.String(), "\n"), "\n") @@ -846,7 +847,7 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { for _, signedTx := range signedTxs { signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx) val.ClientCtx.BroadcastMode = flags.BroadcastBlock - res, err = authtest.TxBroadcastExec(val.ClientCtx, signedTxFile.Name()) + _, err = TxBroadcastExec(val.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) } @@ -878,7 +879,7 @@ func (s *IntegrationTestSuite) TestGetAccountCmd() { s.Run(tc.name, func() { clientCtx := val.ClientCtx - out, err := authtest.QueryAccountExec(clientCtx, tc.address) + out, err := QueryAccountExec(clientCtx, tc.address) if tc.expectErr { s.Require().Error(err) s.Require().NotEqual("internal", err.Error()) @@ -905,7 +906,7 @@ func (s *IntegrationTestSuite) TestGetAccountsCmd() { s.Require().NotEmpty(res.Accounts) } -func TestGetBroadcastCommand_OfflineFlag(t *testing.T) { +func TestGetBroadcastCommandOfflineFlag(t *testing.T) { clientCtx := client.Context{}.WithOffline(true) clientCtx = clientCtx.WithTxConfig(simapp.MakeTestEncodingConfig().TxConfig) @@ -916,7 +917,7 @@ func TestGetBroadcastCommand_OfflineFlag(t *testing.T) { require.EqualError(t, cmd.Execute(), "cannot broadcast tx during offline mode") } -func TestGetBroadcastCommand_WithoutOfflineFlag(t *testing.T) { +func TestGetBroadcastCommandWithoutOfflineFlag(t *testing.T) { clientCtx := client.Context{} txCfg := simapp.MakeTestEncodingConfig().TxConfig clientCtx = clientCtx.WithTxConfig(txCfg) @@ -1019,7 +1020,7 @@ func (s *IntegrationTestSuite) TestTxWithoutPublicKey() { unsignedTxFile := testutil.WriteToNewTempFile(s.T(), string(txJSON)) // Sign the file with the unsignedTx. - signedTx, err := authtest.TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name()) + signedTx, err := TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name()) s.Require().NoError(err) // Remove the signerInfo's `public_key` field manually from the signedTx. @@ -1037,14 +1038,14 @@ func (s *IntegrationTestSuite) TestTxWithoutPublicKey() { // Broadcast tx, test that it shouldn't panic. val1.ClientCtx.BroadcastMode = flags.BroadcastSync - out, err := authtest.TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) + out, err := TxBroadcastExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) var res sdk.TxResponse s.Require().NoError(val1.ClientCtx.JSONMarshaler.UnmarshalJSON(out.Bytes(), &res)) s.Require().NotEqual(0, res.Code) } -func (s *IntegrationTestSuite) TestSignWithMultiSigners_AminoJSON() { +func (s *IntegrationTestSuite) TestSignWithMultiSignersAminoJSON() { // test case: // Create a transaction with 2 messages which has to be signed with 2 different keys // Sign and append the signatures using the CLI with Amino signing mode. @@ -1075,14 +1076,14 @@ func (s *IntegrationTestSuite) TestSignWithMultiSigners_AminoJSON() { unsignedTxFile := testutil.WriteToNewTempFile(s.T(), string(txJSON)) // Let val0 sign first the file with the unsignedTx. - signedByVal0, err := authtest.TxSignExec(val0.ClientCtx, val0.Address, unsignedTxFile.Name(), "--overwrite", "--sign-mode=amino-json") + signedByVal0, err := TxSignExec(val0.ClientCtx, val0.Address, unsignedTxFile.Name(), "--overwrite", "--sign-mode=amino-json") require.NoError(err) signedByVal0File := testutil.WriteToNewTempFile(s.T(), signedByVal0.String()) // Then let val1 sign the file with signedByVal0. val1AccNum, val1Seq, err := val0.ClientCtx.AccountRetriever.GetAccountNumberSequence(val0.ClientCtx, val1.Address) require.NoError(err) - signedTx, err := authtest.TxSignExec( + signedTx, err := TxSignExec( val1.ClientCtx, val1.Address, signedByVal0File.Name(), "--offline", fmt.Sprintf("--account-number=%d", val1AccNum), fmt.Sprintf("--sequence=%d", val1Seq), "--sign-mode=amino-json", ) @@ -1090,7 +1091,7 @@ func (s *IntegrationTestSuite) TestSignWithMultiSigners_AminoJSON() { signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx.String()) // Now let's try to send this tx. - res, err := authtest.TxBroadcastExec( + res, err := TxBroadcastExec( val0.ClientCtx, signedTxFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -1120,7 +1121,3 @@ func (s *IntegrationTestSuite) createBankMsg(val *network.Validator, toAddr sdk. flags = append(flags, extraFlags...) return bankcli.MsgSendExec(val.ClientCtx, val.Address, toAddr, amount, flags...) } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/auth/vesting/client/testutil/cli_test.go b/x/auth/vesting/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/auth/vesting/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/auth/vesting/client/cli/cli_test.go b/x/auth/vesting/client/testutil/suite.go similarity index 93% rename from x/auth/vesting/client/cli/cli_test.go rename to x/auth/vesting/client/testutil/suite.go index ebd417a62..e538f73a6 100644 --- a/x/auth/vesting/client/cli/cli_test.go +++ b/x/auth/vesting/client/testutil/suite.go @@ -1,10 +1,7 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" - "testing" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" @@ -23,14 +20,14 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -47,8 +44,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { testCases := map[string]struct { args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ "create a continuous vesting account": { args: []string{ @@ -61,8 +58,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, expectErr: false, - respType: &sdk.TxResponse{}, expectedCode: 0, + respType: &sdk.TxResponse{}, }, "create a delayed vesting account": { args: []string{ @@ -76,8 +73,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, expectErr: false, - respType: &sdk.TxResponse{}, expectedCode: 0, + respType: &sdk.TxResponse{}, }, "invalid address": { args: []string{ @@ -87,8 +84,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address), }, expectErr: true, - respType: &sdk.TxResponse{}, expectedCode: 0, + respType: &sdk.TxResponse{}, }, "invalid coins": { args: []string{ @@ -98,8 +95,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address), }, expectErr: true, - respType: &sdk.TxResponse{}, expectedCode: 0, + respType: &sdk.TxResponse{}, }, "invalid end time": { args: []string{ @@ -109,8 +106,8 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address), }, expectErr: true, - respType: &sdk.TxResponse{}, expectedCode: 0, + respType: &sdk.TxResponse{}, }, } @@ -133,7 +130,3 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/authz/client/testutil/cli_test.go b/x/authz/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/authz/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/authz/client/cli/query_test.go b/x/authz/client/testutil/query.go similarity index 95% rename from x/authz/client/cli/query_test.go rename to x/authz/client/testutil/query.go index e011d990d..6079bcacb 100644 --- a/x/authz/client/cli/query_test.go +++ b/x/authz/client/testutil/query.go @@ -1,6 +1,4 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" @@ -14,7 +12,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz/client/cli" - authztestutil "github.com/cosmos/cosmos-sdk/x/authz/client/testutil" "github.com/cosmos/cosmos-sdk/x/authz/types" ) @@ -24,7 +21,7 @@ func (s *IntegrationTestSuite) TestQueryAuthorizations() { grantee := s.grantee twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -102,7 +99,7 @@ func (s *IntegrationTestSuite) TestQueryAuthorization() { grantee := s.grantee twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), diff --git a/x/authz/client/cli/tx_test.go b/x/authz/client/testutil/tx.go similarity index 93% rename from x/authz/client/cli/tx_test.go rename to x/authz/client/testutil/tx.go index b7dad15e6..08c3d706e 100644 --- a/x/authz/client/cli/tx_test.go +++ b/x/authz/client/testutil/tx.go @@ -1,10 +1,7 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" - "testing" "time" "github.com/gogo/protobuf/proto" @@ -25,8 +22,6 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" stakingcli "github.com/cosmos/cosmos-sdk/x/staking/client/cli" - authztestutil "github.com/cosmos/cosmos-sdk/x/authz/client/testutil" - bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" bank "github.com/cosmos/cosmos-sdk/x/bank/types" ) @@ -39,14 +34,14 @@ type IntegrationTestSuite struct { grantee sdk.AccAddress } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) val := s.network.Validators[0] @@ -88,8 +83,6 @@ func (s *IntegrationTestSuite) TearDownSuite() { var typeMsgSend = bank.SendAuthorization{}.MethodName() var typeMsgVote = "/cosmos.gov.v1beta1.Msg/Vote" -var commonFlags = []string{} - func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { val := s.network.Validators[0] grantee := s.grantee @@ -169,8 +162,8 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), - fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), + fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, nil, 0, @@ -186,7 +179,7 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, &sdk.TxResponse{}, 0, @@ -202,7 +195,7 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, &sdk.TxResponse{}, 0, @@ -218,7 +211,7 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, &sdk.TxResponse{}, 0, @@ -234,7 +227,7 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, &sdk.TxResponse{}, 0, @@ -276,7 +269,7 @@ func (s *IntegrationTestSuite) TestCLITxGrantAuthorization() { tc := tc s.Run(tc.name, func() { clientCtx := val.ClientCtx - out, err := authztestutil.ExecGrantAuthorization( + out, err := ExecGrantAuthorization( val, tc.args, ) @@ -305,7 +298,7 @@ func (s *IntegrationTestSuite) TestCmdRevokeAuthorizations() { twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() // send-authorization - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -321,7 +314,7 @@ func (s *IntegrationTestSuite) TestCmdRevokeAuthorizations() { s.Require().NoError(err) // generic-authorization - _, err = authztestutil.ExecGrantAuthorization( + _, err = ExecGrantAuthorization( val, []string{ grantee.String(), @@ -346,7 +339,7 @@ func (s *IntegrationTestSuite) TestCmdRevokeAuthorizations() { { "invalid grantee address", []string{ - "invlid grantee", + "invalid grantee", typeMsgSend, fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), @@ -419,7 +412,7 @@ func (s *IntegrationTestSuite) TestExecAuthorizationWithExpiration() { grantee := s.grantee tenSeconds := time.Now().Add(time.Second * time.Duration(10)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -459,7 +452,7 @@ func (s *IntegrationTestSuite) TestNewExecGenericAuthorized() { grantee := s.grantee twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -548,7 +541,7 @@ func (s *IntegrationTestSuite) TestNewExecGrantAuthorized() { grantee := s.grantee twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -565,7 +558,7 @@ func (s *IntegrationTestSuite) TestNewExecGrantAuthorized() { tokens := sdk.NewCoins( sdk.NewCoin(fmt.Sprintf("%stoken", val.Moniker), sdk.NewInt(12)), ) - normalGeneratedTx, err := bankcli.MsgSendExec( + normalGeneratedTx, err := banktestutil.MsgSendExec( val.ClientCtx, val.Address, grantee, @@ -633,7 +626,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { grantee := s.grantee twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -643,7 +636,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, ) @@ -724,8 +717,8 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { }) } - //test delegate no spend-limit - _, err = authztestutil.ExecGrantAuthorization( + // test delegate no spend-limit + _, err = ExecGrantAuthorization( val, []string{ grantee.String(), @@ -734,7 +727,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, ) @@ -802,7 +795,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { } // test delegating to denied validator - _, err = authztestutil.ExecGrantAuthorization( + _, err = ExecGrantAuthorization( val, []string{ grantee.String(), @@ -812,7 +805,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagDenyValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, ) @@ -838,7 +831,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix() // granting undelegate msg authorization - _, err := authztestutil.ExecGrantAuthorization( + _, err := ExecGrantAuthorization( val, []string{ grantee.String(), @@ -848,7 +841,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, ) @@ -944,7 +937,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { } // grant undelegate authorization without limit - _, err = authztestutil.ExecGrantAuthorization( + _, err = ExecGrantAuthorization( val, []string{ grantee.String(), @@ -953,7 +946,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours), - fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, fmt.Sprintf("%s", val.ValAddress.String())), + fmt.Sprintf("--%s=%s", cli.FlagAllowedValidators, val.ValAddress.String()), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, ) @@ -1020,7 +1013,3 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/bank/client/testutil/cli_test.go b/x/bank/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/bank/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/bank/client/cli/cli_test.go b/x/bank/client/testutil/suite.go similarity index 83% rename from x/bank/client/cli/cli_test.go rename to x/bank/client/testutil/suite.go index 60b8c504b..d56835f9b 100644 --- a/x/bank/client/cli/cli_test.go +++ b/x/bank/client/testutil/suite.go @@ -1,15 +1,12 @@ -package cli_test +package testutil import ( - "context" "fmt" - "testing" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" "github.com/cosmos/cosmos-sdk/testutil/network" @@ -17,7 +14,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/x/bank/client/cli" - banktestutil "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" "github.com/cosmos/cosmos-sdk/x/bank/types" ) @@ -28,15 +24,16 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - genesisState := cfg.GenesisState - cfg.NumValidators = 1 - + genesisState := s.cfg.GenesisState var bankGenesis types.GenesisState - s.Require().NoError(cfg.Codec.UnmarshalJSON(genesisState[types.ModuleName], &bankGenesis)) + s.Require().NoError(s.cfg.Codec.UnmarshalJSON(genesisState[types.ModuleName], &bankGenesis)) bankGenesis.DenomMetadata = []types.Metadata{ { @@ -78,13 +75,12 @@ func (s *IntegrationTestSuite) SetupSuite() { }, } - bankGenesisBz, err := cfg.Codec.MarshalJSON(&bankGenesis) + bankGenesisBz, err := s.cfg.Codec.MarshalJSON(&bankGenesis) s.Require().NoError(err) genesisState[types.ModuleName] = bankGenesisBz - cfg.GenesisState = genesisState + s.cfg.GenesisState = genesisState - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) @@ -199,7 +195,10 @@ func (s *IntegrationTestSuite) TestGetCmdQueryTotalSupply() { fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, respType: &sdk.Coin{}, - expected: &sdk.Coin{s.cfg.BondDenom, s.cfg.StakingTokens.Add(sdk.NewInt(10))}, + expected: &sdk.Coin{ + Denom: s.cfg.BondDenom, + Amount: s.cfg.StakingTokens.Add(sdk.NewInt(10)), + }, }, { name: "total supply of a bogus denom", @@ -209,7 +208,10 @@ func (s *IntegrationTestSuite) TestGetCmdQueryTotalSupply() { fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, respType: &sdk.Coin{}, - expected: &sdk.Coin{"foobar", sdk.ZeroInt()}, + expected: &sdk.Coin{ + Denom: "foobar", + Amount: sdk.ZeroInt(), + }, }, } @@ -364,9 +366,6 @@ func (s *IntegrationTestSuite) TestNewSendTxCmdGenOnly() { clientCtx := val.ClientCtx - ctx := context.Background() - ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) - from := val.Address to := val.Address amount := sdk.NewCoins( @@ -380,7 +379,7 @@ func (s *IntegrationTestSuite) TestNewSendTxCmdGenOnly() { fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), } - bz, err := banktestutil.MsgSendExec(clientCtx, from, to, amount, args...) + bz, err := MsgSendExec(clientCtx, from, to, amount, args...) s.Require().NoError(err) tx, err := s.cfg.TxConfig.TxJSONDecoder()(bz.Bytes()) s.Require().NoError(err) @@ -399,8 +398,8 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { amount sdk.Coins args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "valid transaction", @@ -415,9 +414,7 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, - &sdk.TxResponse{}, - 0, + false, 0, &sdk.TxResponse{}, }, { "not enough fees", @@ -433,8 +430,8 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(1))).String()), }, false, - &sdk.TxResponse{}, sdkerrors.ErrInsufficientFee.ABCICode(), + &sdk.TxResponse{}, }, { "not enough gas", @@ -451,8 +448,8 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { "--gas=10", }, false, - &sdk.TxResponse{}, sdkerrors.ErrOutOfGas.ABCICode(), + &sdk.TxResponse{}, }, } @@ -462,7 +459,7 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { s.Run(tc.name, func() { clientCtx := val.ClientCtx - bz, err := banktestutil.MsgSendExec(clientCtx, tc.from, tc.to, tc.amount, tc.args...) + bz, err := MsgSendExec(clientCtx, tc.from, tc.to, tc.amount, tc.args...) if tc.expectErr { s.Require().Error(err) } else { @@ -476,8 +473,60 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { } } -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) +// TestBankMsgService does a basic test of whether or not service Msg's as defined +// in ADR 031 work in the most basic end-to-end case. +func (s *IntegrationTestSuite) TestBankMsgService() { + val := s.network.Validators[0] + + testCases := []struct { + name string + from, to sdk.AccAddress + amount sdk.Coins + args []string + expectErr bool + expectedCode uint32 + respType proto.Message + rawLogContains string + }{ + { + "valid transaction", + val.Address, + val.Address, + sdk.NewCoins( + sdk.NewCoin(fmt.Sprintf("%stoken", val.Moniker), sdk.NewInt(10)), + sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)), + ), + []string{ + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + }, + false, + 0, + &sdk.TxResponse{}, + "/cosmos.bank.v1beta1.Msg/Send", // indicates we are using ServiceMsg and not a regular Msg + }, + } + + for _, tc := range testCases { + tc := tc + + s.Run(tc.name, func() { + clientCtx := val.ClientCtx + + bz, err := MsgSendExec(clientCtx, tc.from, tc.to, tc.amount, tc.args...) + if tc.expectErr { + s.Require().Error(err) + } else { + s.Require().NoError(err) + + s.Require().NoError(clientCtx.JSONMarshaler.UnmarshalJSON(bz.Bytes(), tc.respType), bz.String()) + txResp := tc.respType.(*sdk.TxResponse) + s.Require().Equal(tc.expectedCode, txResp.Code) + s.Require().Contains(txResp.RawLog, tc.rawLogContains) + } + }) + } } func NewCoin(denom string, amount sdk.Int) *sdk.Coin { diff --git a/x/crisis/client/testsuite/cli_test.go b/x/crisis/client/testsuite/cli_test.go new file mode 100644 index 000000000..3c083e694 --- /dev/null +++ b/x/crisis/client/testsuite/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/cosmos/cosmos-sdk/testutil/network" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/crisis/client/cli/cli_test.go b/x/crisis/client/testsuite/suite.go similarity index 89% rename from x/crisis/client/cli/cli_test.go rename to x/crisis/client/testsuite/suite.go index 92b439614..1b6907e83 100644 --- a/x/crisis/client/cli/cli_test.go +++ b/x/crisis/client/testsuite/suite.go @@ -1,10 +1,7 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" - "testing" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" @@ -23,15 +20,14 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) - + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) } @@ -48,8 +44,8 @@ func (s *IntegrationTestSuite) TestNewMsgVerifyInvariantTxCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "missing module", @@ -60,7 +56,7 @@ func (s *IntegrationTestSuite) TestNewMsgVerifyInvariantTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "missing invariant route", @@ -71,7 +67,7 @@ func (s *IntegrationTestSuite) TestNewMsgVerifyInvariantTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -82,7 +78,7 @@ func (s *IntegrationTestSuite) TestNewMsgVerifyInvariantTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -106,7 +102,3 @@ func (s *IntegrationTestSuite) TestNewMsgVerifyInvariantTxCmd() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/distribution/client/testutil/cli_test.go b/x/distribution/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/distribution/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/distribution/client/cli/cli_test.go b/x/distribution/client/testutil/suite.go similarity index 92% rename from x/distribution/client/cli/cli_test.go rename to x/distribution/client/testutil/suite.go index 40331db7b..603b8b6a2 100644 --- a/x/distribution/client/cli/cli_test.go +++ b/x/distribution/client/testutil/suite.go @@ -1,34 +1,32 @@ -// +build norace - -package cli_test +package testutil import ( - "context" "fmt" "strings" - "testing" "time" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" - "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/testutil" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - testnet "github.com/cosmos/cosmos-sdk/testutil/network" + "github.com/cosmos/cosmos-sdk/testutil/network" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/distribution/client/cli" - distrtestutil "github.com/cosmos/cosmos-sdk/x/distribution/client/testutil" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" ) type IntegrationTestSuite struct { suite.Suite - cfg testnet.Config - network *testnet.Network + cfg network.Config + network *network.Network +} + +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} } // SetupTest creates a new network for _each_ integration test. We create a new @@ -38,25 +36,21 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupTest() { s.T().Log("setting up integration test suite") - cfg := testnet.DefaultConfig() - genesisState := cfg.GenesisState - cfg.NumValidators = 1 - + genesisState := s.cfg.GenesisState var mintData minttypes.GenesisState - s.Require().NoError(cfg.Codec.UnmarshalJSON(genesisState[minttypes.ModuleName], &mintData)) + s.Require().NoError(s.cfg.Codec.UnmarshalJSON(genesisState[minttypes.ModuleName], &mintData)) inflation := sdk.MustNewDecFromStr("1.0") mintData.Minter.Inflation = inflation mintData.Params.InflationMin = inflation mintData.Params.InflationMax = inflation - mintDataBz, err := cfg.Codec.MarshalJSON(&mintData) + mintDataBz, err := s.cfg.Codec.MarshalJSON(&mintData) s.Require().NoError(err) genesisState[minttypes.ModuleName] = mintDataBz - cfg.GenesisState = genesisState + s.cfg.GenesisState = genesisState - s.cfg = cfg - s.network = testnet.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) @@ -134,7 +128,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryValidatorOutstandingRewards() { fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, false, - `{"rewards":[{"denom":"stake","amount":"232.260000000000000000"}]}`, + `{"rewards":[{"denom":"stake","amount":"1164.240000000000000000"}]}`, }, { "text output", @@ -145,7 +139,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryValidatorOutstandingRewards() { }, false, `rewards: -- amount: "232.260000000000000000" +- amount: "1164.240000000000000000" denom: stake`, }, } @@ -197,7 +191,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryValidatorCommission() { fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, false, - `{"commission":[{"denom":"stake","amount":"116.130000000000000000"}]}`, + `{"commission":[{"denom":"stake","amount":"464.520000000000000000"}]}`, }, { "text output", @@ -208,7 +202,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryValidatorCommission() { }, false, `commission: -- amount: "116.130000000000000000" +- amount: "464.520000000000000000" denom: stake`, }, } @@ -345,7 +339,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryDelegatorRewards() { { "json output", []string{ - fmt.Sprintf("--%s=10", flags.FlagHeight), + fmt.Sprintf("--%s=5", flags.FlagHeight), addr.String(), fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, @@ -355,7 +349,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryDelegatorRewards() { { "json output (specific validator)", []string{ - fmt.Sprintf("--%s=10", flags.FlagHeight), + fmt.Sprintf("--%s=5", flags.FlagHeight), addr.String(), valAddr.String(), fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, @@ -366,7 +360,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryDelegatorRewards() { "text output", []string{ fmt.Sprintf("--%s=text", tmcli.OutputFlag), - fmt.Sprintf("--%s=10", flags.FlagHeight), + fmt.Sprintf("--%s=5", flags.FlagHeight), addr.String(), }, false, @@ -383,7 +377,7 @@ total: "text output (specific validator)", []string{ fmt.Sprintf("--%s=text", tmcli.OutputFlag), - fmt.Sprintf("--%s=10", flags.FlagHeight), + fmt.Sprintf("--%s=5", flags.FlagHeight), addr.String(), valAddr.String(), }, false, @@ -458,8 +452,8 @@ func (s *IntegrationTestSuite) TestNewWithdrawRewardsCmd() { valAddr fmt.Stringer args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid validator address", @@ -470,7 +464,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawRewardsCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -481,7 +475,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawRewardsCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid transaction (with commission)", @@ -493,7 +487,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawRewardsCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -503,10 +497,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawRewardsCmd() { s.Run(tc.name, func() { clientCtx := val.ClientCtx - ctx := context.Background() - ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) - - bz, err := distrtestutil.MsgWithdrawDelegatorRewardExec(clientCtx, tc.valAddr, tc.args...) + bz, err := MsgWithdrawDelegatorRewardExec(clientCtx, tc.valAddr, tc.args...) if tc.expectErr { s.Require().Error(err) } else { @@ -527,8 +518,8 @@ func (s *IntegrationTestSuite) TestNewWithdrawAllRewardsCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "valid transaction (offline)", @@ -538,7 +529,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawAllRewardsCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -548,7 +539,7 @@ func (s *IntegrationTestSuite) TestNewWithdrawAllRewardsCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -580,8 +571,8 @@ func (s *IntegrationTestSuite) TestNewSetWithdrawAddrCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid withdraw address", @@ -592,7 +583,7 @@ func (s *IntegrationTestSuite) TestNewSetWithdrawAddrCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -603,7 +594,7 @@ func (s *IntegrationTestSuite) TestNewSetWithdrawAddrCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -635,8 +626,8 @@ func (s *IntegrationTestSuite) TestNewFundCommunityPoolCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid funding amount", @@ -647,7 +638,7 @@ func (s *IntegrationTestSuite) TestNewFundCommunityPoolCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -658,7 +649,7 @@ func (s *IntegrationTestSuite) TestNewFundCommunityPoolCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -692,7 +683,9 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() { "amount": "-343foocoin", "deposit": -324foocoin }` + invalidPropFile := testutil.WriteToNewTempFile(s.T(), invalidProp) + validProp := fmt.Sprintf(`{ "title": "Community Pool Spend", "description": "Pay me some Atoms!", @@ -700,13 +693,14 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() { "amount": "%s", "deposit": "%s" }`, val.Address.String(), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431))) + validPropFile := testutil.WriteToNewTempFile(s.T(), validProp) testCases := []struct { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid proposal", @@ -717,7 +711,7 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -728,7 +722,7 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // sync mode as there are no funds yet fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -753,7 +747,3 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/evidence/client/testutil/cli_test.go b/x/evidence/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/evidence/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/evidence/client/cli/cli_test.go b/x/evidence/client/testutil/suite.go similarity index 81% rename from x/evidence/client/cli/cli_test.go rename to x/evidence/client/testutil/suite.go index 84b3697b4..d12083b64 100644 --- a/x/evidence/client/cli/cli_test.go +++ b/x/evidence/client/testutil/suite.go @@ -1,31 +1,30 @@ -package cli_test +package testutil import ( "strings" - "testing" "github.com/stretchr/testify/suite" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - testnet "github.com/cosmos/cosmos-sdk/testutil/network" + "github.com/cosmos/cosmos-sdk/testutil/network" "github.com/cosmos/cosmos-sdk/x/evidence/client/cli" ) type IntegrationTestSuite struct { suite.Suite - cfg testnet.Config - network *testnet.Network + cfg network.Config + network *network.Network +} + +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} } func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := testnet.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = testnet.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -36,10 +35,6 @@ func (s *IntegrationTestSuite) TearDownSuite() { s.network.Cleanup() } -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} - func (s *IntegrationTestSuite) TestGetQueryCmd() { val := s.network.Validators[0] diff --git a/x/feegrant/client/testutil/cli_test.go b/x/feegrant/client/testutil/cli_test.go new file mode 100644 index 000000000..bdbfb78d0 --- /dev/null +++ b/x/feegrant/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 3 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/feegrant/client/cli/cli_test.go b/x/feegrant/client/testutil/suite.go similarity index 96% rename from x/feegrant/client/cli/cli_test.go rename to x/feegrant/client/testutil/suite.go index 787a342d1..a247ac7e8 100644 --- a/x/feegrant/client/cli/cli_test.go +++ b/x/feegrant/client/testutil/suite.go @@ -1,6 +1,4 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" @@ -33,6 +31,10 @@ type IntegrationTestSuite struct { addedGrant types.FeeAllowanceGrant } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") @@ -40,11 +42,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - cfg := network.DefaultConfig() - cfg.NumValidators = 3 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -255,8 +253,8 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "wrong granter address", @@ -269,7 +267,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - true, nil, 0, + true, 0, nil, }, { "wrong grantee address", @@ -282,7 +280,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - true, nil, 0, + true, 0, nil, }, { "valid basic fee grant", @@ -295,7 +293,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid basic fee grant without spend limit", @@ -307,7 +305,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid basic fee grant without expiration", @@ -320,7 +318,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid basic fee grant without spend-limit and expiration", @@ -332,7 +330,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "try to add existed grant", @@ -345,7 +343,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 18, + false, 18, &sdk.TxResponse{}, }, { "invalid number of args(periodic fee grant)", @@ -360,7 +358,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - true, nil, 0, + true, 0, nil, }, { "period mentioned and period limit omitted, invalid periodic grant", @@ -375,7 +373,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - true, nil, 0, + true, 0, nil, }, { "period cannot be greater than the actual expiration(periodic fee grant)", @@ -391,7 +389,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - true, nil, 0, + true, 0, nil, }, { "valid periodic fee grant", @@ -407,7 +405,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid periodic fee grant without spend-limit", @@ -422,7 +420,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid periodic fee grant without expiration", @@ -437,7 +435,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid periodic fee grant without spend-limit and expiration", @@ -451,7 +449,7 @@ func (s *IntegrationTestSuite) TestNewCmdFeeGrant() { }, commonFlags..., ), - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -491,8 +489,8 @@ func (s *IntegrationTestSuite) TestNewCmdRevokeFeegrant() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid grantee", @@ -504,9 +502,7 @@ func (s *IntegrationTestSuite) TestNewCmdRevokeFeegrant() { }, commonFlags..., ), - true, - nil, - 0, + true, 0, nil, }, { "invalid grantee", @@ -518,9 +514,7 @@ func (s *IntegrationTestSuite) TestNewCmdRevokeFeegrant() { }, commonFlags..., ), - true, - nil, - 0, + true, 0, nil, }, { "Non existed grant", @@ -532,9 +526,7 @@ func (s *IntegrationTestSuite) TestNewCmdRevokeFeegrant() { }, commonFlags..., ), - false, - &sdk.TxResponse{}, - 4, + false, 4, &sdk.TxResponse{}, }, { "Valid revoke", @@ -546,9 +538,7 @@ func (s *IntegrationTestSuite) TestNewCmdRevokeFeegrant() { }, commonFlags..., ), - false, - &sdk.TxResponse{}, - 0, + false, 0, &sdk.TxResponse{}, }, } @@ -796,7 +786,3 @@ func (s *IntegrationTestSuite) TestFilteredFeeAllowance() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/genutil/client/testutil/cli_test.go b/x/genutil/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/genutil/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/genutil/client/cli/migrate_test.go b/x/genutil/client/testutil/migrate.go similarity index 98% rename from x/genutil/client/cli/migrate_test.go rename to x/genutil/client/testutil/migrate.go index 7e2f0e17a..4645f832b 100644 --- a/x/genutil/client/cli/migrate_test.go +++ b/x/genutil/client/testutil/migrate.go @@ -1,4 +1,4 @@ -package cli_test +package testutil import ( "testing" @@ -52,6 +52,7 @@ func (s *IntegrationTestSuite) TestMigrateGenesis() { } for _, tc := range testCases { + tc := tc s.Run(tc.name, func() { genesisFile := testutil.WriteToNewTempFile(s.T(), tc.genesis) jsonOutput, err := clitestutil.ExecTestCLICmd(val0.ClientCtx, cli.MigrateGenesisCmd(), []string{tc.target, genesisFile.Name()}) diff --git a/x/genutil/client/cli/gentx_test.go b/x/genutil/client/testutil/suite.go similarity index 90% rename from x/genutil/client/cli/gentx_test.go rename to x/genutil/client/testutil/suite.go index b57336759..a0bc047b4 100644 --- a/x/genutil/client/cli/gentx_test.go +++ b/x/genutil/client/testutil/suite.go @@ -1,4 +1,4 @@ -package cli_test +package testutil import ( "context" @@ -6,7 +6,6 @@ import ( "io/ioutil" "os" "path/filepath" - "testing" "github.com/stretchr/testify/suite" @@ -28,14 +27,14 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -91,7 +90,3 @@ func (s *IntegrationTestSuite) TestGenTxCmd() { err = tx.ValidateBasic() s.Require().NoError(err) } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/genutil/client/cli/validate_genesis_test.go b/x/genutil/client/testutil/validate_genesis.go similarity index 98% rename from x/genutil/client/cli/validate_genesis_test.go rename to x/genutil/client/testutil/validate_genesis.go index ea3d49c47..fe34e04bb 100644 --- a/x/genutil/client/cli/validate_genesis_test.go +++ b/x/genutil/client/testutil/validate_genesis.go @@ -1,4 +1,4 @@ -package cli_test +package testutil import ( "github.com/cosmos/cosmos-sdk/testutil" @@ -87,6 +87,7 @@ func (s *IntegrationTestSuite) TestValidateGenesis() { } for _, tc := range testCases { + tc := tc s.Run(tc.name, func() { genesisFile := testutil.WriteToNewTempFile(s.T(), tc.genesis) _, err := clitestutil.ExecTestCLICmd(val0.ClientCtx, cli.ValidateGenesisCmd(nil), []string{genesisFile.Name()}) diff --git a/x/gov/client/testutil/cli_test.go b/x/gov/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/gov/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/gov/client/cli/cli_test.go b/x/gov/client/testutil/suite.go similarity index 94% rename from x/gov/client/cli/cli_test.go rename to x/gov/client/testutil/suite.go index 8b56aff9d..2bc14f0f4 100644 --- a/x/gov/client/cli/cli_test.go +++ b/x/gov/client/testutil/suite.go @@ -1,11 +1,8 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" "strings" - "testing" "github.com/cosmos/cosmos-sdk/testutil" @@ -19,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/network" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" - govtestutil "github.com/cosmos/cosmos-sdk/x/gov/client/testutil" "github.com/cosmos/cosmos-sdk/x/gov/types" ) @@ -30,12 +26,13 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - s.cfg = network.DefaultConfig() - s.cfg.NumValidators = 1 - s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) @@ -44,7 +41,7 @@ func (s *IntegrationTestSuite) SetupSuite() { val := s.network.Validators[0] // create a proposal with deposit - _, err = govtestutil.MsgSubmitProposal(val.ClientCtx, val.Address.String(), + _, err = MsgSubmitProposal(val.ClientCtx, val.Address.String(), "Text Proposal 1", "Where is the title!?", types.ProposalTypeText, fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens).String())) s.Require().NoError(err) @@ -52,18 +49,18 @@ func (s *IntegrationTestSuite) SetupSuite() { s.Require().NoError(err) // vote for proposal - _, err = govtestutil.MsgVote(val.ClientCtx, val.Address.String(), "1", "yes") + _, err = MsgVote(val.ClientCtx, val.Address.String(), "1", "yes") s.Require().NoError(err) // create a proposal without deposit - _, err = govtestutil.MsgSubmitProposal(val.ClientCtx, val.Address.String(), + _, err = MsgSubmitProposal(val.ClientCtx, val.Address.String(), "Text Proposal 2", "Where is the title!?", types.ProposalTypeText) s.Require().NoError(err) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) // create a proposal3 with deposit - _, err = govtestutil.MsgSubmitProposal(val.ClientCtx, val.Address.String(), + _, err = MsgSubmitProposal(val.ClientCtx, val.Address.String(), "Text Proposal 3", "Where is the title!?", types.ProposalTypeText, fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens).String())) s.Require().NoError(err) @@ -71,7 +68,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.Require().NoError(err) // vote for proposal3 as val - _, err = govtestutil.MsgVote(val.ClientCtx, val.Address.String(), "3", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05") + _, err = MsgVote(val.ClientCtx, val.Address.String(), "3", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05") s.Require().NoError(err) } @@ -296,8 +293,8 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid proposal (file)", @@ -307,7 +304,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "invalid proposal", @@ -319,7 +316,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction (file)", @@ -330,7 +327,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "valid transaction", @@ -344,7 +341,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -576,7 +573,7 @@ func (s *IntegrationTestSuite) TestNewCmdDeposit() { { "without proposal id", []string{ - sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), //10stake + sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), // 10stake fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -599,7 +596,7 @@ func (s *IntegrationTestSuite) TestNewCmdDeposit() { "deposit on non existing proposal", []string{ "10", - sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), //10stake + sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), // 10stake fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -611,7 +608,7 @@ func (s *IntegrationTestSuite) TestNewCmdDeposit() { "deposit on non existing proposal", []string{ "1", - sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), //10stake + sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), // 10stake fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -790,7 +787,7 @@ func (s *IntegrationTestSuite) TestNewCmdVote() { "vote for invalid proposal", []string{ "10", - fmt.Sprintf("%s", "yes"), + "yes", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -802,7 +799,7 @@ func (s *IntegrationTestSuite) TestNewCmdVote() { "valid vote", []string{ "1", - fmt.Sprintf("%s", "yes"), + "yes", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -850,7 +847,7 @@ func (s *IntegrationTestSuite) TestNewCmdWeightedVote() { "vote for invalid proposal", []string{ "10", - fmt.Sprintf("%s", "yes"), + "yes", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -862,7 +859,7 @@ func (s *IntegrationTestSuite) TestNewCmdWeightedVote() { "valid vote", []string{ "1", - fmt.Sprintf("%s", "yes"), + "yes", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -874,7 +871,7 @@ func (s *IntegrationTestSuite) TestNewCmdWeightedVote() { "invalid valid split vote string", []string{ "1", - fmt.Sprintf("%s", "yes/0.6,no/0.3,abstain/0.05,no_with_veto/0.05"), + "yes/0.6,no/0.3,abstain/0.05,no_with_veto/0.05", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -886,7 +883,7 @@ func (s *IntegrationTestSuite) TestNewCmdWeightedVote() { "valid split vote", []string{ "1", - fmt.Sprintf("%s", "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05"), + "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05", fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), @@ -915,7 +912,3 @@ func (s *IntegrationTestSuite) TestNewCmdWeightedVote() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/mint/client/testutil/cli_test.go b/x/mint/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/mint/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/mint/client/cli/cli_test.go b/x/mint/client/testutil/suite.go similarity index 87% rename from x/mint/client/cli/cli_test.go rename to x/mint/client/testutil/suite.go index 6425f369a..24e742676 100644 --- a/x/mint/client/cli/cli_test.go +++ b/x/mint/client/testutil/suite.go @@ -1,18 +1,15 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" "strings" - "testing" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" "github.com/cosmos/cosmos-sdk/client/flags" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - testnet "github.com/cosmos/cosmos-sdk/testutil/network" + "github.com/cosmos/cosmos-sdk/testutil/network" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/mint/client/cli" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -21,32 +18,33 @@ import ( type IntegrationTestSuite struct { suite.Suite - cfg testnet.Config - network *testnet.Network + cfg network.Config + network *network.Network +} + +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} } func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := testnet.DefaultConfig() - genesisState := cfg.GenesisState - cfg.NumValidators = 1 + genesisState := s.cfg.GenesisState var mintData minttypes.GenesisState - s.Require().NoError(cfg.Codec.UnmarshalJSON(genesisState[minttypes.ModuleName], &mintData)) + s.Require().NoError(s.cfg.Codec.UnmarshalJSON(genesisState[minttypes.ModuleName], &mintData)) inflation := sdk.MustNewDecFromStr("1.0") mintData.Minter.Inflation = inflation mintData.Params.InflationMin = inflation mintData.Params.InflationMax = inflation - mintDataBz, err := cfg.Codec.MarshalJSON(&mintData) + mintDataBz, err := s.cfg.Codec.MarshalJSON(&mintData) s.Require().NoError(err) genesisState[minttypes.ModuleName] = mintDataBz - cfg.GenesisState = genesisState + s.cfg.GenesisState = genesisState - s.cfg = cfg - s.network = testnet.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) @@ -163,7 +161,3 @@ func (s *IntegrationTestSuite) TestGetCmdQueryAnnualProvisions() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/params/client/testutil/cli_test.go b/x/params/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/params/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/params/client/cli/cli_test.go b/x/params/client/testutil/suite.go similarity index 86% rename from x/params/client/cli/cli_test.go rename to x/params/client/testutil/suite.go index 6254a45ea..e539b8791 100644 --- a/x/params/client/cli/cli_test.go +++ b/x/params/client/testutil/suite.go @@ -1,11 +1,8 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" "strings" - "testing" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" @@ -22,14 +19,14 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -81,7 +78,3 @@ value: "100"`, }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/slashing/client/testutil/cli_test.go b/x/slashing/client/testutil/cli_test.go new file mode 100644 index 000000000..dd36a6af2 --- /dev/null +++ b/x/slashing/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/slashing/client/cli/cli_test.go b/x/slashing/client/testutil/suite.go similarity index 94% rename from x/slashing/client/cli/cli_test.go rename to x/slashing/client/testutil/suite.go index 84be17b76..2ab4a965e 100644 --- a/x/slashing/client/cli/cli_test.go +++ b/x/slashing/client/testutil/suite.go @@ -1,11 +1,8 @@ -// +build norace - -package cli_test +package testutil import ( "fmt" "strings" - "testing" "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" @@ -25,16 +22,16 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + // SetupSuite executes bootstrapping logic before all the tests, i.e. once before // the entire suite, start executing. func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") - cfg := network.DefaultConfig() - cfg.NumValidators = 1 - - s.cfg = cfg - s.network = network.New(s.T(), cfg) + s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) s.Require().NoError(err) @@ -149,8 +146,8 @@ func (s *IntegrationTestSuite) TestNewUnjailTxCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "valid transaction", @@ -160,7 +157,7 @@ func (s *IntegrationTestSuite) TestNewUnjailTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), // sync mode as there are no funds yet fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -184,7 +181,3 @@ func (s *IntegrationTestSuite) TestNewUnjailTxCmd() { }) } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/x/staking/client/rest/grpc_query_test.go b/x/staking/client/rest/grpc_query_test.go index 6e98844c4..f0cc39996 100644 --- a/x/staking/client/rest/grpc_query_test.go +++ b/x/staking/client/rest/grpc_query_test.go @@ -756,15 +756,15 @@ func (s *IntegrationTestSuite) TestQueryHistoricalInfoGRPC() { resp, err := rest.GetRequest(tc.url) s.Require().NoError(err) - var historical_info types.QueryHistoricalInfoResponse + var historicalInfo types.QueryHistoricalInfoResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &historical_info) + err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &historicalInfo) if tc.error { s.Require().Error(err) } else { s.Require().NoError(err) - s.Require().NotNil(historical_info) + s.Require().NotNil(historicalInfo) } }) } diff --git a/x/staking/client/testutil/cli_test.go b/x/staking/client/testutil/cli_test.go new file mode 100644 index 000000000..0a7a5cc25 --- /dev/null +++ b/x/staking/client/testutil/cli_test.go @@ -0,0 +1,17 @@ +// +build norace + +package testutil + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil/network" + + "github.com/stretchr/testify/suite" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := network.DefaultConfig() + cfg.NumValidators = 2 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} diff --git a/x/staking/client/cli/cli_test.go b/x/staking/client/testutil/suite.go similarity index 97% rename from x/staking/client/cli/cli_test.go rename to x/staking/client/testutil/suite.go index 156afb4b3..d05f45b4c 100644 --- a/x/staking/client/cli/cli_test.go +++ b/x/staking/client/testutil/suite.go @@ -1,6 +1,4 @@ -// +build norace - -package cli_test +package testutil import ( "context" @@ -24,7 +22,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/query" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" "github.com/cosmos/cosmos-sdk/x/staking/client/cli" - stakingtestutil "github.com/cosmos/cosmos-sdk/x/staking/client/testutil" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -35,6 +32,10 @@ type IntegrationTestSuite struct { network *network.Network } +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + func (s *IntegrationTestSuite) SetupSuite() { s.T().Log("setting up integration test suite") @@ -42,8 +43,6 @@ func (s *IntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.cfg = network.DefaultConfig() - s.cfg.NumValidators = 2 s.network = network.New(s.T(), s.cfg) _, err := s.network.WaitForHeight(1) @@ -56,7 +55,7 @@ func (s *IntegrationTestSuite) SetupSuite() { val2 := s.network.Validators[1] // redelegate - _, err = stakingtestutil.MsgRedelegateExec( + _, err = MsgRedelegateExec( val.ClientCtx, val.Address, val.ValAddress, @@ -68,7 +67,7 @@ func (s *IntegrationTestSuite) SetupSuite() { _, err = s.network.WaitForHeight(1) s.Require().NoError(err) // unbonding - _, err = stakingtestutil.MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbond) + _, err = MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbond) s.Require().NoError(err) _, err = s.network.WaitForHeight(1) s.Require().NoError(err) @@ -106,8 +105,8 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "invalid transaction (missing amount)", @@ -125,7 +124,7 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "invalid transaction (missing pubkey)", @@ -144,7 +143,7 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "invalid transaction (missing moniker)", @@ -164,7 +163,7 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction", @@ -185,7 +184,7 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -844,11 +843,11 @@ func (s *IntegrationTestSuite) TestGetCmdQueryHistoricalInfo() { if tc.error { s.Require().Error(err) } else { - var historical_info types.HistoricalInfo + var historicalInfo types.HistoricalInfo - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(out.Bytes(), &historical_info) + err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(out.Bytes(), &historicalInfo) s.Require().NoError(err) - s.Require().NotNil(historical_info) + s.Require().NotNil(historicalInfo) } }) } @@ -938,8 +937,8 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "with no edit flag (since all are optional)", @@ -949,7 +948,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "with no edit flag (since all are optional)", @@ -959,7 +958,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "edit validator details", @@ -970,7 +969,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "edit validator identity", @@ -981,7 +980,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "edit validator security-contact", @@ -992,7 +991,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "edit validator website", @@ -1003,7 +1002,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, { "with all edit flags", @@ -1017,7 +1016,7 @@ func (s *IntegrationTestSuite) TestNewCmdEditValidator() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -1064,8 +1063,8 @@ func (s *IntegrationTestSuite) TestNewCmdDelegate() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "without delegate amount", @@ -1076,7 +1075,7 @@ func (s *IntegrationTestSuite) TestNewCmdDelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "without validator address", @@ -1087,7 +1086,7 @@ func (s *IntegrationTestSuite) TestNewCmdDelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction of delegate", @@ -1099,7 +1098,7 @@ func (s *IntegrationTestSuite) TestNewCmdDelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -1132,8 +1131,8 @@ func (s *IntegrationTestSuite) TestNewCmdRedelegate() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "without amount", @@ -1145,7 +1144,7 @@ func (s *IntegrationTestSuite) TestNewCmdRedelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "with wrong source validator address", @@ -1158,7 +1157,7 @@ func (s *IntegrationTestSuite) TestNewCmdRedelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 4, + false, 4, &sdk.TxResponse{}, }, { "with wrong destination validator address", @@ -1171,7 +1170,7 @@ func (s *IntegrationTestSuite) TestNewCmdRedelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 39, + false, 39, &sdk.TxResponse{}, }, { "valid transaction of delegate", @@ -1185,7 +1184,7 @@ func (s *IntegrationTestSuite) TestNewCmdRedelegate() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -1217,8 +1216,8 @@ func (s *IntegrationTestSuite) TestNewCmdUnbond() { name string args []string expectErr bool - respType proto.Message expectedCode uint32 + respType proto.Message }{ { "Without unbond amount", @@ -1229,7 +1228,7 @@ func (s *IntegrationTestSuite) TestNewCmdUnbond() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "Without validator address", @@ -1240,7 +1239,7 @@ func (s *IntegrationTestSuite) TestNewCmdUnbond() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - true, nil, 0, + true, 0, nil, }, { "valid transaction of unbond", @@ -1252,7 +1251,7 @@ func (s *IntegrationTestSuite) TestNewCmdUnbond() { fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), }, - false, &sdk.TxResponse{}, 0, + false, 0, &sdk.TxResponse{}, }, } @@ -1316,6 +1315,7 @@ func (s *IntegrationTestSuite) TestBlockResults() { // Create a HTTP rpc client. rpcClient, err := http.New(val.RPCAddress, "/websocket") + require.NoError(err) // Loop until we find a block result with the correct validator updates. // By experience, it happens around 2 blocks after `delHeight`. @@ -1345,7 +1345,3 @@ func (s *IntegrationTestSuite) TestBlockResults() { s.network.WaitForNextBlock() } } - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -}