diff options
author | João Barbosa <joao.paulo.barbosa@gmail.com> | 2017-07-31 22:13:27 +0100 |
---|---|---|
committer | João Barbosa <joao.paulo.barbosa@gmail.com> | 2017-10-10 23:46:04 +0100 |
commit | df18d29a02ae2804ae8490ea816fe0e88a971e8e (patch) | |
tree | a0132a35c16e65a03d99d2d71b4ae182ceb5c624 /test/functional/notifications.py | |
parent | 9c72a464f87ad80d16ea6720dfc6a53578b94c92 (diff) | |
download | bitcoin-df18d29a02ae2804ae8490ea816fe0e88a971e8e.tar.xz |
[tests] Add -blocknotify functional test
Diffstat (limited to 'test/functional/notifications.py')
-rwxr-xr-x | test/functional/notifications.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/functional/notifications.py b/test/functional/notifications.py new file mode 100755 index 0000000000..80a74c0020 --- /dev/null +++ b/test/functional/notifications.py @@ -0,0 +1,58 @@ +#!/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 and -blocknotify options.""" +import os + +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import assert_equal, wait_until + +class NotificationsTest(BitcoinTestFramework): + def set_test_params(self): + self.num_nodes = 2 + + 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.extra_args = [["-blockversion=2", + "-alertnotify=echo %%s >> %s" % self.alert_filename, + "-blocknotify=echo %%s >> %s" % self.block_filename], + ["-blockversion=211"]] + 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) + + # file content should equal the generated blocks hashes + with open(self.block_filename, 'r') as f: + assert_equal(sorted(blocks), sorted(f.read().splitlines())) + + # 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 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) + + with open(self.alert_filename, 'r', encoding='utf8') as f: + alert_text = f.read() + + # Mine more up-version blocks, should not get more alerts: + self.nodes[1].generate(2) + self.sync_all() + + with open(self.alert_filename, 'r', encoding='utf8') as f: + alert_text2 = f.read() + + self.log.info("-alertnotify should not continue notifying for more unknown version blocks") + assert_equal(alert_text, alert_text2) + +if __name__ == '__main__': + NotificationsTest().main() |