From b5fe2b15ce9f7e9f373d8d7ac90bdca1e9f9dfee Mon Sep 17 00:00:00 2001 From: Lev Berman Date: Thu, 30 Aug 2018 12:21:59 +0200 Subject: [PATCH] Panic when receive inconsistent data in InitChain. --- bigchaindb/core.py | 7 ++++--- tests/tendermint/test_core.py | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/bigchaindb/core.py b/bigchaindb/core.py index 3743f0ec..a0b75f89 100644 --- a/bigchaindb/core.py +++ b/bigchaindb/core.py @@ -6,6 +6,7 @@ with Tendermint. """ import logging +import sys from abci.application import BaseApplication from abci.types_pb2 import ( @@ -63,14 +64,14 @@ class App(BaseApplication): 'the chain {chain_id} is already synced.' logger.error(msg) - return ResponseInitChain() + sys.exit(1) if chain_id != genesis.chain_id: msg = f'Got mismatching chain ID in the InitChain ' + \ 'ABCI request - you need to migrate the ABCI client ' + \ 'and set new chain ID: {chain_id}.' logger.error(msg) - return ResponseInitChain() + sys.exit(1) # set migration values for app hash and height block = self.bigchaindb.get_latest_block() @@ -86,7 +87,7 @@ class App(BaseApplication): 'ABCI request - you need to migrate the ABCI client ' + \ 'and set new validator set: {known_validators}.' logger.error(msg) - return ResponseInitChain() + sys.exit(1) block = Block(app_hash=app_hash, height=height, transactions=[]) self.bigchaindb.store_block(block._asdict()) diff --git a/tests/tendermint/test_core.py b/tests/tendermint/test_core.py index caa18162..98e8d31a 100644 --- a/tests/tendermint/test_core.py +++ b/tests/tendermint/test_core.py @@ -81,8 +81,8 @@ def test_init_chain_ignores_invalid_init_chain_requests(b): generate_init_chain_request('chain-ABC', validators), ] for r in invalid_requests: - res = App(b).init_chain(r) - assert res == ResponseInitChain() + with pytest.raises(SystemExit): + App(b).init_chain(r) # assert nothing changed - neither validator set, nor chain ID new_validator_set = query.get_validator_set(b.connection) assert new_validator_set == validator_set @@ -116,8 +116,8 @@ def test_init_chain_recognizes_new_chain_after_migration(b): generate_init_chain_request('chain-XYZ-migrated-at-height-1'), ] for r in invalid_requests: - res = App(b).init_chain(r) - assert res == ResponseInitChain() + with pytest.raises(SystemExit): + App(b).init_chain(r) assert query.get_latest_abci_chain(b.connection) == { 'chain_id': 'chain-XYZ-migrated-at-height-1', 'is_synced': False, @@ -150,8 +150,8 @@ def test_init_chain_recognizes_new_chain_after_migration(b): generate_init_chain_request('chain-XYZ-migrated-at-height-1'), ] for r in invalid_requests: - res = App(b).init_chain(r) - assert res == ResponseInitChain() + with pytest.raises(SystemExit): + App(b).init_chain(r) assert query.get_latest_abci_chain(b.connection) == { 'chain_id': 'chain-XYZ-migrated-at-height-1', 'is_synced': True,