def compare_bdn_performance_stats_old_to_current(
     self,
     converted_current_message: BdnPerformanceStatsMessage,
     original_current_message: BdnPerformanceStatsMessage,
 ):
     self.assertEqual(
         original_current_message.rawbytes(),
         converted_current_message.rawbytes(),
     )
Exemplo n.º 2
0
 def old_bdn_performance_stats_message(
     self, original_message: BdnPerformanceStatsMessage
 ) -> BdnPerformanceStatsMessageV9:
     _, single_node_stats = next(iter(
         original_message.node_stats().items()))
     return BdnPerformanceStatsMessageV9(
         original_message.interval_start_time(),
         original_message.interval_end_time(),
         single_node_stats.new_blocks_received_from_blockchain_node,
         single_node_stats.new_blocks_received_from_bdn,
         single_node_stats.new_tx_received_from_blockchain_node,
         single_node_stats.new_tx_received_from_bdn,
     )
Exemplo n.º 3
0
 def old_bdn_performance_stats_message(
     self, original_message: BdnPerformanceStatsMessage
 ) -> BdnPerformanceStatsMessageV16:
     _, single_node_stats = next(iter(
         original_message.node_stats().items()))
     return BdnPerformanceStatsMessageV16(
         original_message.interval_start_time(),
         original_message.interval_end_time(),
         single_node_stats.new_blocks_received_from_blockchain_node,
         single_node_stats.new_blocks_received_from_bdn,
         single_node_stats.new_tx_received_from_blockchain_node,
         single_node_stats.new_tx_received_from_bdn,
         original_message.memory_utilization(),
         single_node_stats.new_blocks_seen,
         single_node_stats.new_block_messages_from_blockchain_node,
         single_node_stats.new_block_announcements_from_blockchain_node)
Exemplo n.º 4
0
    def old_bdn_performance_stats_message(
        self, original_message: BdnPerformanceStatsMessage
    ) -> BdnPerformanceStatsMessageV18:
        new_node_stats = {}
        for endpoint, old_stats in original_message.node_stats().items():
            new_stats = BdnPerformanceStatsDataV18()
            new_stats.new_blocks_received_from_blockchain_node = old_stats.new_blocks_received_from_blockchain_node
            new_stats.new_blocks_received_from_bdn = old_stats.new_blocks_received_from_bdn
            new_stats.new_blocks_seen = old_stats.new_blocks_seen
            new_stats.new_block_messages_from_blockchain_node = old_stats.new_block_messages_from_blockchain_node
            new_stats.new_block_announcements_from_blockchain_node = old_stats.new_block_announcements_from_blockchain_node
            new_stats.new_tx_received_from_blockchain_node = old_stats.new_tx_received_from_blockchain_node
            new_stats.new_tx_received_from_bdn = old_stats.new_tx_received_from_bdn
            new_node_stats[endpoint] = new_stats

        return BdnPerformanceStatsMessageV18(
            original_message.interval_start_time(),
            original_message.interval_end_time(),
            original_message.memory_utilization(), new_node_stats)
Exemplo n.º 5
0
 def compare_bdn_performance_stats_old_to_current(
     self,
     converted_current_message: BdnPerformanceStatsMessage,
     original_current_message: BdnPerformanceStatsMessage,
 ):
     self.assert_attributes_equal(
         converted_current_message,
         original_current_message,
         ["interval_start_time", "interval_end_time", "memory_utilization"],
     )
     converted_node_stats = converted_current_message.node_stats()
     converted_blockchain_peer_endpoint, converted_single_node_stats = converted_node_stats.popitem(
     )
     original_node_stats = original_current_message.node_stats()
     original_blockchain_peer_endpoint, original_single_node_stats = original_node_stats.popitem(
     )
     self.assertEqual(
         converted_single_node_stats.
         new_blocks_received_from_blockchain_node,
         original_single_node_stats.new_blocks_received_from_blockchain_node
     )
     self.assertEqual(
         converted_single_node_stats.new_blocks_received_from_bdn,
         original_single_node_stats.new_blocks_received_from_bdn)
     self.assertEqual(
         converted_single_node_stats.new_tx_received_from_blockchain_node,
         original_single_node_stats.new_tx_received_from_blockchain_node)
     self.assertEqual(converted_single_node_stats.new_tx_received_from_bdn,
                      original_single_node_stats.new_tx_received_from_bdn)
     self.assertEqual(converted_single_node_stats.new_blocks_seen,
                      original_single_node_stats.new_blocks_seen)
     self.assertEqual(
         converted_single_node_stats.
         new_block_messages_from_blockchain_node,
         original_single_node_stats.new_block_messages_from_blockchain_node)
     self.assertEqual(
         converted_single_node_stats.
         new_block_announcements_from_blockchain_node,
         original_single_node_stats.
         new_block_announcements_from_blockchain_node)
     self.assertEqual(0, converted_single_node_stats.tx_sent_to_node)
     self.assertEqual(0, converted_single_node_stats.duplicate_tx_from_node)
 def send_bdn_performance_stats(
         self, bdn_stats_interval: GatewayBdnPerformanceStatInterval):
     memory_utilization_mb = int(memory_utils.get_app_memory_usage() /
                                 constants.BYTE_TO_MB)
     msg_to_send = BdnPerformanceStatsMessage(
         bdn_stats_interval.start_time, bdn_stats_interval.end_time,
         bdn_stats_interval.new_blocks_received_from_blockchain_node,
         bdn_stats_interval.new_blocks_received_from_bdn,
         bdn_stats_interval.new_tx_received_from_blockchain_node,
         bdn_stats_interval.new_tx_received_from_bdn, memory_utilization_mb)
     self.enqueue_msg(msg_to_send)
Exemplo n.º 7
0
    def test_bdn_performance_stats_message_one_node(self):
        start_time = datetime.utcnow()
        memory_utilization_mb = 700
        node_1_bdn_stats = BdnPerformanceStatsData()
        node_1_bdn_stats.new_blocks_received_from_blockchain_node = 100
        node_1_bdn_stats.new_blocks_received_from_bdn = 200
        node_1_bdn_stats.new_tx_received_from_blockchain_node = 300
        node_1_bdn_stats.new_tx_received_from_bdn = constants.UNSIGNED_SHORT_MAX_VALUE + 1  # unsigned short max (0xffff) + 1
        node_1_bdn_stats.new_blocks_seen = 800
        node_1_bdn_stats.new_block_messages_from_blockchain_node = 900
        node_1_bdn_stats.new_block_announcements_from_blockchain_node = 1000
        node_1_bdn_stats.tx_sent_to_node = 1100
        node_1_bdn_stats.duplicate_tx_from_node = 600
        end_time = datetime.utcnow()

        node_stats = {}
        node_1_ip = "127.0.0.1"
        node_1_port = 8001
        node_stats[IpEndpoint(node_1_ip, node_1_port)] = node_1_bdn_stats

        bdn_stats_msg = self.create_message_successfully(
            BdnPerformanceStatsMessage(start_time, end_time,
                                       memory_utilization_mb, node_stats),
            BdnPerformanceStatsMessage)

        ip_endpoint, stats = bdn_stats_msg.node_stats().popitem()
        self.assertEqual(start_time, bdn_stats_msg.interval_start_time())
        self.assertEqual(end_time, bdn_stats_msg.interval_end_time())
        self.assertEqual(
            node_1_bdn_stats.new_blocks_received_from_blockchain_node,
            stats.new_blocks_received_from_blockchain_node)
        self.assertEqual(node_1_bdn_stats.new_blocks_received_from_bdn,
                         stats.new_blocks_received_from_bdn)
        self.assertEqual(node_1_bdn_stats.new_tx_received_from_blockchain_node,
                         stats.new_tx_received_from_blockchain_node)
        self.assertEqual(node_1_bdn_stats.new_tx_received_from_bdn,
                         stats.new_tx_received_from_bdn)
        self.assertEqual(memory_utilization_mb,
                         bdn_stats_msg.memory_utilization())
        self.assertEqual(node_1_bdn_stats.new_blocks_seen,
                         stats.new_blocks_seen)
        self.assertEqual(
            node_1_bdn_stats.new_block_messages_from_blockchain_node,
            stats.new_block_messages_from_blockchain_node)
        self.assertEqual(
            node_1_bdn_stats.new_block_announcements_from_blockchain_node,
            stats.new_block_announcements_from_blockchain_node)
        self.assertEqual(node_1_bdn_stats.tx_sent_to_node,
                         stats.tx_sent_to_node)
        self.assertEqual(node_1_bdn_stats.duplicate_tx_from_node,
                         stats.duplicate_tx_from_node)
        self.assertEqual(node_1_ip, ip_endpoint.ip_address)
        self.assertEqual(node_1_port, ip_endpoint.port)
    def send_bdn_performance_stats(
            self, bdn_stats_interval: GatewayBdnPerformanceStatInterval):
        memory_utilization_mb = int(memory_utils.get_app_memory_usage() /
                                    constants.BYTE_TO_MB)
        bdn_stats_per_node = bdn_stats_interval.blockchain_node_to_bdn_stats
        if bdn_stats_per_node is None:
            bdn_stats_per_node = {}

        msg_to_send = BdnPerformanceStatsMessage(bdn_stats_interval.start_time,
                                                 bdn_stats_interval.end_time,
                                                 memory_utilization_mb,
                                                 bdn_stats_per_node)
        self.enqueue_msg(msg_to_send)
 def bdn_performance_stats_message(self) -> BdnPerformanceStatsMessage:
     node_stats = {}
     helpers.add_stats_to_node_stats(node_stats, "127.0.0.1", 8001, 20, 30,
                                     40, 50, 10, 10, 20, 100, 50)
     return BdnPerformanceStatsMessage(datetime.utcnow(), datetime.utcnow(),
                                       100, node_stats)
Exemplo n.º 10
0
    def test_message_preview_success_all_types(self):
        self.get_message_preview_successfully(
            HelloMessage(protocol_version=1,
                         network_num=2), HelloMessage.MESSAGE_TYPE,
            VersionMessage.VERSION_MESSAGE_LENGTH + UL_INT_SIZE_IN_BYTES +
            NODE_ID_SIZE_IN_BYTES - UL_INT_SIZE_IN_BYTES)
        self.get_message_preview_successfully(AckMessage(),
                                              AckMessage.MESSAGE_TYPE,
                                              constants.CONTROL_FLAGS_LEN)
        self.get_message_preview_successfully(PingMessage(),
                                              PingMessage.MESSAGE_TYPE, 9)
        self.get_message_preview_successfully(PongMessage(),
                                              PongMessage.MESSAGE_TYPE, 17)

        blob = bytearray(1 for _ in range(4))
        self.get_message_preview_successfully(
            BroadcastMessage(self.HASH, 1, self.NODE_ID, self.BROADCAST_TYPE,
                             True, blob), BroadcastMessage.MESSAGE_TYPE,
            SHA256_HASH_LEN + NETWORK_NUM_LEN + constants.BROADCAST_TYPE_LEN +
            BLOCK_ENCRYPTED_FLAG_LEN + constants.NODE_ID_SIZE_IN_BYTES +
            len(blob) + constants.CONTROL_FLAGS_LEN)
        self.get_message_preview_successfully(
            TxMessage(self.HASH, 1, self.NODE_ID, 12,
                      blob), TxMessage.MESSAGE_TYPE, SHA256_HASH_LEN +
            NETWORK_NUM_LEN + UL_INT_SIZE_IN_BYTES + TRANSACTION_FLAG_LEN +
            constants.NODE_ID_SIZE_IN_BYTES + len(blob) +
            constants.DOUBLE_SIZE_IN_BYTES + constants.CONTROL_FLAGS_LEN)
        self.get_message_preview_successfully(
            KeyMessage(self.HASH, 1, self.NODE_ID,
                       bytearray(1 for _ in range(KEY_SIZE))),
            KeyMessage.MESSAGE_TYPE,
            SHA256_HASH_LEN + KEY_SIZE + NETWORK_NUM_LEN +
            constants.NODE_ID_SIZE_IN_BYTES + constants.CONTROL_FLAGS_LEN)
        self.get_message_preview_successfully(
            BlockHoldingMessage(self.HASH, 1, self.NODE_ID),
            BlockHoldingMessage.MESSAGE_TYPE,
            SHA256_HASH_LEN + NETWORK_NUM_LEN +
            constants.NODE_ID_SIZE_IN_BYTES + constants.CONTROL_FLAGS_LEN)

        get_txs = [1, 2, 3]
        self.get_message_preview_successfully(
            GetTxsMessage(get_txs), GetTxsMessage.MESSAGE_TYPE,
            UL_INT_SIZE_IN_BYTES + UL_INT_SIZE_IN_BYTES * len(get_txs) +
            constants.CONTROL_FLAGS_LEN)

        txs = [
            TransactionInfo(Sha256Hash(crypto.double_sha256(b"123")),
                            bytearray(4), 1),
            TransactionInfo(Sha256Hash(crypto.double_sha256(b"234")),
                            bytearray(8), 2)
        ]
        expected_length = (UL_INT_SIZE_IN_BYTES +
                           sum(UL_INT_SIZE_IN_BYTES + SHA256_HASH_LEN +
                               UL_INT_SIZE_IN_BYTES + len(tx.contents)
                               for tx in txs) + constants.CONTROL_FLAGS_LEN)
        self.get_message_preview_successfully(TxsMessage(txs),
                                              TxsMessage.MESSAGE_TYPE,
                                              expected_length)

        expected_length = (2 * constants.DOUBLE_SIZE_IN_BYTES) + (5 * constants.UL_SHORT_SIZE_IN_BYTES) + \
                          (7 * constants.UL_INT_SIZE_IN_BYTES) + constants.IP_ADDR_SIZE_IN_BYTES + \
                          constants.CONTROL_FLAGS_LEN
        node_stats = {}
        helpers.add_stats_to_node_stats(node_stats, "127.0.0.1", 8001, 200,
                                        300, 400, 500, 600, 700, 800, 100, 50)
        self.get_message_preview_successfully(
            BdnPerformanceStatsMessage(datetime.utcnow(), datetime.utcnow(),
                                       100, node_stats),
            BdnPerformanceStatsMessage.MESSAGE_TYPE, expected_length)

        # multi node bdn stats message
        expected_length = (
            constants.CONTROL_FLAGS_LEN +
            (2 * constants.DOUBLE_SIZE_IN_BYTES) +  # start/end time
            constants.UL_SHORT_SIZE_IN_BYTES +  # memory
            constants.UL_SHORT_SIZE_IN_BYTES +  # num blockchain peers
            (
                3 *  # num blockchain peers
                (
                    constants.IP_ADDR_SIZE_IN_BYTES +  # ip
                    constants.UL_SHORT_SIZE_IN_BYTES +  # port
                    (2 * constants.UL_SHORT_SIZE_IN_BYTES)
                    +  # original block stats
                    (7 * constants.UL_INT_SIZE_IN_BYTES))))  # rest of stats

        node_stats = {}
        helpers.add_stats_to_node_stats(node_stats, "127.0.0.1", 8001, 200,
                                        300, 400, 500, 600, 700, 800, 100, 50)
        helpers.add_stats_to_node_stats(node_stats, "127.0.0.2", 8002, 200,
                                        300, 400, 500, 600, 700, 800, 100, 50)
        helpers.add_stats_to_node_stats(node_stats, "127.0.0.3", 8003, 200,
                                        300, 400, 500, 600, 700, 800, 100, 50)
        self.get_message_preview_successfully(
            BdnPerformanceStatsMessage(datetime.utcnow(), datetime.utcnow(),
                                       100, node_stats),
            BdnPerformanceStatsMessage.MESSAGE_TYPE, expected_length)

        tx_info = TransactionInfo(crypto.double_sha256(b"123"), bytearray(4),
                                  1)
        expected_length = constants.NETWORK_NUM_LEN + constants.SID_LEN + SHA256_HASH_LEN + \
                          constants.UL_INT_SIZE_IN_BYTES + constants.CONTROL_FLAGS_LEN + len(tx_info.contents)
        self.get_message_preview_successfully(TxContentsMessage(5, tx_info),
                                              TxContentsMessage.MESSAGE_TYPE,
                                              expected_length)

        expected_length = constants.NETWORK_NUM_LEN + constants.SID_LEN + constants.CONTROL_FLAGS_LEN
        self.get_message_preview_successfully(
            GetTxContentsMessage(1, 2), GetTxContentsMessage.MESSAGE_TYPE,
            expected_length)