065eb1fdac
Too much naming copy/pasta will probably confuse Python programmers when we have generator/iterators and I suppose we have streams but that is just so generic that it won't help. So, better make it explicit that this is an iterator. It also seems to the fit the usage of the other implementors.
65 lines
1.4 KiB
Python
65 lines
1.4 KiB
Python
"""Merkle tree generation test module."""
|
|
|
|
import hashlib
|
|
|
|
import pytest
|
|
|
|
from merkle_tree_stream import MerkleTreeIterator, MerkleTreeNode
|
|
|
|
|
|
def test_hashes(leaf, parent):
|
|
merkle_iter = MerkleTreeIterator(leaf=leaf, parent=parent)
|
|
|
|
merkle_iter.write(b'a')
|
|
merkle_iter.write(b'b')
|
|
|
|
expected_count = 2 + 1 # nodes plus parent
|
|
assert len(merkle_iter) == expected_count
|
|
|
|
assert next(merkle_iter) == MerkleTreeNode(
|
|
index=0,
|
|
parent=1,
|
|
hash=hashlib.sha256(b'a').hexdigest(),
|
|
size=1,
|
|
data=b'a',
|
|
)
|
|
|
|
assert next(merkle_iter) == MerkleTreeNode(
|
|
index=2,
|
|
parent=1,
|
|
hash=hashlib.sha256(b'b').hexdigest(),
|
|
size=1,
|
|
data=b'b',
|
|
)
|
|
|
|
hashed = hashlib.sha256(b'a')
|
|
hashed.update(b'b')
|
|
|
|
assert next(merkle_iter) == MerkleTreeNode(
|
|
index=1, parent=3, hash=hashed.hexdigest(), size=2, data=b''
|
|
)
|
|
|
|
with pytest.raises(StopIteration):
|
|
next(merkle_iter)
|
|
|
|
|
|
def test_single_root(leaf, parent):
|
|
merkle_iter = MerkleTreeIterator(leaf=leaf, parent=parent)
|
|
|
|
merkle_iter.write(b'a')
|
|
merkle_iter.write(b'b')
|
|
merkle_iter.write(b'c')
|
|
merkle_iter.write(b'd')
|
|
|
|
assert len(merkle_iter.roots) == 1
|
|
|
|
|
|
def multiple_roots(leaf, parent):
|
|
merkle_iter = MerkleTreeIterator(leaf=leaf, parent=parent)
|
|
|
|
merkle_iter.write(b'a')
|
|
merkle_iter.write(b'b')
|
|
merkle_iter.write(b'c')
|
|
|
|
assert len(merkle_iter.roots) > 1
|