async def test_deadline(loop): stream = H2StreamStub(loop=loop) headers = [ (':method', 'POST'), (':path', '/package.Service/Method'), ('te', 'trailers'), ('content-type', 'application/grpc'), ('grpc-timeout', '10m'), ] async def _method(stream_): await asyncio.sleep(1) methods = {'/package.Service/Method': Handler( _method, Cardinality.UNARY_UNARY, DummyRequest, DummyReply, )} task = loop.create_task( request_handler(methods, stream, headers, ProtoCodec(), release_stream) ) await asyncio.wait_for(task, 0.1, loop=loop) assert stream.__events__ == [ SendHeaders(headers=[ (':status', '200'), ('grpc-status', '4'), # DEADLINE_EXCEEDED ], end_stream=True), Reset(ErrorCodes.NO_ERROR), ]
def __mapping__(self): return { '/test.Test/Case': Handler( self.Case, cardinality, Empty, Empty, ) }
async def test_client_reset( loop, caplog, handler, level, msg, exc_type, exc_text, config, ): caplog.set_level(logging.INFO) client_h2c, server_h2c = create_connections() to_client_transport = TransportStub(client_h2c) to_server_transport = TransportStub(server_h2c) client_conn = Connection(client_h2c, to_server_transport, config=config) server_conn = Connection(server_h2c, to_client_transport, config=config) server_proc = EventsProcessor(DummyHandler(), server_conn) client_proc = EventsProcessor(DummyHandler(), client_conn) client_h2_stream = client_conn.create_stream() await client_h2_stream.send_request( create_headers(path='/package.Service/Method'), _processor=client_proc, ) to_server_transport.process(server_proc) server_h2_stream = server_proc.handler.stream methods = { '/package.Service/Method': Handler( handler, Cardinality.UNARY_UNARY, DummyRequest, DummyReply, ) } task = loop.create_task( call_handler(methods, server_h2_stream, server_proc.handler.headers)) await asyncio.wait([task], timeout=0.001) await client_h2_stream.reset() to_server_transport.process(server_proc) await asyncio.wait_for(task, 0.1) record, = caplog.records assert record.name == 'grpclib.server' assert record.levelname == level assert msg in record.getMessage() if exc_type is not None: assert record.exc_info[0] is exc_type if exc_text is not None: assert exc_text in record.exc_text
async def test_client_reset(loop, caplog): client_h2c, server_h2c = create_connections() to_client_transport = TransportStub(client_h2c) to_server_transport = TransportStub(server_h2c) client_conn = Connection(client_h2c, to_server_transport, loop=loop) server_conn = Connection(server_h2c, to_client_transport, loop=loop) server_proc = EventsProcessor(DummyHandler(), server_conn) client_proc = EventsProcessor(DummyHandler(), client_conn) client_h2_stream = client_conn.create_stream() await client_h2_stream.send_request( create_headers(path='/package.Service/Method'), _processor=client_proc, ) to_server_transport.process(server_proc) server_h2_stream = server_proc.handler.stream success = [] async def _method(_): try: await asyncio.sleep(1) except asyncio.CancelledError: success.append(True) raise methods = {'/package.Service/Method': Handler( _method, Cardinality.UNARY_UNARY, DummyRequest, DummyReply, )} task = loop.create_task( call_handler(methods, server_h2_stream, server_proc.handler.headers) ) await asyncio.wait([task], timeout=0.001) await client_h2_stream.reset() to_server_transport.process(server_proc) await asyncio.wait_for(task, 0.1, loop=loop) assert success == [True] assert 'Request was cancelled' in caplog.text
async def test_deadline(loop, caplog, handler, level, msg, exc_type, exc_text): caplog.set_level(logging.INFO) stream = H2StreamStub() headers = [ (':method', 'POST'), (':path', '/package.Service/Method'), ('te', 'trailers'), ('content-type', 'application/grpc'), ('grpc-timeout', '10m'), ] methods = { '/package.Service/Method': Handler( handler, Cardinality.UNARY_UNARY, DummyRequest, DummyReply, ) } task = loop.create_task(call_handler(methods, stream, headers)) await asyncio.wait_for(task, 0.1) assert stream.__events__ == [ SendHeaders( headers=[ (':status', '200'), ('content-type', 'application/grpc+proto'), ('grpc-status', '4'), # DEADLINE_EXCEEDED ], end_stream=True), Reset(ErrorCodes.NO_ERROR), ] record, = caplog.records assert record.name == 'grpclib.server' assert record.levelname == level assert msg in record.getMessage() if exc_type is not None: assert record.exc_info[0] is exc_type if exc_text is not None: assert exc_text in record.exc_text
def __mapping__(self) -> Dict[str, Handler]: return { "": Handler(), }