Browse Source

Create SingleNodeConnCB class for RPC tests

tags/v0.15.1
Alex Morcos 5 years ago
parent
commit
5fa66e4682

+ 0
- 1
qa/rpc-tests/maxuploadtarget.py View File

@@ -7,7 +7,6 @@
from test_framework.mininode import *
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
from test_framework.comptool import wait_until
import time

'''

+ 0
- 14
qa/rpc-tests/test_framework/comptool.py View File

@@ -27,20 +27,6 @@ generator that returns TestInstance objects. See below for definition.

global mininode_lock

def wait_until(predicate, attempts=float('inf'), timeout=float('inf')):
attempt = 0
elapsed = 0

while attempt < attempts and elapsed < timeout:
with mininode_lock:
if predicate():
return True
attempt += 1
elapsed += 0.05
time.sleep(0.05)

return False

class RejectResult(object):
'''
Outcome that expects rejection of a transaction or block.

+ 40
- 0
qa/rpc-tests/test_framework/mininode.py View File

@@ -1008,6 +1008,20 @@ class msg_reject(object):
return "msg_reject: %s %d %s [%064x]" \
% (self.message, self.code, self.reason, self.data)

# Helper function
def wait_until(predicate, attempts=float('inf'), timeout=float('inf')):
attempt = 0
elapsed = 0

while attempt < attempts and elapsed < timeout:
with mininode_lock:
if predicate():
return True
attempt += 1
elapsed += 0.05
time.sleep(0.05)

return False

# This is what a callback should look like for NodeConn
# Reimplement the on_* functions to provide handling for events
@@ -1085,6 +1099,32 @@ class NodeConnCB(object):
def on_mempool(self, conn): pass
def on_pong(self, conn, message): pass

# More useful callbacks and functions for NodeConnCB's which have a single NodeConn
class SingleNodeConnCB(NodeConnCB):
def __init__(self):
NodeConnCB.__init__(self)
self.connection = None
self.ping_counter = 1
self.last_pong = msg_pong()

def add_connection(self, conn):
self.connection = conn

# Wrapper for the NodeConn's send_message function
def send_message(self, message):
self.connection.send_message(message)

def on_pong(self, conn, message):
self.last_pong = message

# Sync up with the node
def sync_with_ping(self, timeout=30):
def received_pong():
return (self.last_pong.nonce == self.ping_counter)
self.send_message(msg_ping(nonce=self.ping_counter))
success = wait_until(received_pong, timeout)
self.ping_counter += 1
return success

# The actual NodeConn class
# This class provides an interface for a p2p connection to a specified node

Loading…
Cancel
Save