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(), )
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, )
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)
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)
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)
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)
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)