bigchaindb/tests/tendermint/test_utils.py
Sylvain Bellemare 56dfd9bab0 Problem: represent utxoset state as a hash
Solution: create a merkle tree out of the utxoset and compute its merkle
root
2018-03-01 17:50:20 +01:00

45 lines
1.1 KiB
Python

import base64
import json
try:
from hashlib import sha3_256
except ImportError:
from sha3 import sha3_256
import pytest
pytestmark = pytest.mark.tendermint
def test_encode_decode_transaction(b):
from bigchaindb.tendermint.utils import (encode_transaction,
decode_transaction)
asset = {
'value': 'key'
}
encode_tx = encode_transaction(asset)
new_encode_tx = base64.b64encode(json.dumps(asset).
encode('utf8')).decode('utf8')
assert encode_tx == new_encode_tx
de64 = base64.b64decode(encode_tx)
assert asset == decode_transaction(de64)
def test_calculate_hash_no_key(b):
from bigchaindb.tendermint.utils import calculate_hash
# pass an empty list
assert calculate_hash([]) == ''
# TODO test for the case of an empty list of hashes, and possibly other cases.
def test_merkleroot():
from bigchaindb.tendermint.utils import merkleroot
hashes = [sha3_256(i.encode()).digest() for i in 'abc']
assert merkleroot(hashes) == (
'78c7c394d3158c218916b7ae0ebdea502e0f4e85c08e3b371e3dfd824d389fa3')