def test_store_pre_commit_state_in_end_block(b, alice): from bigchaindb import App from bigchaindb.backend import query from bigchaindb.models import Transaction from bigchaindb.backend.query import PRE_COMMIT_ID tx = Transaction.create([alice.public_key], [([alice.public_key], 1)], asset={'msg': 'live long and prosper'})\ .sign([alice.private_key]) app = App(b) app.init_chain(['ignore']) begin_block = RequestBeginBlock() app.begin_block(begin_block) app.deliver_tx(encode_tx_to_bytes(tx)) app.end_block(RequestEndBlock(height=99)) resp = query.get_pre_commit_state(b.connection, PRE_COMMIT_ID) assert resp['commit_id'] == PRE_COMMIT_ID assert resp['height'] == 99 assert resp['transactions'] == [tx.id] app.begin_block(begin_block) app.deliver_tx(encode_tx_to_bytes(tx)) app.end_block(RequestEndBlock(height=100)) resp = query.get_pre_commit_state(b.connection, PRE_COMMIT_ID) assert resp['commit_id'] == PRE_COMMIT_ID assert resp['height'] == 100 assert resp['transactions'] == [tx.id]
def test_get_pre_commit_state(db_context): from bigchaindb.backend import query state = dict(height=3, transactions=[]) db_context.conn.db.pre_commit.insert_one(state) resp = query.get_pre_commit_state(db_context.conn) assert resp == state
def test_get_pre_commit_state(db_context): from bigchaindb.backend import query from bigchaindb.lib import PreCommitState state = PreCommitState(commit_id='test2', height=3, transactions=[]) db_context.conn.db.pre_commit.insert(state._asdict()) resp = query.get_pre_commit_state(db_context.conn, 'test2') assert resp == state._asdict()
def run_recover(b): pre_commit = query.get_pre_commit_state(b.connection, PRE_COMMIT_ID) # Initially the pre-commit collection would be empty if pre_commit: latest_block = query.get_latest_block(b.connection) # NOTE: the pre-commit state can only be ahead of the commited state # by 1 block if latest_block and (latest_block['height'] < pre_commit['height']): query.delete_transactions(b.connection, pre_commit['transactions'])