コード例 #1
0
class ProcessContentTestCase(unittest.TestCase):
    filename = 'test_contentprocessing.dat'
    zero_digest = bytes(32)

    def setUp(self):
        self.block_chain = BlockChain()
        self.content_queue = queue.Queue()
        logging.debug('setUp')

    def tearDown(self):
        logging.debug('tearDown')
        del self.content_queue
        del self.block_chain

    def test_01(self):
        logging.debug('Start test_01')
        kwargs = {}
        kwargs['content_queue'] = self.content_queue
        kwargs['block_chain' ] = self.block_chain

        pct = ProcessContent(name='ProcessContentThread', kwargs=kwargs)

        pct.start()
        # For checking purposes, each content should be unique
        input_content = (b'abc', b'def', b'Love is in the air!')
        for i in input_content:
            self.content_queue.put(i)

        self.content_queue.put(None)
        self.content_queue.join()
        pct.join()

        # Now check the created block chain
        received_content = {}
        digest = self.block_chain.getLastBlockDigest()
        while digest != self.zero_digest:
            block = self.block_chain.getBlockWithDigest(digest)
            raw_content = block.getContent()
            received_content[raw_content] = True
            logging.info(raw_content)
            digest = block.getPreviousBlockHash()

        # Verify that there is one block with content for
        # each content input.
        for c in input_content:
            self.assertTrue(c in received_content, 'No block generated for ' + c.decode('utf-8'))

        logging.debug('End test_01')
コード例 #2
0
class BlockChainTestCase(unittest.TestCase):
    filename = 'test_blockchain.dat'
    content = ['The quick brown fox jumps over the lazy dog.', 'Another day, another 50 cents.', "All's well that ends well", 'Four score and seven years ago...']
    zero_digest = bytes(32)

    def setUp(self):
        self.block_chain = BlockChain()
        self.factory = BlockFactory()

    def tearDown(self):
        del self.block_chain
        del self.factory

    def test_saveToFile(self):
        num_contents = len(self.content)
        for i in range(num_contents):
            self.createBlock(self.content[i])

        block_count = self.block_chain.saveToFile(self.filename)
        self.assertEqual(block_count, num_contents, 'Incorrect block count')

    def test_loadFromFile(self):
        blocks_loaded = self.block_chain.loadFromFile(self.filename)
        for i in range(blocks_loaded):
            content = self.block_chain.getBlockContent(i)
            content_string = content.decode('utf-8')
            self.assertEqual(self.content[i], content_string, 'Wrong content loaded')

    def test_walkChain(self):
        # Load the block chain
        blocks_loaded = self.block_chain.loadFromFile(self.filename)
        self.assertTrue(blocks_loaded > 0, "No blocks loaded!")
        # start with the top

        digest = self.block_chain.getLastBlockDigest()
        while digest != self.zero_digest:
            block = self.block_chain.getBlockWithDigest(digest)
            content = block.getContent()
            logging.debug('content: %s; digest: %s', content.decode('utf-8'), digest.hex())
            digest = block.getPreviousBlockHash()

    def createBlock(self, text):
        content = text.encode()
        block_object = self.factory.createNew(content)
        pbhd = self.block_chain.getLastBlockDigest()
        block_object.farm(pbhd)
        height = self.block_chain.addBlock(block_object)