Browse Source

Create SingleNodeConnCB class for RPC tests

pull/1/head
Alex Morcos 7 years ago
parent
commit
5fa66e4682
  1. 1
      qa/rpc-tests/maxuploadtarget.py
  2. 14
      qa/rpc-tests/test_framework/comptool.py
  3. 40
      qa/rpc-tests/test_framework/mininode.py

1
qa/rpc-tests/maxuploadtarget.py

@ -7,7 +7,6 @@ @@ -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
'''

14
qa/rpc-tests/test_framework/comptool.py

@ -27,20 +27,6 @@ generator that returns TestInstance objects. See below for definition. @@ -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
qa/rpc-tests/test_framework/mininode.py

@ -1008,6 +1008,20 @@ class msg_reject(object): @@ -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): @@ -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