[tests] use wait_until in mempool_persist.py

This commit is contained in:
John Newbery 2017-05-05 09:17:39 -04:00
parent 35da2aeed7
commit 329ac3bab1

View file

@ -6,11 +6,11 @@
By default, bitcoind will dump mempool on shutdown and By default, bitcoind will dump mempool on shutdown and
then reload it on startup. This can be overridden with then reload it on startup. This can be overridden with
the -persistmempool=false command line option. the -persistmempool=0 command line option.
Test is as follows: Test is as follows:
- start node0, node1 and node2. node1 has -persistmempool=false - start node0, node1 and node2. node1 has -persistmempool=0
- create 5 transactions on node2 to its own address. Note that these - create 5 transactions on node2 to its own address. Note that these
are not sent to node0 or node1 addresses because we don't want are not sent to node0 or node1 addresses because we don't want
them to be saved in the wallet. them to be saved in the wallet.
@ -20,17 +20,19 @@ Test is as follows:
in its mempool. Shutdown node0. This tests that by default the in its mempool. Shutdown node0. This tests that by default the
mempool is persistent. mempool is persistent.
- startup node1. Verify that its mempool is empty. Shutdown node1. - startup node1. Verify that its mempool is empty. Shutdown node1.
This tests that with -persistmempool=false, the mempool is not This tests that with -persistmempool=0, the mempool is not
dumped to disk when the node is shut down. dumped to disk when the node is shut down.
- Restart node0 with -persistmempool=false. Verify that its mempool is - Restart node0 with -persistmempool=0. Verify that its mempool is
empty. Shutdown node0. This tests that with -persistmempool=false, empty. Shutdown node0. This tests that with -persistmempool=0,
the mempool is not loaded from disk on start up. the mempool is not loaded from disk on start up.
- Restart node0 with -persistmempool=true. Verify that it has 5 - Restart node0 with -persistmempool. Verify that it has 5
transactions in its mempool. This tests that -persistmempool=false transactions in its mempool. This tests that -persistmempool=0
does not overwrite a previously valid mempool stored on disk. does not overwrite a previously valid mempool stored on disk.
""" """
import time
from test_framework.mininode import wait_until
from test_framework.test_framework import BitcoinTestFramework from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import * from test_framework.util import *
@ -38,18 +40,10 @@ class MempoolPersistTest(BitcoinTestFramework):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# We need 3 nodes for this test. Node1 does not have a persistent mempool.
self.num_nodes = 3 self.num_nodes = 3
self.setup_clean_chain = False self.setup_clean_chain = False
self.extra_args = [[], ["-persistmempool=0"], []]
def setup_network(self):
# We need 3 nodes for this test. Node1 does not have a persistent mempool.
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir))
self.nodes.append(start_node(1, self.options.tmpdir, ["-persistmempool=false"]))
self.nodes.append(start_node(2, self.options.tmpdir))
connect_nodes_bi(self.nodes, 0, 2)
connect_nodes_bi(self.nodes, 1, 2)
self.is_network_split = False
def run_test(self): def run_test(self):
chain_height = self.nodes[0].getblockcount() chain_height = self.nodes[0].getblockcount()
@ -57,6 +51,7 @@ class MempoolPersistTest(BitcoinTestFramework):
self.log.debug("Mine a single block to get out of IBD") self.log.debug("Mine a single block to get out of IBD")
self.nodes[0].generate(1) self.nodes[0].generate(1)
self.sync_all()
self.log.debug("Send 5 transactions from node2 (to its own address)") self.log.debug("Send 5 transactions from node2 (to its own address)")
for i in range(5): for i in range(5):
@ -72,20 +67,24 @@ class MempoolPersistTest(BitcoinTestFramework):
self.nodes = [] self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir)) self.nodes.append(start_node(0, self.options.tmpdir))
self.nodes.append(start_node(1, self.options.tmpdir)) self.nodes.append(start_node(1, self.options.tmpdir))
assert_equal(len(self.nodes[0].getrawmempool()), 5) # Give bitcoind a second to reload the mempool
time.sleep(1)
assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
assert_equal(len(self.nodes[1].getrawmempool()), 0) assert_equal(len(self.nodes[1].getrawmempool()), 0)
self.log.debug("Stop-start node0 with -persistmempool=false. Verify that it doesn't load its mempool.dat file.") self.log.debug("Stop-start node0 with -persistmempool=0. Verify that it doesn't load its mempool.dat file.")
stop_nodes(self.nodes) stop_nodes(self.nodes)
self.nodes = [] self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, ["-persistmempool=false"])) self.nodes.append(start_node(0, self.options.tmpdir, ["-persistmempool=0"]))
# Give bitcoind a second to reload the mempool
time.sleep(1)
assert_equal(len(self.nodes[0].getrawmempool()), 0) assert_equal(len(self.nodes[0].getrawmempool()), 0)
self.log.debug("Stop-start node0. Verify that it has the transactions in its mempool.") self.log.debug("Stop-start node0. Verify that it has the transactions in its mempool.")
stop_nodes(self.nodes) stop_nodes(self.nodes)
self.nodes = [] self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir)) self.nodes.append(start_node(0, self.options.tmpdir))
assert_equal(len(self.nodes[0].getrawmempool()), 5) assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
if __name__ == '__main__': if __name__ == '__main__':
MempoolPersistTest().main() MempoolPersistTest().main()