Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14864511
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
View Options
diff --git a/test/functional/feature_notifications.py b/test/functional/feature_notifications.py
index 77506ea2e5..a8bad79458 100755
--- a/test/functional/feature_notifications.py
+++ b/test/functional/feature_notifications.py
@@ -1,103 +1,120 @@
#!/usr/bin/env python3
# Copyright (c) 2014-2019 The Bitcoin Core developers
# Copyright (c) 2018 The Bitcoin 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, connect_nodes_bi, wait_until
-FORK_WARNING_MESSAGE = "Warning: Large-work fork detected, forking after block {}\n"
+FORK_WARNING_MESSAGE = "Warning: Large-work fork detected, forking after block {}"
class NotificationsTest(BitcoinTestFramework):
def set_test_params(self):
self.num_nodes = 2
self.setup_clean_chain = True
def skip_test_if_missing_module(self):
self.skip_if_no_wallet()
def setup_network(self):
- self.alert_filename = os.path.join(self.options.tmpdir, "alert.txt")
- self.block_filename = os.path.join(self.options.tmpdir, "blocks.txt")
- self.tx_filename = os.path.join(
- self.options.tmpdir, "transactions.txt")
+ 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 %s >> {}".format(
- self.alert_filename),
- "-blocknotify=echo %s >> {}".format(self.block_filename)],
+ "-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 %s >> {}".format(self.tx_filename)]]
+ "-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 file size before reading the
- # content
- wait_until(lambda: os.path.isfile(self.block_filename) and os.stat(
- self.block_filename).st_size >= (block_count * 65), timeout=10)
+ # 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)
- # file content should equal the generated blocks hashes
- with open(self.block_filename, 'r', encoding="utf-8") as f:
- assert_equal(sorted(blocks), sorted(l.strip()
- for l in f.read().splitlines()))
+ # 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 file size before reading the
- # content
- wait_until(lambda: os.path.isfile(self.tx_filename) and os.stat(
- self.tx_filename).st_size >= (block_count * 65), timeout=10)
-
- # file content should equal the generated transaction hashes
+ # 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)))
- with open(self.tx_filename, 'r', encoding="ascii") as f:
- assert_equal(sorted(txids_rpc), sorted(l.strip()
- for l in f.read().splitlines()))
- os.remove(self.tx_filename)
+ assert_equal(
+ sorted(txids_rpc), sorted(
+ os.listdir(
+ self.walletnotify_dir)))
+ 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.restart_node(1)
connect_nodes_bi(self.nodes[0], self.nodes[1])
- wait_until(lambda: os.path.isfile(self.tx_filename) and os.stat(
- self.tx_filename).st_size >= (block_count * 65), timeout=10)
+ wait_until(
+ lambda: len(
+ os.listdir(
+ self.walletnotify_dir)) == block_count,
+ timeout=10)
- # file content should equal the generated transaction hashes
+ # directory content should equal the generated transaction hashes
txids_rpc = list(
map(lambda t: t['txid'], self.nodes[1].listtransactions("*", block_count)))
- with open(self.tx_filename, 'r', encoding="ascii") as f:
- assert_equal(sorted(txids_rpc), sorted(l.strip()
- for l in f.read().splitlines()))
+ assert_equal(
+ sorted(txids_rpc), sorted(
+ os.listdir(
+ self.walletnotify_dir)))
# Create an invalid chain and ensure the node warns.
self.log.info("test -alertnotify for forked chain")
fork_block = self.nodes[0].getbestblockhash()
self.nodes[0].generate(1)
invalid_block = self.nodes[0].getbestblockhash()
self.nodes[0].generate(7)
# Invalidate a large branch, which should trigger an alert.
self.nodes[0].invalidateblock(invalid_block)
# Give bitcoind 10 seconds to write the alert notification
- wait_until(lambda: os.path.isfile(self.alert_filename) and
- os.path.getsize(self.alert_filename), timeout=10)
+ wait_until(lambda: len(os.listdir(self.alertnotify_dir)), timeout=10)
+
+ # The notification command is unable to properly handle the spaces on
+ # windows. Skip the content check in this case.
+ if os.name != 'nt':
+ assert FORK_WARNING_MESSAGE.format(
+ fork_block) in os.listdir(self.alertnotify_dir)
- self.log.info(self.alert_filename)
- with open(self.alert_filename, 'r', encoding='utf8') as f:
- assert_equal(f.read(), (FORK_WARNING_MESSAGE.format(fork_block)))
+ for notify_file in os.listdir(self.alertnotify_dir):
+ os.remove(os.path.join(self.alertnotify_dir, notify_file))
if __name__ == '__main__':
NotificationsTest().main()
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, May 21, 20:13 (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5865850
Default Alt Text
(7 KB)
Attached To
rSTAGING Bitcoin ABC staging
Event Timeline
Log In to Comment