Esempio n. 1
0
    def __init__(self):
        package_directory = os.path.dirname(os.path.abspath(__file__))
        genesis_data_path = os.path.join(package_directory, 'genesis.json')

        with open(genesis_data_path) as f:
            genesisBlock_json = f.read()
            tmp_block = qrl_pb2.Block()
            Parse(genesisBlock_json, tmp_block)
            super(GenesisBlock, self).__init__(tmp_block)

        # Override genesis if yaml is available (integration testing, etc)
        genesis_config_path = os.path.join(package_directory, 'genesis.yml')
        if os.path.isfile(genesis_config_path):
            with open(genesis_config_path) as f:
                additional_balances = yaml.safe_load(f)
                if additional_balances is not None:
                    new_items = [
                        qrl_pb2.GenesisBalance(address=k, balance=v) for k, v
                        in additional_balances['genesis_info'].items()
                    ]
                    self._data.genesis_balance.extend(new_items)

        # Override genesis if yaml is available (integration testing, etc)
        genesis_config_path = os.path.join(config.user.qrl_dir, 'genesis.yml')
        if os.path.isfile(genesis_config_path):
            with open(genesis_config_path) as f:
                additional_balances = yaml.safe_load(f)
                if additional_balances is not None:
                    new_items = [
                        qrl_pb2.GenesisBalance(address=k, balance=v) for k, v
                        in additional_balances['genesis_info'].items()
                    ]
                    self._data.genesis_balance.extend(new_items)
Esempio n. 2
0
    def test_handle_push_block(self, m_logger):
        """
        1. This node has requested a peer to send us its MessageReceipts
        2. The node has received a list of Block headers
        3. The node has requested a specific block.
        4. The peer sends the new block, which is handled by this function?
        :return:
        """
        msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.PB,
                           pbData=qrllegacy_pb2.PBData(block=qrl_pb2.Block()))
        self.manager.handle_push_block(self.channel, msg)

        self.channel.factory.block_received.assert_called()
Esempio n. 3
0
 def test_handle_block_bad_block(self, m_Block, m_logger):
     """
     If the block couldn't be constructed from the message, the function should return without doing
     anything else.
     :return:
     """
     m_Block.side_effect = Exception
     msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.BK,
                        block=qrl_pb2.Block(),
                        mrData=qrllegacy_pb2.MRData())
     self.manager.handle_block(self.channel, msg)
     self.channel.factory.master_mr.register.assert_not_called()
     self.channel.factory.pow.pre_block_logic.assert_not_called()
Esempio n. 4
0
    def test_handle_fetch_block(self, m_logger):
        """
        1. A peer has sent a request for a block.
        2. This function serves the block in response to that request.
        :return:
        """
        self.channel.factory.chain_height = 10
        self.channel.factory.get_block_by_number.return_value = Mock(
            autospec=Block, pbdata=qrl_pb2.Block())
        msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.FB,
                           fbData=qrllegacy_pb2.FBData(index=1))
        self.manager.handle_fetch_block(self.channel, msg)

        self.channel.send.assert_called()
Esempio n. 5
0
    def test_get_block_by_number(self):
        with set_qrl_dir("wallet_ver1"):
            walletd = WalletD()

            block = qrl_pb2.Block()
            block.header.hash_header = b'001122'
            block.header.block_number = 1

            walletd._public_stub.GetBlockByNumber = Mock(
                return_value=qrl_pb2.GetBlockResp(block=block))

            b = walletd.get_block_by_number(1)
            self.assertEqual(b.header.hash_header,
                             bin2hstr(block.header.hash_header))
            self.assertEqual(b.header.block_number, block.header.block_number)
Esempio n. 6
0
    def __init__(self):
        package_directory = os.path.dirname(os.path.abspath(__file__))

        genesis_data_path = os.path.join(package_directory, 'genesis.yml')
        genesis_config_path = os.path.join(config.user.qrl_dir, 'genesis.yml')

        if os.path.isfile(genesis_config_path):
            with open(genesis_config_path) as f:
                genesisBlock_json = json.dumps(yaml.safe_load(f))
        else:
            with open(genesis_data_path) as f:
                genesisBlock_json = json.dumps(yaml.safe_load(f))

        tmp_block = qrl_pb2.Block()
        Parse(genesisBlock_json, tmp_block)
        super(GenesisBlock, self).__init__(tmp_block)
    def test_getBlockByNumber(self):
        with set_qrl_dir("wallet_ver1"):
            walletd = WalletD()
            service = WalletAPIService(walletd)

            block = qrl_pb2.Block()
            block.header.hash_header = b'001122'
            block.header.block_number = 1

            walletd._public_stub.GetBlockByNumber = Mock(
                return_value=qrl_pb2.GetBlockResp(block=block))

            resp = service.GetBlockByNumber(qrlwallet_pb2.BlockByNumberReq(block_number=1), context=None)

            self.assertEqual(resp.code, 0)
            self.assertEqual(resp.block.header.hash_header, bin2hstr(block.header.hash_header))
            self.assertEqual(resp.block.header.block_number, block.header.block_number)
Esempio n. 8
0
    def test_handle_block(self, m_logger):
        """
        1. A peer has found a new block. It broadcasts the MessageReceipt for that block.
        2. This node finds that it hasn't got that block yet, so it requests that block.
        3. The peer sends the new block, which is handled by this function.
        :return:
        """
        msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.BK,
                           block=qrl_pb2.Block(),
                           mrData=qrllegacy_pb2.MRData())
        self.manager.handle_block(self.channel, msg)
        self.channel.factory.master_mr.register.assert_called()

        # But if we didn't request this block, we shouldn't process it.
        self.channel.factory.master_mr.register.reset_mock()
        self.channel.factory.master_mr.isRequested.return_value = False

        self.manager.handle_block(self.channel, msg)
        self.channel.factory.master_mr.register.assert_not_called()
Esempio n. 9
0
    def test_handle_push_block_bad_block(self, m_Block, m_logger):
        """
        If the Block couldn't be constructed from the Protobuf data, nothing should happen.
        (including disconnecting the peer? dunno)
        :return:
        """
        # Case 1: Block() raises an Exception
        m_Block.side_effect = Exception
        msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.PB,
                           pbData=qrllegacy_pb2.PBData(block=qrl_pb2.Block()))
        self.manager.handle_push_block(self.channel, msg)

        self.channel.factory.block_received.assert_not_called()

        # Case 2: no protobuf data was in the message.
        msg = make_message(func_name=qrllegacy_pb2.LegacyMessage.PB)
        self.manager.handle_push_block(self.channel, msg)

        self.channel.factory.block_received.assert_not_called()
Esempio n. 10
0
 def from_json(json_data):
     pbdata = qrl_pb2.Block()
     Parse(json_data, pbdata)
     return Block(pbdata)
Esempio n. 11
0
    def __init__(self, protobuf_block=None):
        self._data = protobuf_block
        if protobuf_block is None:
            self._data = qrl_pb2.Block()

        self.blockheader = BlockHeader(self._data.header)
Esempio n. 12
0
 def deserialize(data):
     pbdata = qrl_pb2.Block()
     pbdata.ParseFromString(bytes(data))
     block = Block(pbdata)
     return block