Beispiel #1
0
async def test_exit_and_connection_was_broken(loop):
    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)

    request = Request('POST', 'http', '/', authority='test.com')
    client_h2_stream = client_conn.create_stream()
    await client_h2_stream.send_request(request.to_headers(),
                                        _processor=client_proc)

    request = SavoysRequest(kyler='cloth')
    await send_message(client_h2_stream, request, SavoysRequest, end=True)
    to_server_transport.process(server_proc)

    server_h2_stream = server_proc.handler.stream
    request_metadata = Metadata.from_headers(server_proc.handler.headers)

    with pytest.raises(WriteError):
        async with Stream(server_h2_stream,
                          Cardinality.UNARY_UNARY,
                          SavoysRequest,
                          SavoysReply,
                          metadata=request_metadata) as server_stream:
            await server_stream.recv_message()

            # simulate broken connection
            to_client_transport.__raise_on_write__(WriteError)
Beispiel #2
0
async def test_send_trailing_metadata_on_closed_stream(loop):
    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)

    request = Request('POST', 'http', '/',
                      content_type='application/grpc+proto',
                      authority='test.com')
    client_h2_stream = client_conn.create_stream()
    await client_h2_stream.send_request(request.to_headers(),
                                        _processor=client_proc)

    request = DummyRequest(value='ping')
    await send_message(client_h2_stream, ProtoCodec(), request, DummyRequest,
                       end=True)
    to_server_transport.process(server_proc)

    server_h2_stream = server_proc.handler.stream
    request_metadata = Metadata.from_headers(server_proc.handler.headers)

    send_trailing_metadata_done = False
    async with Stream(server_h2_stream, Cardinality.UNARY_UNARY, ProtoCodec(),
                      DummyRequest, DummyReply,
                      metadata=request_metadata) as server_stream:
        await server_stream.send_trailing_metadata(status=Status.UNKNOWN)
        send_trailing_metadata_done = True

    assert send_trailing_metadata_done
Beispiel #3
0
def test_headers_without_deadline():
    metadata = Metadata([('chagga', 'chrome')])

    assert Request(
        'flysch', 'plains', 'slaps', content_type='pemako', metadata=metadata,
    ).to_headers() == [
        (':method', 'flysch'),
        (':scheme', 'plains'),
        (':path', 'slaps'),
        ('te', 'trailers'),
        ('content-type', 'pemako'),
        ('chagga', 'chrome'),
    ]

    assert Request(
        'flysch', 'plains', 'slaps', authority='sleev', content_type='pemako',
        message_type='deltic', message_encoding='eutexia',
        message_accept_encoding='glyptic', user_agent='chrisom',
        metadata=metadata,
    ).to_headers() == [
        (':method', 'flysch'),
        (':scheme', 'plains'),
        (':path', 'slaps'),
        (':authority', 'sleev'),
        ('te', 'trailers'),
        ('content-type', 'pemako'),
        ('grpc-message-type', 'deltic'),
        ('grpc-encoding', 'eutexia'),
        ('grpc-accept-encoding', 'glyptic'),
        ('user-agent', 'chrisom'),
        ('chagga', 'chrome'),
    ]
Beispiel #4
0
async def test_exit_and_connection_was_closed(loop):
    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)

    request = Request('POST', 'http', '/',
                      content_type='application/grpc+proto',
                      authority='test.com')
    client_h2_stream = client_conn.create_stream()
    await client_h2_stream.send_request(request.to_headers(),
                                        _processor=client_proc)

    request = DummyRequest(value='ping')
    await send_message(client_h2_stream, ProtoCodec(), request, DummyRequest,
                       end=True)
    to_server_transport.process(server_proc)

    server_h2_stream = server_proc.handler.stream
    request_metadata = Metadata.from_headers(server_proc.handler.headers)

    async with Stream(server_h2_stream, Cardinality.UNARY_UNARY, ProtoCodec(),
                      DummyRequest, DummyReply,
                      metadata=request_metadata) as server_stream:
        await server_stream.recv_message()
        client_h2c.close_connection()
        to_server_transport.process(server_proc)

        raise ServerError()  # should be suppressed
Beispiel #5
0
def test_decode_metadata_empty():
    metadata = decode_metadata([
        (':method', 'POST'),
        ('te', 'trailers'),
        ('content-type', 'application/grpc'),
        ('user-agent', 'Test'),
        ('grpc-timeout', '100m'),
    ])
    assert metadata == Metadata()
Beispiel #6
0
def test_decode_metadata_regular(key, value, expected):
    metadata = decode_metadata([
        (':method', 'POST'),
        ('te', 'trailers'),
        ('content-type', 'application/grpc'),
        ('user-agent', 'Test'),
        ('grpc-timeout', '100m'),
        (key, value),
    ])
    assert metadata == Metadata({key: expected})
    assert type(metadata[key]) is type(expected)
Beispiel #7
0
def test_headers_with_deadline():
    deadline = Mock()
    deadline.time_remaining.return_value = 0.1

    metadata = Metadata([('dominic', 'lovech')])

    assert Request(
        'briana',
        'dismal',
        'dost',
        authority='lemnos',
        content_type='gazebos',
        metadata=metadata,
        deadline=deadline,
    ).to_headers() == [
        (':method', 'briana'),
        (':scheme', 'dismal'),
        (':path', 'dost'),
        (':authority', 'lemnos'),
        ('grpc-timeout', '100m'),
        ('te', 'trailers'),
        ('content-type', 'gazebos'),
        ('dominic', 'lovech'),
    ]

    assert Request(
        'briana',
        'dismal',
        'dost',
        authority='edges',
        content_type='gazebos',
        message_type='dobson',
        message_encoding='patera',
        message_accept_encoding='shakers',
        user_agent='dowlin',
        metadata=metadata,
        deadline=deadline,
    ).to_headers() == [
        (':method', 'briana'),
        (':scheme', 'dismal'),
        (':path', 'dost'),
        (':authority', 'edges'),
        ('grpc-timeout', '100m'),
        ('te', 'trailers'),
        ('content-type', 'gazebos'),
        ('grpc-message-type', 'dobson'),
        ('grpc-encoding', 'patera'),
        ('grpc-accept-encoding', 'shakers'),
        ('user-agent', 'dowlin'),
        ('dominic', 'lovech'),
    ]
Beispiel #8
0
def _stream_streaming(stub):
    return Stream(stub,
                  Cardinality.UNARY_STREAM,
                  SavoysRequest,
                  SavoysReply,
                  metadata=Metadata([]))
Beispiel #9
0
def _stream_streaming(stub):
    return Stream(stub, Cardinality.UNARY_STREAM, ProtoCodec(),
                  DummyRequest, DummyReply, metadata=Metadata([]))