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