diff --git a/test/simulator/utils.py b/test/simulator/utils.py index 3df996f..dce3f7c 100644 --- a/test/simulator/utils.py +++ b/test/simulator/utils.py @@ -31,9 +31,14 @@ def parse_varint(tx): # First of all, the offset of the hex transaction if moved to the proper position (i.e where the varint should be # located) and the length and format of the data to be analyzed is checked. data = tx.hex[tx.offset :] - assert len(data) > 0 - size = int(data[:2], 16) - assert size <= 255 + if len(data) > 0: + size = int(data[:2], 16) + + else: + raise ValueError("No data to be parsed") + + if size > 255: + raise ValueError("Wrong value (varint size > 255)") # Then, the integer is encoded as a varint using the proper prefix, if needed. if size <= 252: # No prefix diff --git a/test/unit/test_block_processor.py b/test/unit/test_block_processor.py index ab16736..69c03fe 100644 --- a/test/unit/test_block_processor.py +++ b/test/unit/test_block_processor.py @@ -2,6 +2,7 @@ import pytest from pisa import c_logger from pisa.block_processor import BlockProcessor +from pisa.utils.auth_proxy import JSONRPCException from test.unit.conftest import get_random_value_hex c_logger.disabled = True @@ -36,3 +37,33 @@ def test_get_random_block(): def test_get_block_count(): block_count = BlockProcessor.get_block_count() assert isinstance(block_count, int) and block_count >= 0 + + +def test_decode_raw_transaction(): + # We cannot exhaustively test this (we rely on bitcoind for this) but we can try to decode a correct transaction + hex_tx = ( + "0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402" + "204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4" + "acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b" + "13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1ba" + "ded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482e" + "cad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000" + ) + + try: + BlockProcessor.decode_raw_transaction(hex_tx) + assert True + except JSONRPCException: + assert False + + +def test_decode_raw_transaction_invalid(): + # Same but with an invalid one + + hex_tx = "A" * 16 + + try: + BlockProcessor.decode_raw_transaction(hex_tx) + assert False + except JSONRPCException: + assert True