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')
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)