mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-12 07:39:41 +02:00
Merge bitcoin/bitcoin#34965: cli: Return more helpful authentication errors
257769a7ceqa: Improve error message (Hodlinator)20a94c1524cli: Clearer error messages on authentication failure (Hodlinator)84c3f8d325refactor(rpc): GenerateAuthCookieResult -> AuthCookieResult (Hodlinator) Pull request description: Increases precision of error messages to help the user correct authentication issues. Inspired by #34935. ACKs for top commit: davidgumberg: utACK257769a7cemaflcko: review ACK257769a7ce🦇 achow101: ACK257769a7cejanb84: concept ACK257769a7ceTree-SHA512: 1799db4b2c0ab3b67ed3d768da08c6be4f4beaad91a77406884b73950b420c8264c70b8e60a26a9e6fac058370f6accdb73c821d19bebb6edfbc8d7b84d01232
This commit is contained in:
@@ -139,11 +139,11 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||
|
||||
self.log.info("Test -stdinrpcpass option")
|
||||
assert_equal(BLOCKS, self.nodes[0].cli(f'-rpcuser={user}', '-stdinrpcpass', input=password).getblockcount())
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword', self.nodes[0].cli(f'-rpcuser={user}', '-stdinrpcpass', input='foo').echo)
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword were specified', self.nodes[0].cli(f'-rpcuser={user}', '-stdinrpcpass', input='foo').echo)
|
||||
|
||||
self.log.info("Test -stdin and -stdinrpcpass")
|
||||
assert_equal(['foo', 'bar'], self.nodes[0].cli(f'-rpcuser={user}', '-stdin', '-stdinrpcpass', input=f'{password}\nfoo\nbar').echo())
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword', self.nodes[0].cli(f'-rpcuser={user}', '-stdin', '-stdinrpcpass', input='foo').echo)
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword were specified', self.nodes[0].cli(f'-rpcuser={user}', '-stdin', '-stdinrpcpass', input='foo').echo)
|
||||
|
||||
self.log.info("Test connecting to a non-existing server")
|
||||
assert_raises_process_error(1, "Could not connect to the server", self.nodes[0].cli('-rpcport=1').echo)
|
||||
@@ -196,7 +196,14 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||
self.nodes[0].replace_in_config([("#" + conf_rpcport, conf_rpcport)])
|
||||
|
||||
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)
|
||||
assert_raises_process_error(1, "Failed to read cookie file and no rpcpassword was specified.", self.nodes[0].cli('-rpccookiefile=does-not-exist', '-rpcpassword=').echo)
|
||||
|
||||
self.log.info("Test connecting with neither cookie file, nor password")
|
||||
assert_raises_process_error(1, "Cookie file was disabled via -norpccookiefile and no rpcpassword was specified.", self.nodes[0].cli("-norpccookiefile").echo)
|
||||
assert_raises_process_error(1, "Cookie file was disabled via -norpccookiefile and no rpcpassword was specified.", self.nodes[0].cli("-norpccookiefile", "-rpcpassword=").echo)
|
||||
|
||||
self.log.info("Test connecting with invalid cookie file")
|
||||
assert_raises_process_error(1, "Cookie file credentials were invalid and no rpcpassword was specified.", self.nodes[0].cli(f"-rpccookiefile={self.nodes[0].datadir_path / 'bitcoin.conf'}").echo)
|
||||
|
||||
self.log.info("Test connecting without RPC cookie file and with password arg")
|
||||
assert_equal(BLOCKS, self.nodes[0].cli('-norpccookiefile', f'-rpcuser={user}', f'-rpcpassword={password}').getblockcount())
|
||||
|
||||
@@ -31,7 +31,7 @@ class TestBitcoinIpcCli(BitcoinTestFramework):
|
||||
if error is None:
|
||||
assert_equal(result.stdout, '[\n "foo"\n]\n')
|
||||
else:
|
||||
assert_equal(result.stdout, error)
|
||||
assert result.stdout.startswith(error), f"Output didn't start with the expected error {error!r}:\n{result.stdout}"
|
||||
assert_equal(result.stderr, None)
|
||||
assert_equal(result.returncode, 0 if error is None else 1)
|
||||
|
||||
@@ -40,7 +40,7 @@ class TestBitcoinIpcCli(BitcoinTestFramework):
|
||||
if node.ipc_tmp_dir:
|
||||
self.log.info("Skipping a few checks because temporary directory path is too long")
|
||||
|
||||
http_auth_error = "error: Authorization failed: Incorrect rpcuser or rpcpassword\n"
|
||||
http_auth_error = "error: Authorization failed: Incorrect rpcuser or rpcpassword were specified."
|
||||
http_connect_error = f"error: timeout on transient error: Could not connect to the server 127.0.0.1:{rpc_port(node.index)}\n\nMake sure the bitcoind server is running and that you are connecting to the correct RPC port.\nUse \"bitcoin-cli -help\" for more info.\n"
|
||||
ipc_connect_error = "error: timeout on transient error: Connection refused\n\nProbably bitcoin-node is not running or not listening on a unix socket. Can be started with:\n\n bitcoin-node -chain=regtest -ipcbind=unix\n"
|
||||
ipc_http_conflict = "error: -rpcconnect and -ipcconnect options cannot both be enabled\n"
|
||||
|
||||
@@ -136,7 +136,7 @@ def assert_raises_process_error(returncode: int, output: str, fun: Callable, *ar
|
||||
if returncode != e.returncode:
|
||||
raise AssertionError("Unexpected returncode %i" % e.returncode)
|
||||
if output not in e.output:
|
||||
raise AssertionError("Expected substring not found:" + e.output)
|
||||
raise AssertionError(f"Expected substring not found in: {e.output!r}")
|
||||
else:
|
||||
raise AssertionError("No exception raised")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user