def test_unicode_decode_error(self): """ Transaction hash 는 UTF-8 인코딩이나 block hash 값은 sha256 hex byte array 이므로 인코딩 에러가 발생함 """ test_util.add_genesis_block() block = test_util.add_genesis_block() self.chain.add_block(block) last_block = self.chain.last_block unexpected_transaction = self.chain.find_tx_by_key( last_block.block_hash) self.assertIsNone(unexpected_transaction, "unexpected_transaction is not None")
def test_add_and_verify_results(self): """invoke_result = "{"code" : "invoke_result_code" , "error_message": "message" }" """ test_util.add_genesis_block() block = test_util.add_genesis_block() self.chain.add_block(block) tx = self.__add_single_tx_block_blockchain_return_tx() invoke_result = self.chain.find_invoke_result_by_tx_hash(tx.tx_hash) self.assertEqual(invoke_result['code'], ScoreResponse.SUCCESS)
def test_genesis_block_by_key(self): """ 제네시스 블럭을 찾는다 """ # 키를 통하여 블럭을 찾는다 block = test_util.add_genesis_block() self.chain.add_block(block) last_block_hash = self.chain.last_block.block_hash logging.debug("LAST BLOCK : %s", last_block_hash) last_block = self.chain.find_block_by_hash(last_block_hash) self.assertIsNotNone(last_block, "제네시스 블럭을 가져올 수 없습니다.")
def test_block_genesis(self): """ create genesis block """ store_identity = 'genesis_db' chain = BlockChain(self.channel_name, store_id=store_identity) self.assertIsNotNone(chain.get_blockchain_store(), "impossible create DB") block = test_util.add_genesis_block() chain.add_block(block) self.assertIsNotNone(chain.last_block.block_hash, "impossible create genesis block") # remove test DB chain.close_blockchain_store()
def test_block_add(self): """ 블럭 추가 테스트 제네시스 블럭을 만든후 10개의 트랜잭션을 가진 10개의 블럭을 생성하여 블럭체인에 추가 """ store_identity = 'add_test_db' # test_store = test_util.make_key_value_store(store_identity) chain = BlockChain(self.channel_name, store_id=store_identity) self.assertIsNotNone(chain.get_blockchain_store(), "impossible create DB") block = test_util.add_genesis_block() chain.add_block(block) genesis_hash = chain.last_block.block_hash for x in range(0,10): # 신규 블럭 생성 추가 x 10 tmp_block = self.generate_test_block() tmp_block.block_status = BlockStatus.confirmed tmp_block.generate_block(chain.last_block) chain.add_block(tmp_block) logging.debug("신규 블럭 생성 및 블럭 HASH : %s", chain.last_block.block_hash) self.assertNotEqual(genesis_hash, chain.last_block.block_hash, "블럭 추가 불가") # 미인증 블럭 추가 tmp_block = self.generate_test_block() tmp_block.block_status = BlockStatus.unconfirmed self.assertRaises(TypeError, "미인증 블럭 추가", chain.add_block, tmp_block) # Store_data Function 추가 tmp_block.block_status = BlockStatus.confirmed tmp_block.generate_block(chain.last_block) # 블럭 저장함수 last_block_hash = chain.last_block.block_hash chain.add_block(tmp_block) self.assertNotEqual(last_block_hash, chain.last_block.block_hash) self.assertIsNotNone(chain.last_block) # remove test DB chain.close_blockchain_store()
def test_block_confirm(self): store_identity = 'block_confirm_db' chain = BlockChain(self.channel_name, store_id=store_identity) self.assertIsNotNone(chain.get_blockchain_store(), "impossible create DB") block = test_util.add_genesis_block() chain.add_block(block) self.last_block = block # block을 하나 생성해서 unconfirm 상태에서 추가 unconfirm_block = self.generate_test_block() unconfirm_block.generate_block(chain.last_block) self.assertTrue(chain.add_unconfirm_block(unconfirm_block), "미검증블럭 추가에 실패하였습니다.") # 블럭 검증작업후 블럭을 검증완료 상태로 바꾸며, 블럭체인에 등록 해 줍니다. chain.confirm_prev_block(unconfirm_block) # 블럭 검증완료 self.assertEqual(chain.last_block.block_hash, unconfirm_block.block_hash, "블럭이 추가되지 않았습니다.") chain.close_blockchain_store()