aboutsummaryrefslogtreecommitdiff
path: root/qa/rpc-tests/forknotify.py
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2014-10-07 14:22:58 -0400
committerGavin Andresen <gavinandresen@gmail.com>2014-10-09 10:28:27 -0400
commitdbca89b74b76610331d21656cd6747f5bf8375d6 (patch)
treeaaf91b54261aa4f57654367a3ee4fe96454bb784 /qa/rpc-tests/forknotify.py
parente01a7939d3a3b231f68ae2f36cbc4de0cf4d4999 (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-xqa/rpc-tests/forknotify.py65
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()