mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-17 13:07:54 +02:00
Merge 2795e89cc5 into merged_master (Bitcoin PR bitcoin/bitcoin#28998)
This commit is contained in:
commit
f3ab17230b
2 changed files with 50 additions and 20 deletions
|
|
@ -951,7 +951,7 @@ static RPCHelpMan getnodeaddresses()
|
|||
static RPCHelpMan addpeeraddress()
|
||||
{
|
||||
return RPCHelpMan{"addpeeraddress",
|
||||
"\nAdd the address of a potential peer to the address manager. This RPC is for testing only.\n",
|
||||
"Add the address of a potential peer to an address manager table. This RPC is for testing only.",
|
||||
{
|
||||
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The IP address of the peer"},
|
||||
{"port", RPCArg::Type::NUM, RPCArg::Optional::NO, "The port of the peer"},
|
||||
|
|
@ -960,7 +960,8 @@ static RPCHelpMan addpeeraddress()
|
|||
RPCResult{
|
||||
RPCResult::Type::OBJ, "", "",
|
||||
{
|
||||
{RPCResult::Type::BOOL, "success", "whether the peer address was successfully added to the address manager"},
|
||||
{RPCResult::Type::BOOL, "success", "whether the peer address was successfully added to the address manager table"},
|
||||
{RPCResult::Type::STR, "error", /*optional=*/true, "error description, if the address could not be added"},
|
||||
},
|
||||
},
|
||||
RPCExamples{
|
||||
|
|
@ -989,8 +990,13 @@ static RPCHelpMan addpeeraddress()
|
|||
success = true;
|
||||
if (tried) {
|
||||
// Attempt to move the address to the tried addresses table.
|
||||
addrman.Good(address);
|
||||
if (!addrman.Good(address)) {
|
||||
success = false;
|
||||
obj.pushKV("error", "failed-adding-to-tried");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
obj.pushKV("error", "failed-adding-to-new");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -324,10 +324,10 @@ class NetTest(BitcoinTestFramework):
|
|||
self.restart_node(1, ["-checkaddrman=1", "-test=addrman"], clear_addrman=True)
|
||||
node = self.nodes[1]
|
||||
|
||||
self.log.debug("Test that addpeerinfo is a hidden RPC")
|
||||
self.log.debug("Test that addpeeraddress is a hidden RPC")
|
||||
# It is hidden from general help, but its detailed help may be called directly.
|
||||
assert "addpeerinfo" not in node.help()
|
||||
assert "addpeerinfo" in node.help("addpeerinfo")
|
||||
assert "addpeeraddress" not in node.help()
|
||||
assert "unknown command: addpeeraddress" not in node.help("addpeeraddress")
|
||||
|
||||
self.log.debug("Test that adding an empty address fails")
|
||||
assert_equal(node.addpeeraddress(address="", port=8333), {"success": False})
|
||||
|
|
@ -340,26 +340,50 @@ class NetTest(BitcoinTestFramework):
|
|||
assert_raises_rpc_error(-1, "JSON integer out of range", self.nodes[0].addpeeraddress, address="1.2.3.4", port=-1)
|
||||
assert_raises_rpc_error(-1, "JSON integer out of range", self.nodes[0].addpeeraddress, address="1.2.3.4", port=65536)
|
||||
|
||||
self.log.debug("Test that adding a valid address to the new table succeeds")
|
||||
assert_equal(node.addpeeraddress(address="1.0.0.0", tried=False, port=8333), {"success": True})
|
||||
addrman = node.getrawaddrman()
|
||||
assert_equal(len(addrman["tried"]), 0)
|
||||
new_table = list(addrman["new"].values())
|
||||
assert_equal(len(new_table), 1)
|
||||
assert_equal(new_table[0]["address"], "1.0.0.0")
|
||||
assert_equal(new_table[0]["port"], 8333)
|
||||
|
||||
self.log.debug("Test that adding an already-present new address to the new and tried tables fails")
|
||||
for value in [True, False]:
|
||||
assert_equal(node.addpeeraddress(address="1.0.0.0", tried=value, port=8333), {"success": False, "error": "failed-adding-to-new"})
|
||||
assert_equal(len(node.getnodeaddresses(count=0)), 1)
|
||||
|
||||
self.log.debug("Test that adding a valid address to the tried table succeeds")
|
||||
self.addr_time = int(time.time())
|
||||
node.setmocktime(self.addr_time)
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=True, port=8333), {"success": True})
|
||||
with node.assert_debug_log(expected_msgs=["CheckAddrman: new 0, tried 1, total 1 started"]):
|
||||
addrs = node.getnodeaddresses(count=0) # getnodeaddresses re-runs the addrman checks
|
||||
assert_equal(len(addrs), 1)
|
||||
assert_equal(addrs[0]["address"], "1.2.3.4")
|
||||
assert_equal(addrs[0]["port"], 8333)
|
||||
addrman = node.getrawaddrman()
|
||||
assert_equal(len(addrman["new"]), 1)
|
||||
tried_table = list(addrman["tried"].values())
|
||||
assert_equal(len(tried_table), 1)
|
||||
assert_equal(tried_table[0]["address"], "1.2.3.4")
|
||||
assert_equal(tried_table[0]["port"], 8333)
|
||||
node.getnodeaddresses(count=0) # getnodeaddresses re-runs the addrman checks
|
||||
|
||||
self.log.debug("Test that adding an already-present tried address to the new and tried tables fails")
|
||||
for value in [True, False]:
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=value, port=8333), {"success": False})
|
||||
assert_equal(len(node.getnodeaddresses(count=0)), 1)
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=value, port=8333), {"success": False, "error": "failed-adding-to-new"})
|
||||
assert_equal(len(node.getnodeaddresses(count=0)), 2)
|
||||
|
||||
self.log.debug("Test that adding a second address, this time to the new table, succeeds")
|
||||
self.log.debug("Test that adding an address, which collides with the address in tried table, fails")
|
||||
colliding_address = "1.2.5.45" # grinded address that produces a tried-table collision
|
||||
assert_equal(node.addpeeraddress(address=colliding_address, tried=True, port=8333), {"success": False, "error": "failed-adding-to-tried"})
|
||||
# When adding an address to the tried table, it's first added to the new table.
|
||||
# As we fail to move it to the tried table, it remains in the new table.
|
||||
addrman_info = node.getaddrmaninfo()
|
||||
assert_equal(addrman_info["all_networks"]["tried"], 1)
|
||||
assert_equal(addrman_info["all_networks"]["new"], 2)
|
||||
|
||||
self.log.debug("Test that adding an another address to the new table succeeds")
|
||||
assert_equal(node.addpeeraddress(address="2.0.0.0", port=8333), {"success": True})
|
||||
with node.assert_debug_log(expected_msgs=["CheckAddrman: new 1, tried 1, total 2 started"]):
|
||||
addrs = node.getnodeaddresses(count=0) # getnodeaddresses re-runs the addrman checks
|
||||
assert_equal(len(addrs), 2)
|
||||
addrman_info = node.getaddrmaninfo()
|
||||
assert_equal(addrman_info["all_networks"]["tried"], 1)
|
||||
assert_equal(addrman_info["all_networks"]["new"], 3)
|
||||
node.getnodeaddresses(count=0) # getnodeaddresses re-runs the addrman checks
|
||||
|
||||
def test_sendmsgtopeer(self):
|
||||
node = self.nodes[0]
|
||||
|
|
@ -428,7 +452,7 @@ class NetTest(BitcoinTestFramework):
|
|||
self.log.debug("Test that getrawaddrman is a hidden RPC")
|
||||
# It is hidden from general help, but its detailed help may be called directly.
|
||||
assert "getrawaddrman" not in node.help()
|
||||
assert "getrawaddrman" in node.help("getrawaddrman")
|
||||
assert "unknown command: getrawaddrman" not in node.help("getrawaddrman")
|
||||
|
||||
def check_addr_information(result, expected):
|
||||
"""Utility to compare a getrawaddrman result entry with an expected entry"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue