mirror of https://github.com/lukechilds/komodo.git
3 changed files with 72 additions and 1 deletions
@ -0,0 +1,68 @@ |
|||
#!/usr/bin/env python2 |
|||
|
|||
# |
|||
# Test hard fork detection |
|||
# |
|||
|
|||
from test_framework.test_framework import BitcoinTestFramework |
|||
from test_framework.util import * |
|||
import os |
|||
import shutil |
|||
|
|||
class HardForkDetectionTest(BitcoinTestFramework): |
|||
|
|||
alert_filename = None # Set by setup_network |
|||
|
|||
def setup_network(self): |
|||
self.nodes = [] |
|||
self.alert_filename = os.path.join(self.options.tmpdir, "alert.txt") |
|||
with open(self.alert_filename, 'w') as f: |
|||
pass # Just open then close to create zero-length file |
|||
self.nodes.append(start_node(0, self.options.tmpdir, |
|||
["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""])) |
|||
|
|||
def assert_safemode_off(self): |
|||
self.nodes[0].getbalance() |
|||
|
|||
def assert_safemode_on(self, requiredMessage): |
|||
errorString = "" |
|||
try: |
|||
self.nodes[0].getbalance() |
|||
except JSONRPCException,e: |
|||
errorString = e.error['message'] |
|||
|
|||
assert_equal("Safe mode:" in errorString, True) |
|||
assert_equal(requiredMessage in errorString, True) |
|||
|
|||
def run_test(self): |
|||
# Generate 10 blocks |
|||
self.nodes[0].generate(100) |
|||
|
|||
# Invalidate all of them. |
|||
for block_height in range(100, 0, -1): |
|||
block_hash = self.nodes[0].getblockhash(block_height) |
|||
self.nodes[0].invalidateblock(block_hash) |
|||
|
|||
# Check that safe mode is on. |
|||
self.assert_safemode_on("We do not appear to fully agree with our peers!") |
|||
|
|||
# Check that an -alertnotify was triggered. |
|||
with open(self.alert_filename, 'r') as f: |
|||
alert_text = f.read() |
|||
|
|||
if len(alert_text) == 0: |
|||
raise AssertionError("-alertnotify did not warn of detected hard fork") |
|||
|
|||
# If our chain keeps growing, but the hard forking chain remains longer, |
|||
# safe mode should stay on. |
|||
self.nodes[0].generate(50) |
|||
self.assert_safemode_on("We do not appear to fully agree with our peers!") |
|||
|
|||
# If we're on the longer side of the hard fork, safe mode should get |
|||
# turned off. |
|||
self.nodes[0].generate(50) |
|||
self.assert_safemode_off() |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
HardForkDetectionTest().main() |
Loading…
Reference in new issue