Beispiel #1
0
    def _assert_init(self, leaves, mock_generate, kwargs):
        """Run init assertions for MerkleTree."""

        tree = MerkleTree(leaves, **kwargs)

        assert tree.leaves == ['a', 'b']

        prehashed = kwargs['prehashed'] if 'prehashed' in kwargs else True
        assert prehashed == tree.prehashed

        assert tree.count == 0
        assert tree._rows == []
        assert tree.depth == 1

        mock_generate.assert_called_once_with()
        mock_generate.reset_mock()
Beispiel #2
0
    def test_node_output(self):
        """Test MerkleTree with output from the node client"""
        leaves = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
        depth = 3
        rows = [['2adf050f14bf6324bfd41577d0dc08e2e49766fa'],
                ['39c096fc1b11e77f4347cfdb45ba9b03c0ad95d9',
                 '47121e7ec10e7653f1262b1d3abb6f9a71b3de8b'],
                ['e4973182d0c331ce8b083ffa2b28c8b4fc0f1d93',
                 'c91b9f3b2937035cc07d3fcd258d7d8a1f0c4d3c',
                 '8182daac9a266aa39328b835726f80a34835027d',
                 '222025114b2d1374b4a354d1b4452f648c9b481d'],
                ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']]
        count = 7

        tree = MerkleTree(leaves)

        self.assertEqual(tree.leaves, leaves)
        self.assertEqual(tree.depth, depth)
        self.assertEqual(tree._rows, rows)
        self.assertEqual(tree.count, count)
Beispiel #3
0
    def setUp(self):
        super(AbstractTestCase, self).setUp()

        self.leaves = ['a', 'b', 'c', 'd']
        self.tree = MerkleTree(self.leaves)
Beispiel #4
0
class MerkleTreeTestCase(AbstractTestCase):
    """Test case for the MerkleTree Class"""
    def setUp(self):
        super(AbstractTestCase, self).setUp()

        self.leaves = ['a', 'b', 'c', 'd']
        self.tree = MerkleTree(self.leaves)

    def _assert_init(self, leaves, mock_generate, kwargs):
        """Run init assertions for MerkleTree."""

        tree = MerkleTree(leaves, **kwargs)

        assert tree.leaves == ['a', 'b']

        prehashed = kwargs['prehashed'] if 'prehashed' in kwargs else True
        assert prehashed == tree.prehashed

        assert tree.count == 0
        assert tree._rows == []
        assert tree.depth == 1

        mock_generate.assert_called_once_with()
        mock_generate.reset_mock()

    @mock.patch.object(MerkleTree, '_generate')
    def test_init(self, mock_generate):
        """Test MerkleTree.__init__()."""

        # success
        for leaves, kwargs in ((['a',
                                 'b'], dict()), (['a',
                                                  'b'], dict(prehashed=True)),
                               ((x for x in ['a', 'b']), dict())):
            self._assert_init(leaves, mock_generate, kwargs)

        # failure
        for leaves in (None, 73, [], [1, 2]):
            with self.assertRaises(ValueError):
                self._assert_init(leaves, mock_generate, {})
                assert not mock_generate.called

    def test_generate(self):
        """Test MerkleTree._generate()"""
        self.tree._make_row = mock.MagicMock()
        self.tree._make_row.return_value = ['a', 'b']

        self.tree._generate()

        make_row_calls = [mock.call(1), mock.call(0)]
        self.tree._make_row.assert_has_calls(make_row_calls)

    @mock.patch.object(ShardManager, 'hash', return_value='7')
    def test_make_row(self, mock_hash):
        """Test MerkleTree._make_row()"""

        self.tree._rows = [[], [], ['a', 'b', 'c', 'd']]

        row = self.tree._make_row(1)

        calls = [mock.call('ab'), mock.call('cd')]
        mock_hash.assert_has_calls(calls)
        self.assertEqual(row, ['7', '7'])

    def test_property_depth(self):
        """Test depth property."""

        self.tree._leaves = mock.MagicMock()
        self.tree._leaves.__len__.return_value = 8

        depth = self.tree.depth

        self.assertEqual(self.tree.leaves.__len__.call_count, 4)
        self.assertEqual(2**depth, 8)

    def test_get_root(self):
        """Test MerkleTree.get_root"""
        root = self.tree.get_root()

        self.assertEqual(root, self.tree._rows[0][0])

    def test_get_level(self):
        """Test MerkleTree.get_level"""
        level = self.tree.get_level(1)

        self.assertEqual(level, self.tree._rows[1])

    def test_node_output(self):
        """Test MerkleTree with output from the node client"""
        leaves = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
        depth = 3
        rows = [['2adf050f14bf6324bfd41577d0dc08e2e49766fa'],
                [
                    '39c096fc1b11e77f4347cfdb45ba9b03c0ad95d9',
                    '47121e7ec10e7653f1262b1d3abb6f9a71b3de8b'
                ],
                [
                    'e4973182d0c331ce8b083ffa2b28c8b4fc0f1d93',
                    'c91b9f3b2937035cc07d3fcd258d7d8a1f0c4d3c',
                    '8182daac9a266aa39328b835726f80a34835027d',
                    '222025114b2d1374b4a354d1b4452f648c9b481d'
                ], ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']]
        count = 7

        tree = MerkleTree(leaves)

        self.assertEqual(tree.leaves, leaves)
        self.assertEqual(tree.depth, depth)
        self.assertEqual(tree._rows, rows)
        self.assertEqual(tree.count, count)
    def setUp(self):
        super(AbstractTestCase, self).setUp()

        self.leaves = ['a', 'b', 'c', 'd']
        self.tree = MerkleTree(self.leaves)
class MerkleTreeTestCase(AbstractTestCase):
    """Test case for the MerkleTree Class"""

    def setUp(self):
        super(AbstractTestCase, self).setUp()

        self.leaves = ['a', 'b', 'c', 'd']
        self.tree = MerkleTree(self.leaves)

    def _assert_init(self, leaves, mock_generate, kwargs):
        """Run init assertions for MerkleTree."""

        tree = MerkleTree(leaves, **kwargs)

        assert tree.leaves == ['a', 'b']

        prehashed = kwargs['prehashed'] if 'prehashed' in kwargs else True
        assert prehashed == tree.prehashed

        assert tree.count == 0
        assert tree._rows == []
        assert tree.depth == 1

        mock_generate.assert_called_once_with()
        mock_generate.reset_mock()

    @mock.patch.object(MerkleTree, '_generate')
    def test_init(self, mock_generate):
        """Test MerkleTree.__init__()."""

        # success
        for leaves, kwargs in (
                (['a', 'b'], dict()),
                (['a', 'b'], dict(prehashed=True)),
                ((x for x in ['a', 'b']), dict())):
            self._assert_init(leaves, mock_generate, kwargs)

        # failure
        for leaves in (None, 73, [], [1, 2]):
            with self.assertRaises(ValueError):
                self._assert_init(leaves, mock_generate, {})
                assert not mock_generate.called

    def test_generate(self):
        """Test MerkleTree._generate()"""
        self.tree._make_row = mock.MagicMock()
        self.tree._make_row.return_value = ['a', 'b']

        self.tree._generate()

        make_row_calls = [mock.call(1), mock.call(0)]
        self.tree._make_row.assert_has_calls(make_row_calls)

    @mock.patch.object(ShardManager, 'hash', return_value='7')
    def test_make_row(self, mock_hash):
        """Test MerkleTree._make_row()"""

        self.tree._rows = [[],
                           [],
                           ['a', 'b', 'c', 'd']]

        row = self.tree._make_row(1)

        calls = [mock.call('ab'),
                 mock.call('cd')]
        mock_hash.assert_has_calls(calls)
        self.assertEqual(row, ['7', '7'])

    def test_property_depth(self):
        """Test depth property."""

        self.tree._leaves = mock.MagicMock()
        self.tree._leaves.__len__.return_value = 8

        depth = self.tree.depth

        self.assertEqual(self.tree.leaves.__len__.call_count, 4)
        self.assertEqual(2 ** depth, 8)

    def test_get_root(self):
        """Test MerkleTree.get_root"""
        root = self.tree.get_root()

        self.assertEqual(root, self.tree._rows[0][0])

    def test_get_level(self):
        """Test MerkleTree.get_level"""
        level = self.tree.get_level(1)

        self.assertEqual(level, self.tree._rows[1])

    def test_node_output(self):
        """Test MerkleTree with output from the node client"""
        leaves = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
        depth = 3
        rows = [['2adf050f14bf6324bfd41577d0dc08e2e49766fa'],
                ['39c096fc1b11e77f4347cfdb45ba9b03c0ad95d9',
                 '47121e7ec10e7653f1262b1d3abb6f9a71b3de8b'],
                ['e4973182d0c331ce8b083ffa2b28c8b4fc0f1d93',
                 'c91b9f3b2937035cc07d3fcd258d7d8a1f0c4d3c',
                 '8182daac9a266aa39328b835726f80a34835027d',
                 '222025114b2d1374b4a354d1b4452f648c9b481d'],
                ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']]
        count = 7

        tree = MerkleTree(leaves)

        self.assertEqual(tree.leaves, leaves)
        self.assertEqual(tree.depth, depth)
        self.assertEqual(tree._rows, rows)
        self.assertEqual(tree.count, count)