From 7214f07e78c35f12929dba02573ebd7c9742d656 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 7 Sep 2017 01:43:16 +0200 Subject: [PATCH] Merge #11125: Add bitcoin-cli -stdin and -stdinrpcpass functional tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 29e1dfbd9 [test] Add bitcoin-cli -stdin and -stdinrpcpass functional tests (João Barbosa) ce379b47b [test] Replace check_output with low level version (João Barbosa) 232e3e847 [test] Add assert_raises_process_error to assert process errors (João Barbosa) 5c18a84b9 [test] Add support for custom arguments to TestNodeCLI (João Barbosa) e1274947d [test] Improve assert_raises_jsonrpc docstring (João Barbosa) 769684132 Fix style in -stdin and -stdinrpcpass handling (João Barbosa) Pull request description: This patch adds tests for `bitcoin-cli` options `-stdin` (#7550) and `-stdinrpcpass` #10997. Tree-SHA512: fd8133f44876f2b5b41dfd3762b1988598f6b7bf13fb2385ad95876825d9c0b2b896ce4ea6eeb21012158e1f276907f155d37bb967198b609d2d3dddbfa334c1 remove duplicate method Signed-off-by: Pasta --- src/dash-cli.cpp | 9 ++++++--- test/functional/bitcoin_cli.py | 24 ++++++++++++++++-------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/dash-cli.cpp b/src/dash-cli.cpp index ebc1f3ad0d..8536fefd91 100644 --- a/src/dash-cli.cpp +++ b/src/dash-cli.cpp @@ -309,19 +309,22 @@ int CommandLineRPC(int argc, char *argv[]) } std::string rpcPass; if (gArgs.GetBoolArg("-stdinrpcpass", false)) { - if(!std::getline(std::cin,rpcPass)) + if (!std::getline(std::cin, rpcPass)) { throw std::runtime_error("-stdinrpcpass specified but failed to read from standard input"); + } gArgs.ForceSetArg("-rpcpassword", rpcPass); } std::vector args = std::vector(&argv[1], &argv[argc]); if (gArgs.GetBoolArg("-stdin", false)) { // Read one arg per line from stdin and append std::string line; - while (std::getline(std::cin,line)) + while (std::getline(std::cin, line)) { args.push_back(line); + } } - if (args.size() < 1) + if (args.size() < 1) { throw std::runtime_error("too few parameters (need at least command)"); + } std::string strMethod = args[0]; args.erase(args.begin()); // Remove trailing method name from arguments vector diff --git a/test/functional/bitcoin_cli.py b/test/functional/bitcoin_cli.py index 9b3dc61570..7bf5dcc264 100755 --- a/test/functional/bitcoin_cli.py +++ b/test/functional/bitcoin_cli.py @@ -4,7 +4,7 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. """Test dash-cli""" from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import assert_equal +from test_framework.util import assert_equal, assert_raises_process_error, get_auth_cookie class TestBitcoinCli(BitcoinTestFramework): @@ -16,16 +16,24 @@ class TestBitcoinCli(BitcoinTestFramework): """Main test logic""" self.log.info("Compare responses from gewalletinfo RPC and `dash-cli getwalletinfo`") - cli_get_info = self.nodes[0].cli.getwalletinfo() - rpc_get_info = self.nodes[0].getwalletinfo() - - assert_equal(cli_get_info, rpc_get_info) + cli_response = self.nodes[0].cli.getwalletinfo() + rpc_response = self.nodes[0].getwalletinfo() + assert_equal(cli_response, rpc_response) self.log.info("Compare responses from getblockchaininfo RPC and `dash-cli getblockchaininfo`") - cli_get_info = self.nodes[0].cli.getblockchaininfo() - rpc_get_info = self.nodes[0].getblockchaininfo() + cli_response = self.nodes[0].cli.getblockchaininfo() + rpc_response = self.nodes[0].getblockchaininfo() + assert_equal(cli_response, rpc_response) - assert_equal(cli_get_info, rpc_get_info) + user, password = get_auth_cookie(self.nodes[0].datadir) + + self.log.info("Test -stdinrpcpass option") + assert_equal(0, self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input=password).getblockcount()) + assert_raises_process_error(1, "incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input="foo").echo) + + self.log.info("Test -stdin and -stdinrpcpass") + assert_equal(["foo", "bar"], self.nodes[0].cli('-rpcuser=%s' % user, '-stdin', '-stdinrpcpass', input=password + "\nfoo\nbar").echo()) + assert_raises_process_error(1, "incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % user, '-stdin', '-stdinrpcpass', input="foo").echo) if __name__ == '__main__': TestBitcoinCli().main()