def get_queued_node_message(node: AbstractNode, fileno: int, message_type: str): bytes_to_send = node.get_bytes_to_send(fileno) assert message_type in bytes_to_send.tobytes(), \ f"could not find {message_type} in message bytes {convert.bytes_to_hex(bytes_to_send.tobytes())}" node.on_bytes_sent(fileno, len(bytes_to_send)) return bytes_to_send
def get_queued_node_messages(node: AbstractNode, fileno: int) -> List[AbstractMessage]: connection = node.connection_pool.get_by_fileno(fileno) assert connection is not None assert connection.message_factory is not None bytes_to_send = node.get_bytes_to_send(fileno) input_buffer = create_input_buffer_with_bytes(bytes_to_send) total_bytes = 0 messages = [] ( is_full_message, _message_type, payload_length, ) = connection.message_factory.get_message_header_preview_from_input_buffer(input_buffer) while is_full_message: message_length = connection.message_factory.base_message_type.HEADER_LENGTH + payload_length message_contents = input_buffer.remove_bytes(message_length) total_bytes += message_length messages.append(connection.message_factory.create_message_from_buffer(message_contents)) ( is_full_message, _message_type, payload_length, ) = connection.message_factory.get_message_header_preview_from_input_buffer(input_buffer) if total_bytes: node.on_bytes_sent(fileno, total_bytes) return messages
def setUp(self) -> None: self.socket_instance = MagicMock(spec=socket.socket) self.socket_instance.fileno = MagicMock(return_value=1) self.node = AbstractNode(helpers.get_common_opts(1234)) self.sut = SocketConnection(self.socket_instance, self.node, False) self.connection = helpers.create_connection(MockConnection, self.node, from_me=True) self.connection.socket_connection = self.sut
def get_queued_node_bytes( node: AbstractNode, fileno: int, message_type: bytes, flush: bool = True ) -> memoryview: bytes_to_send = node.get_bytes_to_send(fileno) assert bytes_to_send is not None assert message_type in bytes_to_send.tobytes(), ( f"could not find {message_type} in message bytes " f"{convert.bytes_to_hex(bytes_to_send.tobytes())} " f"on file_no: {fileno}" ) if flush: node.on_bytes_sent(fileno, len(bytes_to_send)) return bytes_to_send
class SocketConnectionTest(AbstractTestCase): def setUp(self) -> None: self.socket_instance = MagicMock(spec=socket.socket) self.socket_instance.fileno = MagicMock(return_value=1) self.node = AbstractNode(helpers.get_common_opts(1234)) self.sut = SocketConnection(self.socket_instance, self.node, False) self.connection = helpers.create_connection(MockConnection, self.node, from_me=True) self.connection.socket_connection = self.sut def test_close_from_socket(self): self.socket_instance.recv_into = MagicMock(return_value=0) self.sut.receive() self.assertIn((1, True), self.node.disconnect_queue) self.assertTrue(self.sut.state & SocketConnectionState.MARK_FOR_CLOSE) self.node.on_connection_closed(1, True) self.assertEqual(0, len(self.node.connection_pool))