From 52f541279cbda92b68dcdc18013a5e7fe236388c Mon Sep 17 00:00:00 2001 From: tim Date: Wed, 24 Aug 2016 18:29:20 +0200 Subject: [PATCH] Add serialization validation for txids --- test_transaction.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/test_transaction.py b/test_transaction.py index 9a054af6..82e995f7 100644 --- a/test_transaction.py +++ b/test_transaction.py @@ -181,14 +181,12 @@ def test_transaction_serialization(default_single_ffill, default_single_cond): def test_transaction_deserialization(default_single_ffill, default_single_cond): from bigchaindb_common.transaction import Transaction - tx_id = 'l0l' timestamp = '66666666666' expected = Transaction(Transaction.CREATE, [default_single_ffill], [default_single_cond], None, timestamp, Transaction.VERSION) tx = { - 'id': tx_id, 'version': Transaction.VERSION, 'transaction': { # NOTE: This test assumes that Fulfillments and Conditions can successfully be serialized @@ -199,11 +197,28 @@ def test_transaction_deserialization(default_single_ffill, default_single_cond): 'data': None, } } + tx['id'] = Transaction._to_hash(Transaction._to_str(Transaction._remove_signatures(tx))) tx = Transaction.from_dict(tx) assert tx.to_dict() == expected.to_dict() +def test_tx_serialization_with_incorrect_hash(utx): + from bigchaindb_common.transaction import Transaction + from bigchaindb_common.exceptions import InvalidHash + + utx_dict = utx.to_dict() + utx_dict['id'] = 'abc' + with raises(InvalidHash): + Transaction.from_dict(utx_dict) + utx_dict.pop('id') + with raises(InvalidHash): + Transaction.from_dict(utx_dict) + utx_dict['id'] = [] + with raises(InvalidHash): + Transaction.from_dict(utx_dict) + + def test_invalid_tx_initialization(): from bigchaindb_common.transaction import Transaction @@ -310,7 +325,6 @@ def test_validate_tx_simple_signature(default_single_ffill, default_single_cond, from bigchaindb_common.crypto import SigningKey from bigchaindb_common.transaction import Transaction - tx = Transaction(Transaction.CREATE, [default_single_ffill], [default_single_cond]) expected = deepcopy(default_single_ffill) expected.fulfillment.sign(str(tx), SigningKey(user_priv))