Ejemplo n.º 1
0
def test_pack_request():
    """test of pack_request function
    """

    msgid = 37
    method = 'abc'
    params = [1, 'param']

    data = pack_request(msgid=msgid, method=method, params=params)
    req = validate_message(unpack_object(data))
    assert req == Request(MsgType.REQUEST, msgid, method, params)
def test_simple_method_server_request_invalid_method():
    """test of requests for non-existing methods to SimpleMethodServer class
    """

    name = 'test_method'
    executor = FunctionMethodExecutor(PythonLogger(), name, add)
    server = SimpleMethodServer(PythonLogger(), [executor])

    session = MockSession()

    msgid = 37
    name = 'invalid_method'
    params = [2, 3]
    request = pack_request(msgid, name, params)

    err = None
    has_response = None
    response = None
    processed = Event()

    def handler(err_in: ErrorInfo, has_response_in: bool,
                response_in: MessageData):
        """handler
        """

        nonlocal err
        nonlocal has_response
        nonlocal response
        nonlocal processed

        err = err_in
        has_response = has_response_in
        response = response_in
        processed.set()

    server.async_process_message(session, request, handler)

    timeout = 10.0
    processed.wait(timeout=timeout)
    assert processed.is_set()

    assert err is not None
    assert not err
    assert has_response
    assert response is not None

    response = validate_message(unpack_object(response))

    assert response.msgtype == MsgType.RESPONSE
    assert response.msgid == msgid
    assert response.error is not None
Ejemplo n.º 3
0
    def async_request(self, method: str, *args) -> Future:
        """asynchronously request

        Parameters
        ----------
        method : str
            method, remaining arguments are parameters to the method

        Returns
        -------
        Future
            future
        """

        with self.__lock:
            msgid = self.__next_msgid
            data = pack_request(msgid, method, args)
            future = Future()
            self.__impl.async_send(data, self._on_request_sent)
            future.set_running_or_notify_cancel()
            self.__next_msgid += 1
            self.__requests[msgid] = future

        return future
Ejemplo n.º 4
0
def test_server():
    """test of Server class
    """

    logger = PythonLogger(LogLevel.TRACE)

    name = 'add'
    logger = PythonLogger()
    executor = FunctionMethodExecutor(logger, name, add)
    method_server = SimpleMethodServer(logger, [executor])

    server_config = ServerConfig()
    server_config.tcp_acceptors = [TCPAcceptorConfig()]
    server = Server(logger, server_config, method_server)
    server.start()

    client_config = ClientConfig()

    response_error = None
    response_data = None
    response_received_event = Event()

    def client_process_message(error: ErrorInfo, data: MessageData):
        nonlocal response_error
        nonlocal response_data
        nonlocal response_received_event
        response_error = error
        response_data = data
        response_received_event.set()

    client = PythonClientHelper(logger, client_config, client_process_message)
    client.start()

    request_error = None
    request_sent_event = Event()

    def on_request_sent(error: ErrorInfo):
        nonlocal request_error
        nonlocal request_sent_event
        request_error = error
        request_sent_event.set()

    msgid = 37
    data = pack_request(msgid, name, [2, 3])
    client.async_send(data, on_request_sent)

    timeout = 10.0
    request_sent_event.wait(timeout=timeout)
    assert request_sent_event.is_set()
    assert not request_error

    response_received_event.wait(timeout=timeout)
    assert response_received_event.is_set()
    assert not response_error

    response = validate_message(unpack_object(response_data))
    assert response.msgtype == MsgType.RESPONSE
    assert response.msgid == msgid
    assert response.error is None
    assert response.result == 5

    client.stop()
    server.stop()