From 727b67e7b86567adff81d945044989de3b5d2d5f Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Wed, 15 Apr 2020 15:03:28 +0200 Subject: [PATCH 1/4] test: add coverage for bitcoin-cli -rpcwait in interface_bitcoin_cli.py --- test/functional/interface_bitcoin_cli.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/functional/interface_bitcoin_cli.py b/test/functional/interface_bitcoin_cli.py index 2e1e84b707..6077810a71 100755 --- a/test/functional/interface_bitcoin_cli.py +++ b/test/functional/interface_bitcoin_cli.py @@ -70,6 +70,7 @@ class TestBitcoinCli(BitcoinTestFramework): assert_equal(cli_get_info['proxy'], network_info['networks'][0]['proxy']) assert_equal(cli_get_info['difficulty'], blockchain_info['difficulty']) assert_equal(cli_get_info['chain'], blockchain_info['chain']) + if self.is_wallet_compiled(): self.log.info("Test that -getinfo returns the expected wallet info") assert_equal(cli_get_info['balance'], BALANCE) @@ -81,6 +82,17 @@ class TestBitcoinCli(BitcoinTestFramework): else: self.log.info("*** Wallet not compiled; -getinfo wallet tests skipped") + self.stop_node(0) + + self.log.info("Test -rpcwait option waits for RPC connection instead of failing") + # Start node without RPC connection. + self.nodes[0].start() + # Verify failure without -rpcwait. + assert_raises_process_error(1, "Could not connect to the server", self.nodes[0].cli('getblockcount').echo) + # Verify success using -rpcwait. + assert_equal(BLOCKS, self.nodes[0].cli('-rpcwait', 'getblockcount').send_cli()) + self.nodes[0].wait_for_rpc_connection() + if __name__ == '__main__': TestBitcoinCli().main() From becc8b9747c963b0fb1b927ced60d5bebed60be4 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Wed, 15 Apr 2020 15:05:30 +0200 Subject: [PATCH 2/4] test: verify bitcoin-cli -version with node stopped in interface_bitcoin_cli.py and improve/harmonize the test logging. --- test/functional/interface_bitcoin_cli.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/test/functional/interface_bitcoin_cli.py b/test/functional/interface_bitcoin_cli.py index 6077810a71..3a286982d2 100755 --- a/test/functional/interface_bitcoin_cli.py +++ b/test/functional/interface_bitcoin_cli.py @@ -25,11 +25,8 @@ class TestBitcoinCli(BitcoinTestFramework): """Main test logic""" self.nodes[0].generate(BLOCKS) - cli_response = self.nodes[0].cli("-version").send_cli() - assert "{} RPC client version".format(self.config['environment']['PACKAGE_NAME']) in cli_response - - self.log.info("Compare responses from getwalletinfo RPC and `bitcoin-cli getwalletinfo`") if self.is_wallet_compiled(): + self.log.info("Compare responses from getwalletinfo RPC and `bitcoin-cli getwalletinfo`") cli_response = self.nodes[0].cli.getwalletinfo() rpc_response = self.nodes[0].getwalletinfo() assert_equal(cli_response, rpc_response) @@ -55,10 +52,10 @@ class TestBitcoinCli(BitcoinTestFramework): self.log.info("Test connecting with non-existing RPC cookie file") assert_raises_process_error(1, "Could not locate RPC credentials", self.nodes[0].cli('-rpccookiefile=does-not-exist', '-rpcpassword=').echo) - self.log.info("Make sure that -getinfo with arguments fails") + self.log.info("Test -getinfo with arguments fails") assert_raises_process_error(1, "-getinfo takes no arguments", self.nodes[0].cli('-getinfo').help) - self.log.info("Test that -getinfo returns the expected network and blockchain info") + self.log.info("Test -getinfo returns expected network and blockchain info") cli_get_info = self.nodes[0].cli('-getinfo').send_cli() network_info = self.nodes[0].getnetworkinfo() blockchain_info = self.nodes[0].getblockchaininfo() @@ -72,7 +69,7 @@ class TestBitcoinCli(BitcoinTestFramework): assert_equal(cli_get_info['chain'], blockchain_info['chain']) if self.is_wallet_compiled(): - self.log.info("Test that -getinfo returns the expected wallet info") + self.log.info("Test -getinfo returns expected wallet info") assert_equal(cli_get_info['balance'], BALANCE) wallet_info = self.nodes[0].getwalletinfo() assert_equal(cli_get_info['keypoolsize'], wallet_info['keypoolsize']) @@ -84,6 +81,10 @@ class TestBitcoinCli(BitcoinTestFramework): self.stop_node(0) + self.log.info("Test -version with node stopped") + cli_response = self.nodes[0].cli("-version").send_cli() + assert "{} RPC client version".format(self.config['environment']['PACKAGE_NAME']) in cli_response + self.log.info("Test -rpcwait option waits for RPC connection instead of failing") # Start node without RPC connection. self.nodes[0].start() From bb13f46fb15c360c68e370d0106463afd590dc43 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Wed, 15 Apr 2020 15:13:42 +0200 Subject: [PATCH 3/4] test: verify cli.getwalletinfo in wallet section --- test/functional/interface_bitcoin_cli.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/functional/interface_bitcoin_cli.py b/test/functional/interface_bitcoin_cli.py index 3a286982d2..e18bdd2d1b 100755 --- a/test/functional/interface_bitcoin_cli.py +++ b/test/functional/interface_bitcoin_cli.py @@ -25,12 +25,6 @@ class TestBitcoinCli(BitcoinTestFramework): """Main test logic""" self.nodes[0].generate(BLOCKS) - if self.is_wallet_compiled(): - self.log.info("Compare responses from getwalletinfo RPC and `bitcoin-cli getwalletinfo`") - 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 `bitcoin-cli getblockchaininfo`") cli_response = self.nodes[0].cli.getblockchaininfo() rpc_response = self.nodes[0].getblockchaininfo() @@ -59,7 +53,6 @@ class TestBitcoinCli(BitcoinTestFramework): cli_get_info = self.nodes[0].cli('-getinfo').send_cli() network_info = self.nodes[0].getnetworkinfo() blockchain_info = self.nodes[0].getblockchaininfo() - assert_equal(cli_get_info['version'], network_info['version']) assert_equal(cli_get_info['blocks'], blockchain_info['blocks']) assert_equal(cli_get_info['timeoffset'], network_info['timeoffset']) @@ -69,15 +62,16 @@ class TestBitcoinCli(BitcoinTestFramework): assert_equal(cli_get_info['chain'], blockchain_info['chain']) if self.is_wallet_compiled(): - self.log.info("Test -getinfo returns expected wallet info") + self.log.info("Test -getinfo and bitcoin-cli getwalletinfo return expected wallet info") assert_equal(cli_get_info['balance'], BALANCE) wallet_info = self.nodes[0].getwalletinfo() assert_equal(cli_get_info['keypoolsize'], wallet_info['keypoolsize']) assert_equal(cli_get_info['paytxfee'], wallet_info['paytxfee']) assert_equal(cli_get_info['relayfee'], network_info['relayfee']) # unlocked_until is not tested because the wallet is not encrypted + assert_equal(self.nodes[0].cli.getwalletinfo(), wallet_info) else: - self.log.info("*** Wallet not compiled; -getinfo wallet tests skipped") + self.log.info("*** Wallet not compiled; cli getwalletinfo and -getinfo wallet tests skipped") self.stop_node(0) From c28c7b882b40cc75989dd102414de3b3dad69706 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Wed, 15 Apr 2020 15:24:52 +0200 Subject: [PATCH 4/4] test: add -getinfo "unlocked_until" and "headers" coverage --- test/functional/interface_bitcoin_cli.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/functional/interface_bitcoin_cli.py b/test/functional/interface_bitcoin_cli.py index e18bdd2d1b..07edc4e0ba 100755 --- a/test/functional/interface_bitcoin_cli.py +++ b/test/functional/interface_bitcoin_cli.py @@ -50,11 +50,14 @@ class TestBitcoinCli(BitcoinTestFramework): assert_raises_process_error(1, "-getinfo takes no arguments", self.nodes[0].cli('-getinfo').help) self.log.info("Test -getinfo returns expected network and blockchain info") + if self.is_wallet_compiled(): + self.nodes[0].encryptwallet(password) cli_get_info = self.nodes[0].cli('-getinfo').send_cli() network_info = self.nodes[0].getnetworkinfo() blockchain_info = self.nodes[0].getblockchaininfo() assert_equal(cli_get_info['version'], network_info['version']) assert_equal(cli_get_info['blocks'], blockchain_info['blocks']) + assert_equal(cli_get_info['headers'], blockchain_info['headers']) assert_equal(cli_get_info['timeoffset'], network_info['timeoffset']) assert_equal(cli_get_info['connections'], network_info['connections']) assert_equal(cli_get_info['proxy'], network_info['networks'][0]['proxy']) @@ -66,9 +69,9 @@ class TestBitcoinCli(BitcoinTestFramework): assert_equal(cli_get_info['balance'], BALANCE) wallet_info = self.nodes[0].getwalletinfo() assert_equal(cli_get_info['keypoolsize'], wallet_info['keypoolsize']) + assert_equal(cli_get_info['unlocked_until'], wallet_info['unlocked_until']) assert_equal(cli_get_info['paytxfee'], wallet_info['paytxfee']) assert_equal(cli_get_info['relayfee'], network_info['relayfee']) - # unlocked_until is not tested because the wallet is not encrypted assert_equal(self.nodes[0].cli.getwalletinfo(), wallet_info) else: self.log.info("*** Wallet not compiled; cli getwalletinfo and -getinfo wallet tests skipped")