mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 09:53:47 +01:00
Add test for rpc addpeeraddress with "tried" argument
Co-authored-by: Amiti Uttarwar <amiti@uttarwar.org> Co-authored-by: John Newbery <john@johnnewbery.com> Co-authored-by: Martin Zumsande <mzumsande@gmail.com>
This commit is contained in:
parent
ef242f5213
commit
869f136816
@ -239,7 +239,16 @@ class NetTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(-8, "Network not recognized: Foo", self.nodes[0].getnodeaddresses, 1, "Foo")
|
||||
|
||||
def test_addpeeraddress(self):
|
||||
"""RPC addpeeraddress sets the source address equal to the destination address.
|
||||
If an address with the same /16 as an existing new entry is passed, it will be
|
||||
placed in the same new bucket and have a 1/64 chance of the bucket positions
|
||||
colliding (depending on the value of nKey in the addrman), in which case the
|
||||
new address won't be added. The probability of collision can be reduced to
|
||||
1/2^16 = 1/65536 by using an address from a different /16. We avoid this here
|
||||
by first testing adding a tried table entry before testing adding a new table one.
|
||||
"""
|
||||
self.log.info("Test addpeeraddress")
|
||||
self.restart_node(1, ["-checkaddrman=1"])
|
||||
node = self.nodes[1]
|
||||
|
||||
self.log.debug("Test that addpeerinfo is a hidden RPC")
|
||||
@ -251,17 +260,25 @@ class NetTest(BitcoinTestFramework):
|
||||
assert_equal(node.addpeeraddress(address="", port=8333), {"success": False})
|
||||
assert_equal(node.getnodeaddresses(count=0), [])
|
||||
|
||||
self.log.debug("Test that adding a valid address succeeds")
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", port=8333), {"success": True})
|
||||
addrs = node.getnodeaddresses(count=0)
|
||||
assert_equal(len(addrs), 1)
|
||||
assert_equal(addrs[0]["address"], "1.2.3.4")
|
||||
assert_equal(addrs[0]["port"], 8333)
|
||||
self.log.debug("Test that adding a valid address to the tried table succeeds")
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=True, port=8333), {"success": True})
|
||||
with node.assert_debug_log(expected_msgs=["Addrman checks started: new 0, tried 1, total 1"]):
|
||||
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)
|
||||
|
||||
self.log.debug("Test that adding the same address again when already present fails")
|
||||
assert_equal(node.addpeeraddress(address="1.2.3.4", port=8333), {"success": False})
|
||||
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)
|
||||
|
||||
self.log.debug("Test that adding a second address, this time 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=["Addrman checks started: new 1, tried 1, total 2"]):
|
||||
addrs = node.getnodeaddresses(count=0) # getnodeaddresses re-runs the addrman checks
|
||||
assert_equal(len(addrs), 2)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
NetTest().main()
|
||||
|
Loading…
Reference in New Issue
Block a user