Exemple #1
0
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),
    ]
Exemple #2
0
 def __mapping__(self):
     return {
         '/test.Test/Case': Handler(
             self.Case,
             cardinality,
             Empty,
             Empty,
         )
     }
Exemple #3
0
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
Exemple #5
0
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
Exemple #6
0
 def __mapping__(self) -> Dict[str, Handler]:
     return {
         "": Handler(),
     }