diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2014-10-07 14:22:58 -0400 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2014-10-09 10:28:27 -0400 |
commit | dbca89b74b76610331d21656cd6747f5bf8375d6 (patch) | |
tree | aaf91b54261aa4f57654367a3ee4fe96454bb784 /qa/rpc-tests/forknotify.py | |
parent | e01a7939d3a3b231f68ae2f36cbc4de0cf4d4999 (diff) |
Trigger -alertnotify if network is upgrading without you
This adds a -regetest-only undocumented (for regression testing only)
command-line option -blockversion=N to set block.nVersion.
Adds to the "has the rest of the network upgraded to a
block.nVersion we don't understand" code so it calls
-alertnotify when 51 of the last 100 blocks are up-version.
But it only alerts once, not with every subsequent new, upversion
block.
And adds a forknotify.py regression test to make sure it works.
Tested using forknotify.py:
Before adding CAlert::Notify, get:
Assertion failed: -alertnotify did not warn of up-version blocks
Before adding code to only alert once:
Assertion failed: -alertnotify excessive warning of up-version blocks
After final code in this pull:
Tests successful
Diffstat (limited to 'qa/rpc-tests/forknotify.py')
-rwxr-xr-x | qa/rpc-tests/forknotify.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/qa/rpc-tests/forknotify.py b/qa/rpc-tests/forknotify.py new file mode 100755 index 0000000000..a482f7cc5a --- /dev/null +++ b/qa/rpc-tests/forknotify.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# +# Test -alertnotify +# + +from test_framework import BitcoinTestFramework +from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException +from util import * +import os +import shutil + +class ForkNotifyTest(BitcoinTestFramework): + + alert_filename = None # Set by setup_network + + def setup_network(self, test_dir): + nodes = [] + self.alert_filename = os.path.join(test_dir, "alert.txt") + with open(self.alert_filename, 'w') as f: + pass # Just open then close to create zero-length file + nodes.append(start_node(0, test_dir, + ["-blockversion=2", "-alertnotify=echo %s >> '" + self.alert_filename + "'"])) + # Node1 mines block.version=211 blocks + nodes.append(start_node(1, test_dir, + ["-blockversion=211"])) + connect_nodes(nodes[1], 0) + + sync_blocks(nodes) + return nodes + + + def run_test(self, nodes): + # Mine 51 up-version blocks + nodes[1].setgenerate(True, 51) + sync_blocks(nodes) + # -alertnotify should trigger on the 51'st, + # but mine and sync another to give + # -alertnotify time to write + nodes[1].setgenerate(True, 1) + sync_blocks(nodes) + + with open(self.alert_filename, 'r') as f: + alert_text = f.read() + + if len(alert_text) == 0: + raise AssertionError("-alertnotify did not warn of up-version blocks") + + # Mine more up-version blocks, should not get more alerts: + nodes[1].setgenerate(True, 1) + sync_blocks(nodes) + nodes[1].setgenerate(True, 1) + sync_blocks(nodes) + + with open(self.alert_filename, 'r') as f: + alert_text2 = f.read() + + if alert_text != alert_text2: + raise AssertionError("-alertnotify excessive warning of up-version blocks") + +if __name__ == '__main__': + ForkNotifyTest().main() |