示例#1
0
    def test_share_chain_rejected(self):
        try:
            blk = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': '1234',
                'data': {
                    'foo': 'bar'
                }
            }
            blk2 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'woo': 'hoo'
                }
            }
            dct = {'blocks': [blk, blk2]}
            chain = Chain.from_dict(dct)
            node_id = 'blah'
            backend = MockFileBackend(chains={node_id: chain})
            n1 = Node.start(node_id=node_id, backend=backend)
            p1 = n1.proxy()

            short_chain = Chain.from_dict({'blocks': [blk]})
            blk3 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'p': 'b'
                }
            }
            dct2 = {'blocks': [blk, blk3]}
            chain2 = Chain.from_dict(dct2)
            n2 = Node.start(node_id='2',
                            backend=MockFileBackend({'2': short_chain}))
            n3 = Node.start(node_id='3',
                            backend=MockFileBackend({'3': chain2}))
            n4 = Node.start(node_id='4',
                            backend=MockFileBackend({'4': chain2}))
            p2 = n2.proxy()
            p3 = n3.proxy()
            p4 = n4.proxy()
            p1.register_peer(p2)
            p1.register_peer(p3)
            p1.register_peer(p4)
            p1.share_chain().get()
            self.assertEqual(p1.chain.get(), short_chain)
            self.assertEqual(p2.chain.get(), short_chain)
            self.assertEqual(p3.chain.get(), chain2)
            self.assertEqual(p4.chain.get(), chain2)
        finally:
            n1.stop()
            n2.stop()
            n3.stop()
            n4.stop()
示例#2
0
    def test_add_block(self):
        blk = {
            'timestamp': '2017-01-02T03:04:05.000123Z',
            'prev_hash': '1234',
            'data': {'foo': 'bar'}
        }
        dct = {
            'blocks': [blk]
        }
        chain = Chain.from_dict(dct)
        b2 = {
            'timestamp': '2017-01-02T03:04:05.000123Z',
            'prev_hash': Block.from_dict(blk).hash,
            'data': {'on': 'point'}
        }
        chain.add_block(Block.from_dict(b2))
        self.assertEqual(
            chain.to_dict(),
            {'blocks': [Block.from_dict(blk).to_dict(), Block.from_dict(b2).to_dict()]}
        )

        # prev_hash doesn't match last hash - should fail
        b3 = {
            'timestamp': '2017-01-02T03:04:05.000123Z',
            'prev_hash': Block.from_dict(blk).hash,
            'data': {'some': 'thing'}
        }
        self.assertRaises(ValueError, chain.add_block, Block.from_dict(b3))
示例#3
0
 def test_receive_chain_accept(self):
     n1 = None
     try:
         blk = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '1234',
             'data': {
                 'foo': 'bar'
             }
         }
         dct = {'blocks': [blk]}
         chain = Chain.from_dict(dct)
         node_id = 'blah'
         backend = MockFileBackend(chains={node_id: chain})
         n1 = Node.start(node_id=node_id, backend=backend)
         p1 = n1.proxy()
         chain2 = copy.deepcopy(chain)
         blk2 = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': Block.from_dict(blk).hash,
             'data': {
                 'a': 'b'
             }
         }
         chain2.add_block(Block.from_dict(blk2))
         res = p1.receive_chain(chain2).get()
         self.assertEqual(res, ACCEPTED)
         self.assertEqual(p1.chain.get(), chain2)
     finally:
         n1.stop()
示例#4
0
 def load_chain(self, node_id):
     """
     :type node_id: str
     :rtype: blokka.entities.Chain
     """
     try:
         dct = json.load(open(self.__file_path(node_id), 'r'))
         return Chain.from_dict(dct)
     except IOError:
         return None
示例#5
0
 def test_from_dict_to_dict(self):
     blk = {
         'timestamp': '2017-01-02T03:04:05.000123Z',
         'prev_hash': '1234',
         'data': {'foo': 'bar'}
     }
     dct = {
         'blocks': [blk]
     }
     chain = Chain.from_dict(dct)
     dct['blocks'][-1]['hash'] = chain.blocks[-1].hash
     self.assertEqual(chain.to_dict(), dct)
示例#6
0
    def test_receive_chain_reject(self):
        n1 = None
        try:
            blk = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': '1234',
                'data': {
                    'foo': 'bar'
                }
            }
            blk2 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'woo': 'hoo'
                }
            }
            dct = {'blocks': [blk, blk2]}
            chain = Chain.from_dict(dct)
            node_id = 'blah'
            backend = MockFileBackend(chains={node_id: chain})
            n1 = Node.start(node_id=node_id, backend=backend)
            p1 = n1.proxy()

            dct2 = {
                'blocks': [{
                    'timestamp': '2017-01-02T03:04:05.000123Z',
                    'prev_hash': 'abc',
                    'data': {
                        'x': 'y'
                    }
                }]
            }
            chain2 = Chain.from_dict(dct2)
            res = p1.receive_chain(chain2).get()
            self.assertEqual(res, REJECTED)
            self.assertEqual(p1.chain.get(), chain)
        finally:
            n1.stop()
示例#7
0
 def test_latest_hash(self):
     block_dicts = [
         {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '1234',
             'data': {'foo': 'bar'}
         },
         {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '5678',
             'data': {'on': 'point'}
         }
     ]
     chain = Chain.from_dict(
         {'blocks': block_dicts}
     )
     self.assertEqual(chain.latest_hash(), Block.from_dict(block_dicts[-1]).hash)
     chain2 = Chain(blocks=[])
     self.assertIsNone(chain2.latest_hash())
示例#8
0
 def test_chain(self):
     node = None
     try:
         node_id = 'aaa'
         blk = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '1234',
             'data': {
                 'foo': 'bar'
             }
         }
         dct = {'blocks': [blk]}
         chain = Chain.from_dict(dct)
         backend = MockFileBackend(chains={node_id: chain})
         node = Node.start(node_id=node_id, backend=backend)
         proxy = node.proxy()
         self.assertEqual(proxy.chain.get(), chain)
     finally:
         node.stop()