Пример #1
0
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
Пример #2
0
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
Пример #3
0
 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
Пример #4
0
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
Пример #5
0
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))