Beispiel #1
0
    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")
Beispiel #2
0
    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)
Beispiel #3
0
    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):
        """
        제네시스 블럭 생성 테스트
        """
        db_name = 'genesis_db'
        test_db = test_util.make_level_db(db_name)
        self.assertIsNotNone(test_db, "DB생성 불가")
        chain = BlockChain(test_db)
        block = test_util.add_genesis_block()
        chain.add_block(block)

        self.assertIsNotNone(chain.last_block.block_hash, "제너릭 블럭 생성 불가")
        # 테스트 DB 제거
        leveldb.DestroyDB(db_name)
    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_add(self):
        """
        블럭 추가 테스트
        제네시스 블럭을 만든후 10개의 트랜잭션을 가진 10개의 블럭을 생성하여
        블럭체인에 추가
        """
        db_name = 'add_test_db'
        test_db = test_util.make_level_db(db_name)
        self.assertIsNotNone(test_db, "DB생성 불가")
        chain = BlockChain(test_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)

        # 테스트 DB 제거
        leveldb.DestroyDB(db_name)
    def test_block_confirm(self):
        db_name = 'block_confirm_db'
        test_db = test_util.make_level_db(db_name)
        self.assertIsNotNone(test_db, "DB생성 불가")
        chain = BlockChain(test_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, "블럭이 추가되지 않았습니다.")

        leveldb.DestroyDB(db_name)
    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()