def test_4_async_call(self): """send a bunch of requests and then wait for responses """ num_calls = 9999 old_blocking = self._client_sock.setblocking(0) try: e = rpc.EndPoint(self._client_sock) s = set() for i in range(1, num_calls + 1): s.add(e.send_request("resp", [i])) sum = 0 while s: e.block() e.process() done = set() for x in s: r = e.get_response(x) if r is None: continue res, error = r assert error is None sum += res done.add(x) assert done.issubset(s) s -= done assert sum == (1 + num_calls) * num_calls / 2 finally: self._client_sock.setblocking(old_blocking)
def peer_accept_handler(self, new_sock, addr): peer = Peer(self._rpc_events) table = { rpc.MessageType.REQUEST: peer._handle_vrrp_request, } peer._endpoint = rpc.EndPoint(new_sock, disp_table=table) self._peers.append(peer) hub.spawn(self._peer_loop_thread, peer)
def setUp(self): self._server_sock, self._client_sock = socket.socketpair() table = { rpc.MessageType.REQUEST: self._handle_request, rpc.MessageType.RESPONSE: self._handle_response, rpc.MessageType.NOTIFY: self._handle_notification } self._requests = set() self._server_sock.setblocking(0) self._server_endpoint = rpc.EndPoint(self._server_sock, disp_table=table) self._server_thread = hub.spawn(self._server_endpoint.serve)
def test_4_async_call2(self): """both sides act as rpc client and server """ assert not self._requests num_calls = 100 old_blocking = self._client_sock.setblocking(0) try: e = rpc.EndPoint(self._client_sock) s = set() for i in range(1, num_calls + 1): s.add(e.send_request("callback", [i, "ourcallback", 0])) sum = 0 while s: e.block() e.process() done = set() for x in s: r = e.get_response(x) if r is None: continue res, error = r assert error is None sum += res done.add(x) assert done.issubset(s) s -= done r = e.get_request() if not r is None: msgid, method, params = r assert method == "ourcallback" omsgid, n, cb, v = params assert omsgid in s assert cb == "ourcallback" assert n > 0 e.send_response(msgid, result=[omsgid, n - 1, cb, v + 1]) assert sum == (1 + num_calls) * num_calls / 2 finally: self._client_sock.setblocking(old_blocking) assert not self._requests