mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-29 21:42:32 +02:00
QA/Mininode: Support node-to-test connections
This commit is contained in:
parent
34ff7c53e9
commit
97ec3d2042
@ -24,6 +24,7 @@ import asyncio
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import logging
|
import logging
|
||||||
|
import socket
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
@ -174,12 +175,32 @@ class P2PConnection(asyncio.Protocol):
|
|||||||
self.recvbuf = b""
|
self.recvbuf = b""
|
||||||
self.magic_bytes = MAGIC_BYTES[net]
|
self.magic_bytes = MAGIC_BYTES[net]
|
||||||
|
|
||||||
def peer_connect(self, dstaddr, dstport, *, net, timeout_factor):
|
def peer_connect(self, dstaddr, dstport, *, net, timeout_factor, node_outgoing=False):
|
||||||
self.peer_connect_helper(dstaddr, dstport, net, timeout_factor)
|
self.peer_connect_helper(dstaddr, dstport, net, timeout_factor)
|
||||||
|
|
||||||
|
self.node_outgoing = node_outgoing
|
||||||
loop = NetworkThread.network_event_loop
|
loop = NetworkThread.network_event_loop
|
||||||
logger.debug('Connecting to Bitcoin Node: %s:%d' % (self.dstaddr, self.dstport))
|
|
||||||
coroutine = loop.create_connection(lambda: self, host=self.dstaddr, port=self.dstport)
|
if self.node_outgoing:
|
||||||
|
logger.debug('Connecting from Bitcoin Node: %s:%d' % (self.dstaddr, self.dstport))
|
||||||
|
|
||||||
|
listen_sock = socket.socket()
|
||||||
|
listen_sock.bind(('127.0.0.1', 0))
|
||||||
|
listen_sock.listen(1)
|
||||||
|
listen_port = listen_sock.getsockname()[1]
|
||||||
|
self.rpc.addnode('127.0.0.1:%u' % (listen_port,), 'onetry', 'outbound-full-relay')
|
||||||
|
(sock, addr) = listen_sock.accept()
|
||||||
|
assert sock
|
||||||
|
listen_sock.close()
|
||||||
|
|
||||||
|
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||||
|
sock.setblocking(False)
|
||||||
|
coroutine = loop.create_connection(lambda: self, sock=sock)
|
||||||
|
else:
|
||||||
|
logger.debug('Connecting to Bitcoin Node: %s:%d' % (self.dstaddr, self.dstport))
|
||||||
|
|
||||||
|
coroutine = loop.create_connection(lambda: self, host=self.dstaddr, port=self.dstport)
|
||||||
|
|
||||||
return lambda: loop.call_soon_threadsafe(loop.create_task, coroutine)
|
return lambda: loop.call_soon_threadsafe(loop.create_task, coroutine)
|
||||||
|
|
||||||
def peer_accept_connection(self, connect_id, connect_cb=lambda: None, *, net, timeout_factor):
|
def peer_accept_connection(self, connect_id, connect_cb=lambda: None, *, net, timeout_factor):
|
||||||
|
@ -612,6 +612,7 @@ class TestNode():
|
|||||||
if 'dstaddr' not in kwargs:
|
if 'dstaddr' not in kwargs:
|
||||||
kwargs['dstaddr'] = '127.0.0.1'
|
kwargs['dstaddr'] = '127.0.0.1'
|
||||||
|
|
||||||
|
p2p_conn.rpc = self
|
||||||
p2p_conn.peer_connect(**kwargs, net=self.chain, timeout_factor=self.timeout_factor)()
|
p2p_conn.peer_connect(**kwargs, net=self.chain, timeout_factor=self.timeout_factor)()
|
||||||
self.p2ps.append(p2p_conn)
|
self.p2ps.append(p2p_conn)
|
||||||
p2p_conn.wait_until(lambda: p2p_conn.is_connected, check_connected=False)
|
p2p_conn.wait_until(lambda: p2p_conn.is_connected, check_connected=False)
|
||||||
|
Loading…
Reference in New Issue
Block a user