def _test_getnodeaddresses(self): self.nodes[0].add_p2p_connection(P2PInterface()) # send some addresses to the node via the p2p message addr msg = msg_addr() imported_addrs = [] for i in range(256): a = "123.123.123.{}".format(i) imported_addrs.append(a) addr = CAddress() addr.time = 100000000 addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = a addr.port = 9333 msg.addrs.append(addr) self.nodes[0].p2p.send_and_ping(msg) # obtain addresses via rpc call and check they were ones sent in before REQUEST_COUNT = 10 node_addresses = self.nodes[0].getnodeaddresses(REQUEST_COUNT) assert_equal(len(node_addresses), REQUEST_COUNT) for a in node_addresses: assert_greater_than(a["time"], 1527811200) # 1st June 2018 assert_equal(a["services"], NODE_NETWORK | NODE_WITNESS) assert a["address"] in imported_addrs assert_equal(a["port"], 9333) assert_raises_rpc_error(-8, "Address count out of range", self.nodes[0].getnodeaddresses, -1) # addrman's size cannot be known reliably after insertion, as hash collisions may occur # so only test that requesting a large number of addresses returns less than that LARGE_REQUEST_COUNT = 10000 node_addresses = self.nodes[0].getnodeaddresses(LARGE_REQUEST_COUNT) assert_greater_than(LARGE_REQUEST_COUNT, len(node_addresses))
def _test_getnodeaddresses(self): self.nodes[0].add_p2p_connection(P2PInterface()) # send some addresses to the node via the p2p message addr msg = msg_addr() imported_addrs = [] for i in range(256): a = "123.123.123.{}".format(i) imported_addrs.append(a) addr = CAddress() addr.time = 100000000 addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = a addr.port = 21102 msg.addrs.append(addr) self.nodes[0].p2p.send_and_ping(msg) # obtain addresses via rpc call and check they were ones sent in before REQUEST_COUNT = 10 node_addresses = self.nodes[0].getnodeaddresses(REQUEST_COUNT) assert_equal(len(node_addresses), REQUEST_COUNT) for a in node_addresses: assert_greater_than(a["time"], 1527811200) # 1st June 2018 assert_equal(a["services"], NODE_NETWORK | NODE_WITNESS) assert a["address"] in imported_addrs assert_equal(a["port"], 21102) assert_raises_rpc_error(-8, "Address count out of range", self.nodes[0].getnodeaddresses, -1) # addrman's size cannot be known reliably after insertion, as hash collisions may occur # so only test that requesting a large number of addresses returns less than that LARGE_REQUEST_COUNT = 10000 node_addresses = self.nodes[0].getnodeaddresses(LARGE_REQUEST_COUNT) assert_greater_than(LARGE_REQUEST_COUNT, len(node_addresses))
def setup_rand_addr_msg(self, num): addrs = [] for i in range(num): addr = CAddress() addr.time = self.mocktime + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "%i.%i.%i.%i" % (random.randrange(128,169), random.randrange(1,255), random.randrange(1,255), random.randrange(1,255)) addr.port = 8333 addrs.append(addr) msg = msg_addr() msg.addrs = addrs return msg
def setup_rand_addr_msg(self, num): addrs = [] for i in range(num): addr = CAddress() addr.time = self.mocktime + i addr.nServices = P2P_SERVICES addr.ip = f"{random.randrange(128,169)}.{random.randrange(1,255)}.{random.randrange(1,255)}.{random.randrange(1,255)}" addr.port = 8333 addrs.append(addr) msg = msg_addr() msg.addrs = addrs return msg
def gen_addrs(n): addrs = [] for i in range(n): addr = CAddress() addr.time = int(time.time()) addr.nServices = NODE_NETWORK | NODE_WITNESS # Use first octets to occupy different AddrMan buckets first_octet = i >> 8 second_octet = i % 256 addr.ip = "{}.{}.1.1".format(first_octet, second_octet) addr.port = 8333 addrs.append(addr) return addrs
def setup_addr_msg(self, num): addrs = [] for i in range(num): addr = CAddress() addr.time = self.mocktime + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = f"123.123.123.{self.counter % 256}" addr.port = 8333 + i addrs.append(addr) self.counter += 1 msg = msg_addr() msg.addrs = addrs return msg
def setup_addr_msg(self, num, sequential_ips=True): addrs = [] for i in range(num): addr = CAddress() addr.time = self.mocktime + random.randrange(-100, 100) addr.nServices = P2P_SERVICES if sequential_ips: assert self.counter < 256**2 # Don't allow the returned ip addresses to wrap. addr.ip = f"123.123.{self.counter // 256}.{self.counter % 256}" self.counter += 1 else: addr.ip = f"{random.randrange(128,169)}.{random.randrange(1,255)}.{random.randrange(1,255)}.{random.randrange(1,255)}" addr.port = 8333 + i addrs.append(addr) msg = msg_addr() msg.addrs = addrs return msg
from test_framework.util import assert_equal I2P_ADDR = "c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p" ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = P2P_SERVICES # Add one I2P address at an arbitrary position. if i == 5: addr.net = addr.NET_I2P addr.ip = I2P_ADDR else: addr.ip = f"123.123.123.{i % 256}" addr.port = 6333 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): expected_set = set((addr.ip, addr.port) for addr in ADDRS) received_set = set((addr.ip, addr.port) for addr in message.addrs) if expected_set == received_set: self.addrv2_received_and_checked = True
""" Test p2p addr-fetch connections """ import time from test_framework.messages import msg_addr, CAddress, NODE_NETWORK, NODE_WITNESS from test_framework.p2p import P2PInterface, p2p_lock from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal ADDR = CAddress() ADDR.time = int(time.time()) ADDR.nServices = NODE_NETWORK | NODE_WITNESS ADDR.ip = "192.0.0.8" ADDR.port = 18444 class P2PAddrFetch(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = True self.num_nodes = 1 def run_test(self): node = self.nodes[0] self.log.info("Connect to an addr-fetch peer") peer = node.add_outbound_p2p_connection(P2PInterface(), p2p_idx=0, connection_type="addr-fetch") info = node.getpeerinfo() assert_equal(len(info), 1)
NODE_WITNESS, msg_addr, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( assert_equal, ) import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 1604 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (1604 <= addr.port < 8343) class AddrTest(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import EleccoinTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 9833 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (9833 <= addr.port < 8343) self.addrv2_received_and_checked = True
CAddress, msg_addr, ) from test_framework.p2p import ( P2PInterface, p2p_lock, P2P_SERVICES, ) from test_framework.test_framework import UmkoinTestFramework from test_framework.util import assert_equal ADDR = CAddress() ADDR.time = int(time.time()) ADDR.nServices = P2P_SERVICES ADDR.ip = "192.0.0.8" ADDR.port = 16444 class P2PAddrFetch(UmkoinTestFramework): def set_test_params(self): self.setup_clean_chain = True self.num_nodes = 1 def assert_getpeerinfo(self, *, peer_ids): num_peers = len(peer_ids) info = self.nodes[0].getpeerinfo() assert_equal(len(info), num_peers) for n in range(0, num_peers): assert_equal(info[n]['id'], peer_ids[n]) assert_equal(info[n]['connection_type'], 'addr-fetch')
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 39328 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (39328 <= addr.port < 8343) self.addrv2_received_and_checked = True
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 8101 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (8101 <= addr.port < 8343) self.addrv2_received_and_checked = True
NODE_WITNESS, msg_addr, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( assert_equal, ) import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 34230 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (34230 <= addr.port < 34230 + 10) # Sugarchain: Ports class AddrTest(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
msg_addr, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import TokyocoinTestFramework from test_framework.util import ( assert_equal, ) import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 1446 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (1446 <= addr.port < 1456) class AddrTest(TokyocoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
from test_framework.messages import ( CAddress, msg_addrv2, NODE_NETWORK, ) from test_framework.mininode import P2PInterface from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK addr.ip = "123.123.123.{}".format(i % 256) addr.port = 10605 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, NODE_NETWORK) assert addr.ip.startswith('123.123.123.') assert (10605 <= addr.port < 10615) self.addrv2_received_and_checked = True
NODE_WITNESS, msg_addr, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import MonkecoinTestFramework from test_framework.util import ( assert_equal, ) import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 1165 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (1165 <= addr.port < 1175) class AddrTest(MonkecoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import WidecoinTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 8553 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (8553 <= addr.port < 8343) self.addrv2_received_and_checked = True
from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( assert_equal, assert_greater_than_or_equal, ) import os import random import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 8333 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (8333 <= addr.port < 8343) class AddrTest(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
msg_addr, ) from test_framework.mininode import ( P2PInterface, ) from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( assert_equal, ) import time ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 29333 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): def on_addr(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (29333 <= addr.port < 29343) class AddrTest(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = False self.num_nodes = 1
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import MAGATestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 50308 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2 = True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (50308 <= addr.port < 8343) self.addrv2_received_and_checked = True
CAddress, msg_addrv2, NODE_NETWORK, NODE_WITNESS, ) from test_framework.p2p import P2PInterface from test_framework.test_framework import AFCOTestFramework from test_framework.util import assert_equal ADDRS = [] for i in range(10): addr = CAddress() addr.time = int(time.time()) + i addr.nServices = NODE_NETWORK | NODE_WITNESS addr.ip = "123.123.123.{}".format(i % 256) addr.port = 33584 + i ADDRS.append(addr) class AddrReceiver(P2PInterface): addrv2_received_and_checked = False def __init__(self): super().__init__(support_addrv2=True) def on_addrv2(self, message): for addr in message.addrs: assert_equal(addr.nServices, 9) assert addr.ip.startswith('123.123.123.') assert (33584 <= addr.port < 8343) self.addrv2_received_and_checked = True