mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +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
1 changed files with 25 additions and 8 deletions
|
@ -239,7 +239,16 @@ class NetTest(BitcoinTestFramework):
|
||||||
assert_raises_rpc_error(-8, "Network not recognized: Foo", self.nodes[0].getnodeaddresses, 1, "Foo")
|
assert_raises_rpc_error(-8, "Network not recognized: Foo", self.nodes[0].getnodeaddresses, 1, "Foo")
|
||||||
|
|
||||||
def test_addpeeraddress(self):
|
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.log.info("Test addpeeraddress")
|
||||||
|
self.restart_node(1, ["-checkaddrman=1"])
|
||||||
node = self.nodes[1]
|
node = self.nodes[1]
|
||||||
|
|
||||||
self.log.debug("Test that addpeerinfo is a hidden RPC")
|
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.addpeeraddress(address="", port=8333), {"success": False})
|
||||||
assert_equal(node.getnodeaddresses(count=0), [])
|
assert_equal(node.getnodeaddresses(count=0), [])
|
||||||
|
|
||||||
self.log.debug("Test that adding a valid address succeeds")
|
self.log.debug("Test that adding a valid address to the tried table succeeds")
|
||||||
assert_equal(node.addpeeraddress(address="1.2.3.4", port=8333), {"success": True})
|
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=True, port=8333), {"success": True})
|
||||||
addrs = node.getnodeaddresses(count=0)
|
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(len(addrs), 1)
|
||||||
assert_equal(addrs[0]["address"], "1.2.3.4")
|
assert_equal(addrs[0]["address"], "1.2.3.4")
|
||||||
assert_equal(addrs[0]["port"], 8333)
|
assert_equal(addrs[0]["port"], 8333)
|
||||||
|
|
||||||
self.log.debug("Test that adding the same address again when already present fails")
|
self.log.debug("Test that adding an already-present tried address to the new and tried tables fails")
|
||||||
assert_equal(node.addpeeraddress(address="1.2.3.4", port=8333), {"success": False})
|
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(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__':
|
if __name__ == '__main__':
|
||||||
NetTest().main()
|
NetTest().main()
|
||||||
|
|
Loading…
Add table
Reference in a new issue