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)
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
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'), ]
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
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()
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)
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'), ]
def _stream_streaming(stub): return Stream(stub, Cardinality.UNARY_STREAM, SavoysRequest, SavoysReply, metadata=Metadata([]))
def _stream_streaming(stub): return Stream(stub, Cardinality.UNARY_STREAM, ProtoCodec(), DummyRequest, DummyReply, metadata=Metadata([]))