mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-11 07:37:54 +00:00
[tests] sync_with_ping should assert that ping hasn't timed out
sync_with_ping currently returns false if the timeout expires, and it is the caller's responsibility to fail the test. However, none of the tests currently assert on sync_with_ping()'s return code. This commit adds an assert to sync_with_ping so the test will fail if the timeout expires. This commit also removes all the duplicate implementations of sync_with_ping() from the individual tests.
This commit is contained in:
parent
6426716a99
commit
6a18bb9a36
@ -190,7 +190,8 @@ class AssumeValidTest(BitcoinTestFramework):
|
|||||||
# Send all blocks to node1. All blocks will be accepted.
|
# Send all blocks to node1. All blocks will be accepted.
|
||||||
for i in range(2202):
|
for i in range(2202):
|
||||||
node1.send_message(msg_block(self.blocks[i]))
|
node1.send_message(msg_block(self.blocks[i]))
|
||||||
node1.sync_with_ping() # make sure the most recent block is synced
|
# Syncing 2200 blocks can take a while on slow systems. Give it plenty of time to sync.
|
||||||
|
node1.sync_with_ping(120)
|
||||||
assert_equal(self.nodes[1].getblock(self.nodes[1].getbestblockhash())['height'], 2202)
|
assert_equal(self.nodes[1].getblock(self.nodes[1].getbestblockhash())['height'], 2202)
|
||||||
|
|
||||||
# Send blocks to node2. Block 102 will be rejected.
|
# Send blocks to node2. Block 102 will be rejected.
|
||||||
|
@ -68,15 +68,6 @@ class TestNode(NodeConnCB):
|
|||||||
def on_close(self, conn):
|
def on_close(self, conn):
|
||||||
self.peer_disconnected = True
|
self.peer_disconnected = True
|
||||||
|
|
||||||
# Sync up with the node after delivery of a block
|
|
||||||
def sync_with_ping(self, timeout=30):
|
|
||||||
def received_pong():
|
|
||||||
return (self.last_pong.nonce == self.ping_counter)
|
|
||||||
self.connection.send_message(msg_ping(nonce=self.ping_counter))
|
|
||||||
success = wait_until(received_pong, timeout=timeout)
|
|
||||||
self.ping_counter += 1
|
|
||||||
return success
|
|
||||||
|
|
||||||
class MaxUploadTest(BitcoinTestFramework):
|
class MaxUploadTest(BitcoinTestFramework):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -88,21 +88,6 @@ class TestNode(NodeConnCB):
|
|||||||
def on_pong(self, conn, message):
|
def on_pong(self, conn, message):
|
||||||
self.last_pong = message
|
self.last_pong = message
|
||||||
|
|
||||||
# Sync up with the node after delivery of a block
|
|
||||||
def sync_with_ping(self, timeout=30):
|
|
||||||
self.connection.send_message(msg_ping(nonce=self.ping_counter))
|
|
||||||
received_pong = False
|
|
||||||
sleep_time = 0.05
|
|
||||||
while not received_pong and timeout > 0:
|
|
||||||
time.sleep(sleep_time)
|
|
||||||
timeout -= sleep_time
|
|
||||||
with mininode_lock:
|
|
||||||
if self.last_pong.nonce == self.ping_counter:
|
|
||||||
received_pong = True
|
|
||||||
self.ping_counter += 1
|
|
||||||
return received_pong
|
|
||||||
|
|
||||||
|
|
||||||
class AcceptBlockTest(BitcoinTestFramework):
|
class AcceptBlockTest(BitcoinTestFramework):
|
||||||
def add_options(self, parser):
|
def add_options(self, parser):
|
||||||
parser.add_option("--testbinary", dest="testbinary",
|
parser.add_option("--testbinary", dest="testbinary",
|
||||||
|
@ -62,15 +62,6 @@ class TestNode(NodeConnCB):
|
|||||||
def on_close(self, conn):
|
def on_close(self, conn):
|
||||||
self.peer_disconnected = True
|
self.peer_disconnected = True
|
||||||
|
|
||||||
# Sync up with the node after delivery of a block
|
|
||||||
def sync_with_ping(self, timeout=30):
|
|
||||||
def received_pong():
|
|
||||||
return (self.last_pong.nonce == self.ping_counter)
|
|
||||||
self.connection.send_message(msg_ping(nonce=self.ping_counter))
|
|
||||||
success = wait_until(received_pong, timeout=timeout)
|
|
||||||
self.ping_counter += 1
|
|
||||||
return success
|
|
||||||
|
|
||||||
def send_mempool(self):
|
def send_mempool(self):
|
||||||
self.lastInv = []
|
self.lastInv = []
|
||||||
self.send_message(msg_mempool())
|
self.send_message(msg_mempool())
|
||||||
|
@ -80,13 +80,6 @@ class TestNode(NodeConnCB):
|
|||||||
timeout -= self.sleep_time
|
timeout -= self.sleep_time
|
||||||
raise AssertionError("Sync failed to complete")
|
raise AssertionError("Sync failed to complete")
|
||||||
|
|
||||||
def sync_with_ping(self, timeout=60):
|
|
||||||
self.send_message(msg_ping(nonce=self.ping_counter))
|
|
||||||
test_function = lambda: self.last_pong.nonce == self.ping_counter
|
|
||||||
self.sync(test_function, timeout)
|
|
||||||
self.ping_counter += 1
|
|
||||||
return
|
|
||||||
|
|
||||||
def wait_for_block(self, blockhash, timeout=60):
|
def wait_for_block(self, blockhash, timeout=60):
|
||||||
test_function = lambda: self.last_block != None and self.last_block.sha256 == blockhash
|
test_function = lambda: self.last_block != None and self.last_block.sha256 == blockhash
|
||||||
self.sync(test_function, timeout)
|
self.sync(test_function, timeout)
|
||||||
@ -148,7 +141,7 @@ class TestNode(NodeConnCB):
|
|||||||
if with_witness:
|
if with_witness:
|
||||||
tx_message = msg_witness_tx(tx)
|
tx_message = msg_witness_tx(tx)
|
||||||
self.send_message(tx_message)
|
self.send_message(tx_message)
|
||||||
self.sync_with_ping()
|
self.sync_with_ping(60)
|
||||||
assert_equal(tx.hash in self.connection.rpc.getrawmempool(), accepted)
|
assert_equal(tx.hash in self.connection.rpc.getrawmempool(), accepted)
|
||||||
if (reason != None and not accepted):
|
if (reason != None and not accepted):
|
||||||
# Check the rejection reason as well.
|
# Check the rejection reason as well.
|
||||||
@ -161,7 +154,7 @@ class TestNode(NodeConnCB):
|
|||||||
self.send_message(msg_witness_block(block))
|
self.send_message(msg_witness_block(block))
|
||||||
else:
|
else:
|
||||||
self.send_message(msg_block(block))
|
self.send_message(msg_block(block))
|
||||||
self.sync_with_ping()
|
self.sync_with_ping(60)
|
||||||
assert_equal(self.connection.rpc.getbestblockhash() == block.hash, accepted)
|
assert_equal(self.connection.rpc.getbestblockhash() == block.hash, accepted)
|
||||||
|
|
||||||
|
|
||||||
@ -235,7 +228,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
block = self.build_next_block(nVersion=1)
|
block = self.build_next_block(nVersion=1)
|
||||||
block.solve()
|
block.solve()
|
||||||
self.test_node.send_message(msg_block(block))
|
self.test_node.send_message(msg_block(block))
|
||||||
self.test_node.sync_with_ping() # make sure the block was processed
|
self.test_node.sync_with_ping(60) # make sure the block was processed
|
||||||
txid = block.vtx[0].sha256
|
txid = block.vtx[0].sha256
|
||||||
|
|
||||||
self.nodes[0].generate(99) # let the block mature
|
self.nodes[0].generate(99) # let the block mature
|
||||||
@ -251,7 +244,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
assert_equal(msg_tx(tx).serialize(), msg_witness_tx(tx).serialize())
|
assert_equal(msg_tx(tx).serialize(), msg_witness_tx(tx).serialize())
|
||||||
|
|
||||||
self.test_node.send_message(msg_witness_tx(tx))
|
self.test_node.send_message(msg_witness_tx(tx))
|
||||||
self.test_node.sync_with_ping() # make sure the tx was processed
|
self.test_node.sync_with_ping(60) # make sure the tx was processed
|
||||||
assert(tx.hash in self.nodes[0].getrawmempool())
|
assert(tx.hash in self.nodes[0].getrawmempool())
|
||||||
# Save this transaction for later
|
# Save this transaction for later
|
||||||
self.utxo.append(UTXO(tx.sha256, 0, 49*100000000))
|
self.utxo.append(UTXO(tx.sha256, 0, 49*100000000))
|
||||||
@ -291,7 +284,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
# But it should not be permanently marked bad...
|
# But it should not be permanently marked bad...
|
||||||
# Resend without witness information.
|
# Resend without witness information.
|
||||||
self.test_node.send_message(msg_block(block))
|
self.test_node.send_message(msg_block(block))
|
||||||
self.test_node.sync_with_ping()
|
self.test_node.sync_with_ping(60)
|
||||||
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
||||||
|
|
||||||
sync_blocks(self.nodes)
|
sync_blocks(self.nodes)
|
||||||
@ -1257,7 +1250,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
# Spending a higher version witness output is not allowed by policy,
|
# Spending a higher version witness output is not allowed by policy,
|
||||||
# even with fRequireStandard=false.
|
# even with fRequireStandard=false.
|
||||||
self.test_node.test_transaction_acceptance(tx3, with_witness=True, accepted=False)
|
self.test_node.test_transaction_acceptance(tx3, with_witness=True, accepted=False)
|
||||||
self.test_node.sync_with_ping()
|
self.test_node.sync_with_ping(60)
|
||||||
with mininode_lock:
|
with mininode_lock:
|
||||||
assert(b"reserved for soft-fork upgrades" in self.test_node.last_reject.reason)
|
assert(b"reserved for soft-fork upgrades" in self.test_node.last_reject.reason)
|
||||||
|
|
||||||
@ -1387,7 +1380,7 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
for i in range(NUM_TESTS):
|
for i in range(NUM_TESTS):
|
||||||
# Ping regularly to keep the connection alive
|
# Ping regularly to keep the connection alive
|
||||||
if (not i % 100):
|
if (not i % 100):
|
||||||
self.test_node.sync_with_ping()
|
self.test_node.sync_with_ping(60)
|
||||||
# Choose random number of inputs to use.
|
# Choose random number of inputs to use.
|
||||||
num_inputs = random.randint(1, 10)
|
num_inputs = random.randint(1, 10)
|
||||||
# Create a slight bias for producing more utxos
|
# Create a slight bias for producing more utxos
|
||||||
|
@ -46,21 +46,6 @@ class TestNode(NodeConnCB):
|
|||||||
def on_pong(self, conn, message):
|
def on_pong(self, conn, message):
|
||||||
self.last_pong = message
|
self.last_pong = message
|
||||||
|
|
||||||
# Sync up with the node after delivery of a block
|
|
||||||
def sync_with_ping(self, timeout=30):
|
|
||||||
self.connection.send_message(msg_ping(nonce=self.ping_counter))
|
|
||||||
received_pong = False
|
|
||||||
sleep_time = 0.05
|
|
||||||
while not received_pong and timeout > 0:
|
|
||||||
time.sleep(sleep_time)
|
|
||||||
timeout -= sleep_time
|
|
||||||
with mininode_lock:
|
|
||||||
if self.last_pong.nonce == self.ping_counter:
|
|
||||||
received_pong = True
|
|
||||||
self.ping_counter += 1
|
|
||||||
return received_pong
|
|
||||||
|
|
||||||
|
|
||||||
class VersionBitsWarningTest(BitcoinTestFramework):
|
class VersionBitsWarningTest(BitcoinTestFramework):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -1563,11 +1563,14 @@ class NodeConnCB(object):
|
|||||||
self.sync_with_ping()
|
self.sync_with_ping()
|
||||||
|
|
||||||
# Sync up with the node
|
# Sync up with the node
|
||||||
def sync_with_ping(self, timeout=30):
|
def sync_with_ping(self, timeout=60):
|
||||||
def received_pong():
|
def received_pong():
|
||||||
return (self.last_pong.nonce == self.ping_counter)
|
return (self.last_pong.nonce == self.ping_counter)
|
||||||
self.send_message(msg_ping(nonce=self.ping_counter))
|
self.send_message(msg_ping(nonce=self.ping_counter))
|
||||||
success = wait_until(received_pong, timeout=timeout)
|
success = wait_until(received_pong, timeout=timeout)
|
||||||
|
if not success:
|
||||||
|
logger.error("sync_with_ping failed!")
|
||||||
|
raise AssertionError("sync_with_ping failed!")
|
||||||
self.ping_counter += 1
|
self.ping_counter += 1
|
||||||
|
|
||||||
return success
|
return success
|
||||||
|
Loading…
Reference in New Issue
Block a user