|
|
|
@ -28,8 +28,14 @@ Test is as follows:
@@ -28,8 +28,14 @@ Test is as follows:
|
|
|
|
|
- Restart node0 with -persistmempool. Verify that it has 5 |
|
|
|
|
transactions in its mempool. This tests that -persistmempool=0 |
|
|
|
|
does not overwrite a previously valid mempool stored on disk. |
|
|
|
|
- Remove node0 mempool.dat and verify savemempool RPC recreates it |
|
|
|
|
and verify that node1 can load it and has 5 transaction in its |
|
|
|
|
mempool. |
|
|
|
|
- Verify that savemempool throws when the RPC is called if |
|
|
|
|
node1 can't write to disk. |
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
import os |
|
|
|
|
import time |
|
|
|
|
|
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework |
|
|
|
@ -78,5 +84,27 @@ class MempoolPersistTest(BitcoinTestFramework):
@@ -78,5 +84,27 @@ class MempoolPersistTest(BitcoinTestFramework):
|
|
|
|
|
self.start_node(0) |
|
|
|
|
wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5) |
|
|
|
|
|
|
|
|
|
mempooldat0 = os.path.join(self.options.tmpdir, 'node0', 'regtest', 'mempool.dat') |
|
|
|
|
mempooldat1 = os.path.join(self.options.tmpdir, 'node1', 'regtest', 'mempool.dat') |
|
|
|
|
self.log.debug("Remove the mempool.dat file. Verify that savemempool to disk via RPC re-creates it") |
|
|
|
|
os.remove(mempooldat0) |
|
|
|
|
self.nodes[0].savemempool() |
|
|
|
|
assert os.path.isfile(mempooldat0) |
|
|
|
|
|
|
|
|
|
self.log.debug("Stop nodes, make node1 use mempool.dat from node0. Verify it has 5 transactions") |
|
|
|
|
os.rename(mempooldat0, mempooldat1) |
|
|
|
|
self.stop_nodes() |
|
|
|
|
self.start_node(1, extra_args=[]) |
|
|
|
|
wait_until(lambda: len(self.nodes[1].getrawmempool()) == 5) |
|
|
|
|
|
|
|
|
|
self.log.debug("Prevent bitcoind from writing mempool.dat to disk. Verify that `savemempool` fails") |
|
|
|
|
# to test the exception we are setting bad permissions on a tmp file called mempool.dat.new |
|
|
|
|
# which is an implementation detail that could change and break this test |
|
|
|
|
mempooldotnew1 = mempooldat1 + '.new' |
|
|
|
|
with os.fdopen(os.open(mempooldotnew1, os.O_CREAT, 0o000), 'w'): |
|
|
|
|
pass |
|
|
|
|
assert_raises_jsonrpc(-1, "Unable to dump mempool to disk", self.nodes[1].savemempool) |
|
|
|
|
os.remove(mempooldotnew1) |
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
MempoolPersistTest().main() |
|
|
|
|