mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
d09b13066c
ca6d86c322 tests: Stop node before removing the notification file (Chun Kuan Lee) Pull request description: Stop node before removing the notification file to make sure the command has been terminated. After then we could removing those files safely and do not receive any permission error. (See #14446) The permission error is Windows specific, documented in python doc: >On Windows, attempting to remove a file that is in use causes an exception to be raised See https://docs.python.org/3/library/os.html#os.remove Tree-SHA512: fbdabf3a9a838bb59ba207dd9e9fbdd87c702a99ad66bee0b2b1537f80f8630d22d9d5e9c4ded23a82a66bfc10989227fb024b27393425abe0e5a2ad4e4cbb82
86 lines
3.9 KiB
Python
Executable File
86 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) 2014-2016 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Test the -alertnotify, -blocknotify and -walletnotify options."""
|
|
import os
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import assert_equal, wait_until, connect_nodes_bi
|
|
|
|
class NotificationsTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.num_nodes = 2
|
|
self.setup_clean_chain = True
|
|
|
|
def setup_network(self):
|
|
self.alertnotify_dir = os.path.join(self.options.tmpdir, "alertnotify")
|
|
self.blocknotify_dir = os.path.join(self.options.tmpdir, "blocknotify")
|
|
self.walletnotify_dir = os.path.join(self.options.tmpdir, "walletnotify")
|
|
os.mkdir(self.alertnotify_dir)
|
|
os.mkdir(self.blocknotify_dir)
|
|
os.mkdir(self.walletnotify_dir)
|
|
|
|
# -alertnotify and -blocknotify on node0, walletnotify on node1
|
|
self.extra_args = [["-blockversion=2",
|
|
"-alertnotify=echo > {}".format(os.path.join(self.alertnotify_dir, '%s')),
|
|
"-blocknotify=echo > {}".format(os.path.join(self.blocknotify_dir, '%s'))],
|
|
["-blockversion=211",
|
|
"-rescan",
|
|
"-walletnotify=echo > {}".format(os.path.join(self.walletnotify_dir, '%s'))]]
|
|
super().setup_network()
|
|
|
|
def run_test(self):
|
|
self.log.info("test -blocknotify")
|
|
block_count = 10
|
|
blocks = self.nodes[1].generate(block_count)
|
|
|
|
# wait at most 10 seconds for expected number of files before reading the content
|
|
wait_until(lambda: len(os.listdir(self.blocknotify_dir)) == block_count, timeout=10)
|
|
|
|
# directory content should equal the generated blocks hashes
|
|
assert_equal(sorted(blocks), sorted(os.listdir(self.blocknotify_dir)))
|
|
|
|
self.log.info("test -walletnotify")
|
|
# wait at most 10 seconds for expected number of files before reading the content
|
|
wait_until(lambda: len(os.listdir(self.walletnotify_dir)) == block_count, timeout=10)
|
|
|
|
# directory content should equal the generated transaction hashes
|
|
txids_rpc = list(map(lambda t: t['txid'], self.nodes[1].listtransactions("*", block_count)))
|
|
assert_equal(sorted(txids_rpc), sorted(os.listdir(self.walletnotify_dir)))
|
|
self.stop_node(1)
|
|
for tx_file in os.listdir(self.walletnotify_dir):
|
|
os.remove(os.path.join(self.walletnotify_dir, tx_file))
|
|
|
|
self.log.info("test -walletnotify after rescan")
|
|
# restart node to rescan to force wallet notifications
|
|
self.start_node(1)
|
|
connect_nodes_bi(self.nodes, 0, 1)
|
|
|
|
wait_until(lambda: len(os.listdir(self.walletnotify_dir)) == block_count, timeout=10)
|
|
|
|
# directory content should equal the generated transaction hashes
|
|
txids_rpc = list(map(lambda t: t['txid'], self.nodes[1].listtransactions("*", block_count)))
|
|
assert_equal(sorted(txids_rpc), sorted(os.listdir(self.walletnotify_dir)))
|
|
|
|
# Mine another 41 up-version blocks. -alertnotify should trigger on the 51st.
|
|
self.log.info("test -alertnotify")
|
|
self.nodes[1].generate(41)
|
|
self.sync_all()
|
|
|
|
# Give dashd 10 seconds to write the alert notification
|
|
wait_until(lambda: len(os.listdir(self.alertnotify_dir)), timeout=10)
|
|
|
|
for notify_file in os.listdir(self.alertnotify_dir):
|
|
os.remove(os.path.join(self.alertnotify_dir, notify_file))
|
|
|
|
# Mine more up-version blocks, should not get more alerts:
|
|
self.nodes[1].generate(2)
|
|
self.sync_all()
|
|
|
|
self.log.info("-alertnotify should not continue notifying for more unknown version blocks")
|
|
assert_equal(len(os.listdir(self.alertnotify_dir)), 0)
|
|
|
|
if __name__ == '__main__':
|
|
NotificationsTest().main()
|