diff --git a/server/grpc/gogoreflection/fix_registration.go b/server/grpc/gogoreflection/fix_registration.go index 0fc08444a8..4cf27b5fb7 100644 --- a/server/grpc/gogoreflection/fix_registration.go +++ b/server/grpc/gogoreflection/fix_registration.go @@ -70,6 +70,7 @@ func compress(fd *dpb.FileDescriptorProto) ([]byte, error) { cw := gzip.NewWriter(buf) _, err = cw.Write(fdBytes) if err != nil { + cw.Close() return nil, err } err = cw.Close() diff --git a/server/start.go b/server/start.go index 1cee1089d1..9b7a32fafc 100644 --- a/server/start.go +++ b/server/start.go @@ -280,6 +280,16 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App return err } + // Clean up the traceWriter in the cpuProfileCleanup routine that is invoked + // when the server is shutting down. + fn := cpuProfileCleanup + cpuProfileCleanup = func() { + if fn != nil { + fn() + } + traceWriter.Close() + } + config, err := serverconfig.GetConfig(ctx.Viper) if err != nil { return err diff --git a/server/util.go b/server/util.go index 0c6fb54089..d8f5e17e6d 100644 --- a/server/util.go +++ b/server/util.go @@ -398,7 +398,7 @@ func openDB(rootDir string, backendType dbm.BackendType) (dbm.DB, error) { return dbm.NewDB("application", backendType, dataDir) } -func openTraceWriter(traceWriterFile string) (w io.Writer, err error) { +func openTraceWriter(traceWriterFile string) (w io.WriteCloser, err error) { if traceWriterFile == "" { return } diff --git a/telemetry/metrics.go b/telemetry/metrics.go index 686c7541ce..a0cb15b11f 100644 --- a/telemetry/metrics.go +++ b/telemetry/metrics.go @@ -71,7 +71,7 @@ type GatherResponse struct { } // New creates a new instance of Metrics -func New(cfg Config) (*Metrics, error) { +func New(cfg Config) (_ *Metrics, rerr error) { if !cfg.Enabled { return nil, nil } @@ -90,7 +90,12 @@ func New(cfg Config) (*Metrics, error) { metricsConf.EnableHostnameLabel = cfg.EnableHostnameLabel memSink := metrics.NewInmemSink(10*time.Second, time.Minute) - metrics.DefaultInmemSignal(memSink) + inMemSig := metrics.DefaultInmemSignal(memSink) + defer func() { + if rerr != nil { + inMemSig.Stop() + } + }() m := &Metrics{memSink: memSink} fanout := metrics.FanoutSink{memSink} diff --git a/testutil/network/util.go b/testutil/network/util.go index 1d3f08c5f8..e609f67151 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -41,7 +41,7 @@ func startInProcess(cfg Config, val *Validator) error { app := cfg.AppConstructor(*val) genDocProvider := node.DefaultGenesisDocProviderFunc(tmCfg) - tmNode, err := node.NewNode( + tmNode, err := node.NewNode( //resleak:notresource tmCfg, pvm.LoadOrGenFilePV(tmCfg.PrivValidatorKeyFile(), tmCfg.PrivValidatorStateFile()), nodeKey, diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 7834a6506f..56c7c570d5 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -100,12 +100,14 @@ func (s *IntegrationTestSuite) TestCLIValidateSignatures() { // write unsigned tx to file unsignedTx := testutil.WriteToNewTempFile(s.T(), res.String()) + defer unsignedTx.Close() 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()) + defer signedTxFile.Close() txBuilder, err := val.ClientCtx.TxConfig.WrapTxBuilder(signedTx) s.Require().NoError(err) _, err = TxValidateSignaturesExec(val.ClientCtx, signedTxFile.Name()) @@ -116,6 +118,7 @@ func (s *IntegrationTestSuite) TestCLIValidateSignatures() { s.Require().NoError(err) modifiedTxFile := testutil.WriteToNewTempFile(s.T(), string(bz)) + defer modifiedTxFile.Close() _, err = TxValidateSignaturesExec(val.ClientCtx, modifiedTxFile.Name()) s.Require().EqualError(err, "signatures validation failed") @@ -147,6 +150,7 @@ func (s *IntegrationTestSuite) TestCLISignGenOnly() { generatedStd, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args) s.Require().NoError(err) opFile := testutil.WriteToNewTempFile(s.T(), generatedStd.String()) + defer opFile.Close() commonArgs := []string{ fmt.Sprintf("--%s=%s", flags.FlagKeyringBackend, keyring.BackendTest), @@ -227,9 +231,12 @@ func (s *IntegrationTestSuite) TestCLISignGenOnly() { s.Require().Contains(err.Error(), tc.errMsg) } else { s.Require().NoError(err) - signedTx := testutil.WriteToNewTempFile(s.T(), out.String()) - _, err := TxBroadcastExec(val.ClientCtx, signedTx.Name()) - s.Require().NoError(err) + func() { + signedTx := testutil.WriteToNewTempFile(s.T(), out.String()) + defer signedTx.Close() + _, err := TxBroadcastExec(val.ClientCtx, signedTx.Name()) + s.Require().NoError(err) + }() } } } @@ -246,6 +253,7 @@ func (s *IntegrationTestSuite) TestCLISignBatch() { s.Require().NoError(err) outputFile := testutil.WriteToNewTempFile(s.T(), strings.Repeat(generatedStd.String(), 3)) + defer outputFile.Close() val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) // sign-batch file - offline is set but account-number and sequence are not @@ -277,6 +285,7 @@ func (s *IntegrationTestSuite) TestCLISignBatch() { // Sign batch malformed tx file. malformedFile := testutil.WriteToNewTempFile(s.T(), fmt.Sprintf("%smalformed", generatedStd)) + defer malformedFile.Close() _, err = TxSignBatchExec(val.ClientCtx, val.Address, malformedFile.Name(), fmt.Sprintf("--%s=%s", flags.FlagChainID, val.ClientCtx.ChainID)) s.Require().Error(err) @@ -375,6 +384,7 @@ func (s *IntegrationTestSuite) TestCLISignAminoJSON() { sendTokens, fmt.Sprintf("--%s=true", flags.FlagGenerateOnly)) require.NoError(err) fileUnsigned := testutil.WriteToNewTempFile(s.T(), txBz.String()) + defer fileUnsigned.Close() chainFlag := fmt.Sprintf("--%s=%s", flags.FlagChainID, val1.ClientCtx.ChainID) sigOnlyFlag := "--signature-only" signModeAminoFlag := "--sign-mode=amino-json" @@ -792,6 +802,7 @@ func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { // Write the output to disk unsignedTxFile := testutil.WriteToNewTempFile(s.T(), finalGeneratedTx.String()) + defer unsignedTxFile.Close() // Test validate-signatures res, err := TxValidateSignaturesExec(val1.ClientCtx, unsignedTxFile.Name()) @@ -824,6 +835,7 @@ func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { // Write the output to disk signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx.String()) + defer signedTxFile.Close() // validate Signature res, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) @@ -908,6 +920,7 @@ func (s *IntegrationTestSuite) TestCLIMultisignInsufficientCosigners() { // Save tx to file multiGeneratedTxFile := testutil.WriteToNewTempFile(s.T(), multiGeneratedTx.String()) + defer multiGeneratedTxFile.Close() // Multisign, sign with one signature val1.ClientCtx.HomeDir = strings.Replace(val1.ClientCtx.HomeDir, "simd", "simcli", 1) @@ -917,12 +930,14 @@ func (s *IntegrationTestSuite) TestCLIMultisignInsufficientCosigners() { s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) + defer sign1File.Close() multiSigWith1Signature, err := TxMultiSignExec(val1.ClientCtx, multisigRecord.Name, multiGeneratedTxFile.Name(), sign1File.Name()) s.Require().NoError(err) // Save tx to file multiSigWith1SignatureFile := testutil.WriteToNewTempFile(s.T(), multiSigWith1Signature.String()) + defer multiSigWith1SignatureFile.Close() _, err = TxValidateSignaturesExec(val1.ClientCtx, multiSigWith1SignatureFile.Name()) s.Require().Error(err) @@ -941,6 +956,7 @@ func (s *IntegrationTestSuite) TestCLIEncode() { ) s.Require().NoError(err) savedTxFile := testutil.WriteToNewTempFile(s.T(), normalGeneratedTx.String()) + defer savedTxFile.Close() // Encode encodeExec, err := TxEncodeExec(val1.ClientCtx, savedTxFile.Name()) @@ -1022,6 +1038,7 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { // Save tx to file multiGeneratedTxFile := testutil.WriteToNewTempFile(s.T(), multiGeneratedTx.String()) + defer multiGeneratedTxFile.Close() // Sign with account1 addr1, err := account1.GetAddress() @@ -1031,6 +1048,7 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) + defer sign1File.Close() // Sign with account2 addr2, err := account2.GetAddress() @@ -1039,6 +1057,7 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { s.Require().NoError(err) sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) + defer sign2File.Close() // Sign with dummy account dummyAddr, err := dummyAcc.GetAddress() @@ -1052,6 +1071,7 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { // Write the output to disk signedTxFile := testutil.WriteToNewTempFile(s.T(), multiSigWith2Signatures.String()) + defer signedTxFile.Close() _, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) @@ -1095,6 +1115,7 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { // Save multi tx to file multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), multisigTx.String()) + defer multiGeneratedTx2File.Close() // Sign using multisig. We're signing a tx on behalf of the multisig address, // even though the tx signer is NOT the multisig address. This is fine though, @@ -1155,6 +1176,7 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { // Save tx to file multiGeneratedTxFile := testutil.WriteToNewTempFile(s.T(), multiGeneratedTx.String()) + defer multiGeneratedTxFile.Close() addr1, err := account1.GetAddress() s.Require().NoError(err) @@ -1164,6 +1186,7 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { s.Require().NoError(err) sign1File := testutil.WriteToNewTempFile(s.T(), account1Signature.String()) + defer sign1File.Close() addr2, err := account2.GetAddress() s.Require().NoError(err) @@ -1172,6 +1195,7 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { s.Require().NoError(err) sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) + defer sign2File.Close() // Does not work in offline mode. _, err = TxMultiSignExec(val1.ClientCtx, multisigRecord.Name, multiGeneratedTxFile.Name(), "--offline", sign1File.Name(), sign2File.Name()) @@ -1183,6 +1207,7 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { // Write the output to disk signedTxFile := testutil.WriteToNewTempFile(s.T(), multiSigWith2Signatures.String()) + defer signedTxFile.Close() _, err = TxValidateSignaturesExec(val1.ClientCtx, signedTxFile.Name()) s.Require().NoError(err) @@ -1233,6 +1258,7 @@ func (s *IntegrationTestSuite) TestSignBatchMultisig() { // Write the output to disk filename := testutil.WriteToNewTempFile(s.T(), strings.Repeat(generatedStd.String(), 1)) + defer filename.Close() val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) addr1, err := account1.GetAddress() @@ -1243,6 +1269,7 @@ func (s *IntegrationTestSuite) TestSignBatchMultisig() { s.Require().Equal(1, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file file1 := testutil.WriteToNewTempFile(s.T(), res.String()) + defer file1.Close() addr2, err := account2.GetAddress() s.Require().NoError(err) @@ -1252,6 +1279,7 @@ func (s *IntegrationTestSuite) TestSignBatchMultisig() { s.Require().Equal(1, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file2 file2 := testutil.WriteToNewTempFile(s.T(), res.String()) + defer file2.Close() _, err = TxMultiSignExec(val.ClientCtx, multisigRecord.Name, filename.Name(), file1.Name(), file2.Name()) s.Require().NoError(err) } @@ -1295,6 +1323,7 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { // Write the output to disk filename := testutil.WriteToNewTempFile(s.T(), strings.Repeat(generatedStd.String(), 3)) + defer filename.Close() val.ClientCtx.HomeDir = strings.Replace(val.ClientCtx.HomeDir, "simd", "simcli", 1) queryResJSON, err := QueryAccountExec(val.ClientCtx, addr) @@ -1310,6 +1339,7 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { s.Require().Equal(3, len(strings.Split(strings.Trim(res.String(), "\n"), "\n"))) // write sigs to file file1 := testutil.WriteToNewTempFile(s.T(), res.String()) + defer file1.Close() // sign-batch file with account2 addr2, err := account2.GetAddress() @@ -1320,17 +1350,21 @@ func (s *IntegrationTestSuite) TestMultisignBatch() { // multisign the file file2 := testutil.WriteToNewTempFile(s.T(), res.String()) + defer file2.Close() res, err = TxMultiSignBatchExec(val.ClientCtx, filename.Name(), multisigRecord.Name, file1.Name(), file2.Name()) s.Require().NoError(err) signedTxs := strings.Split(strings.Trim(res.String(), "\n"), "\n") // Broadcast transactions. for _, signedTx := range signedTxs { - signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx) - val.ClientCtx.BroadcastMode = flags.BroadcastSync - _, err = TxBroadcastExec(val.ClientCtx, signedTxFile.Name()) - s.Require().NoError(err) - s.Require().NoError(s.network.WaitForNextBlock()) + func() { + signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx) + defer signedTxFile.Close() + val.ClientCtx.BroadcastMode = flags.BroadcastSync + _, err = TxBroadcastExec(val.ClientCtx, signedTxFile.Name()) + s.Require().NoError(err) + s.Require().NoError(s.network.WaitForNextBlock()) + }() } } @@ -1420,6 +1454,7 @@ func TestGetBroadcastCommandWithoutOfflineFlag(t *testing.T) { txContents, err := txCfg.TxJSONEncoder()(builder.GetTx()) require.NoError(t, err) txFile := testutil.WriteToNewTempFile(t, string(txContents)) + defer txFile.Close() cmd.SetArgs([]string{txFile.Name()}) err = cmd.ExecuteContext(ctx) @@ -1498,6 +1533,7 @@ func (s *IntegrationTestSuite) TestTxWithoutPublicKey() { txJSON, err := txCfg.TxJSONEncoder()(txBuilder.GetTx()) s.Require().NoError(err) unsignedTxFile := testutil.WriteToNewTempFile(s.T(), string(txJSON)) + defer unsignedTxFile.Close() // Sign the file with the unsignedTx. signedTx, err := TxSignExec(val1.ClientCtx, val1.Address, unsignedTxFile.Name(), fmt.Sprintf("--%s=true", cli.FlagOverwrite)) @@ -1514,6 +1550,7 @@ func (s *IntegrationTestSuite) TestTxWithoutPublicKey() { txJSON, err = val1.ClientCtx.Codec.MarshalJSON(&tx) s.Require().NoError(err) signedTxFile := testutil.WriteToNewTempFile(s.T(), string(txJSON)) + defer signedTxFile.Close() s.Require().True(strings.Contains(string(txJSON), "\"public_key\":null")) // Broadcast tx, test that it shouldn't panic. @@ -1553,11 +1590,13 @@ func (s *IntegrationTestSuite) TestSignWithMultiSignersAminoJSON() { txJSON, err := val0.ClientCtx.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) require.NoError(err) unsignedTxFile := testutil.WriteToNewTempFile(s.T(), string(txJSON)) + defer unsignedTxFile.Close() // Let val0 sign first the file with the unsignedTx. signedByVal0, err := TxSignExec(val0.ClientCtx, val0.Address, unsignedTxFile.Name(), "--overwrite", "--sign-mode=amino-json") require.NoError(err) signedByVal0File := testutil.WriteToNewTempFile(s.T(), signedByVal0.String()) + defer signedByVal0File.Close() // Then let val1 sign the file with signedByVal0. val1AccNum, val1Seq, err := val0.ClientCtx.AccountRetriever.GetAccountNumberSequence(val0.ClientCtx, val1.Address) @@ -1574,6 +1613,7 @@ func (s *IntegrationTestSuite) TestSignWithMultiSignersAminoJSON() { ) require.NoError(err) signedTxFile := testutil.WriteToNewTempFile(s.T(), signedTx.String()) + defer signedTxFile.Close() res, err := TxBroadcastExec( val0.ClientCtx, @@ -1872,6 +1912,7 @@ func (s *IntegrationTestSuite) TestAuxToFeeWithTips() { } else { require.NoError(err) genTxFile := testutil.WriteToNewTempFile(s.T(), string(res.Bytes())) + defer genTxFile.Close() // broadcast the tx res, err = TxAuxToFeeExec( diff --git a/x/authz/client/testutil/tx.go b/x/authz/client/testutil/tx.go index 1c7f7e4a30..7474d4a759 100644 --- a/x/authz/client/testutil/tx.go +++ b/x/authz/client/testutil/tx.go @@ -708,6 +708,7 @@ func (s *IntegrationTestSuite) TestExecAuthorizationWithExpiration() { // msg vote voteTx := fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.gov.v1.MsgVote","proposal_id":"1","voter":"%s","option":"VOTE_OPTION_YES"}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String()) execMsg := testutil.WriteToNewTempFile(s.T(), voteTx) + defer execMsg.Close() // waiting for authorization to expires time.Sleep(12 * time.Second) @@ -752,6 +753,7 @@ func (s *IntegrationTestSuite) TestNewExecGenericAuthorized() { // msg vote voteTx := fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.gov.v1.MsgVote","proposal_id":"1","voter":"%s","option":"VOTE_OPTION_YES"}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String()) execMsg := testutil.WriteToNewTempFile(s.T(), voteTx) + defer execMsg.Close() testCases := []struct { name string @@ -867,6 +869,7 @@ func (s *IntegrationTestSuite) TestNewExecGrantAuthorized() { ) s.Require().NoError(err) execMsg := testutil.WriteToNewTempFile(s.T(), normalGeneratedTx.String()) + defer execMsg.Close() testCases := []struct { name string args []string @@ -980,6 +983,7 @@ func (s *IntegrationTestSuite) TestExecSendAuthzWithAllowList() { ) s.Require().NoError(err) execMsg := testutil.WriteToNewTempFile(s.T(), validGeneratedTx.String()) + defer execMsg.Close() invalidGeneratedTx, err := clitestutil.MsgSendExec( val.ClientCtx, @@ -993,6 +997,7 @@ func (s *IntegrationTestSuite) TestExecSendAuthzWithAllowList() { ) s.Require().NoError(err) execMsg1 := testutil.WriteToNewTempFile(s.T(), invalidGeneratedTx.String()) + defer execMsg1.Close() // test sending to allowed address args := []string{ @@ -1057,6 +1062,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { delegateTx := fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgDelegate","delegator_address":"%s","validator_address":"%s","amount":{"denom":"%s","amount":"%s"}}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String(), val.ValAddress.String(), tokens.GetDenomByIndex(0), tokens[0].Amount) execMsg := testutil.WriteToNewTempFile(s.T(), delegateTx) + defer execMsg.Close() testCases := []struct { name string @@ -1149,6 +1155,7 @@ func (s *IntegrationTestSuite) TestExecDelegateAuthorization() { delegateTx = fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgDelegate","delegator_address":"%s","validator_address":"%s","amount":{"denom":"%s","amount":"%s"}}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String(), val.ValAddress.String(), tokens.GetDenomByIndex(0), tokens[0].Amount) execMsg = testutil.WriteToNewTempFile(s.T(), delegateTx) + defer execMsg.Close() testCases = []struct { name string @@ -1287,6 +1294,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { undelegateTx := fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgUndelegate","delegator_address":"%s","validator_address":"%s","amount":{"denom":"%s","amount":"%s"}}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String(), val.ValAddress.String(), tokens.GetDenomByIndex(0), tokens[0].Amount) execMsg := testutil.WriteToNewTempFile(s.T(), undelegateTx) + defer execMsg.Close() testCases := []struct { name string @@ -1382,6 +1390,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { undelegateTx = fmt.Sprintf(`{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgUndelegate","delegator_address":"%s","validator_address":"%s","amount":{"denom":"%s","amount":"%s"}}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}`, val.Address.String(), val.ValAddress.String(), tokens.GetDenomByIndex(0), tokens[0].Amount) execMsg = testutil.WriteToNewTempFile(s.T(), undelegateTx) + defer execMsg.Close() testCases = []struct { name string diff --git a/x/gov/client/testutil/tx.go b/x/gov/client/testutil/tx.go index 8a16691142..e87024ef06 100644 --- a/x/gov/client/testutil/tx.go +++ b/x/gov/client/testutil/tx.go @@ -89,6 +89,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { "deposit": "-324foocoin" }` invalidPropFile := testutil.WriteToNewTempFile(s.T(), invalidProp) + defer invalidPropFile.Close() // Create a valid new proposal JSON. propMetadata := []byte{42} @@ -109,6 +110,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() { "deposit": "%s" }`, authtypes.NewModuleAddress(types.ModuleName), base64.StdEncoding.EncodeToString(propMetadata), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431))) validPropFile := testutil.WriteToNewTempFile(s.T(), validProp) + defer validPropFile.Close() testCases := []struct { name string @@ -168,6 +170,7 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitLegacyProposal() { "deposit": "-324foocoin" }` invalidPropFile := testutil.WriteToNewTempFile(s.T(), invalidProp) + defer invalidPropFile.Close() validProp := fmt.Sprintf(`{ "title": "Text Proposal", "description": "Hello, World!", @@ -175,6 +178,8 @@ func (s *IntegrationTestSuite) TestNewCmdSubmitLegacyProposal() { "deposit": "%s" }`, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431))) validPropFile := testutil.WriteToNewTempFile(s.T(), validProp) + defer validPropFile.Close() + testCases := []struct { name string args []string