aucoin/tests/test_util.py
Casper V. Kristensen b7053ad014
Publish
2018-07-15 23:30:55 +02:00

71 lines
1.7 KiB
Python

import logging
import unittest
from aucoin import util
logging.basicConfig(level=logging.DEBUG)
class TestUtil(unittest.TestCase):
def test_hash(self):
digest = util.hash(b"Hello, world!")
self.assertEqual("315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3", digest.hex())
def test_merkle_root_example(self):
"""
This test is based on the example from https://en.bitcoin.it/wiki/Protocol_documentation#Merkle_Trees
"""
a = b"a"
b = b"b"
c = b"c"
# 1st layer
d1 = util.hash(a)
d2 = util.hash(b)
d3 = util.hash(c)
d4 = util.hash(c) # odd number of elements, so we take c twice.
# 2nd layer
d5 = util.hash(d1 + d2)
d6 = util.hash(d3 + d4)
# 3rd layer: the root
d7 = util.hash(d5 + d6)
self.assertEqual(d7, util.merkle_root_hash([a, b, c]))
def test_merkle_root_long(self):
a = b"a"
b = b"b"
c = b"c"
d = b"d"
e = b"e"
f = b"f"
# 1st layer
d1 = util.hash(a)
d2 = util.hash(b)
d3 = util.hash(c)
d4 = util.hash(d)
d5 = util.hash(e)
d6 = util.hash(f)
# 2nd layer
d7 = util.hash(d1 + d2)
d8 = util.hash(d3 + d4)
d9 = util.hash(d5 + d6)
d10 = d9 # odd number of elements, so we take d9 twice.
# 3rd layer
d11 = util.hash(d7 + d8)
d12 = util.hash(d9 + d10)
# 4th layer: the root
d13 = util.hash(d11 + d12)
self.assertEqual(d13, util.merkle_root_hash([a, b, c, d, e, f]))
if __name__ == '__main__':
unittest.main()