Generate grpclib service stubs (#170)
This commit is contained in:
@@ -17,4 +17,5 @@ services = {
|
||||
"import_service_input_message",
|
||||
"googletypes_service_returns_empty",
|
||||
"googletypes_service_returns_googletype",
|
||||
"example_service",
|
||||
}
|
||||
|
20
tests/inputs/example_service/example_service.proto
Normal file
20
tests/inputs/example_service/example_service.proto
Normal file
@@ -0,0 +1,20 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package example_service;
|
||||
|
||||
service Test {
|
||||
rpc ExampleUnaryUnary(ExampleRequest) returns (ExampleResponse);
|
||||
rpc ExampleUnaryStream(ExampleRequest) returns (stream ExampleResponse);
|
||||
rpc ExampleStreamUnary(stream ExampleRequest) returns (ExampleResponse);
|
||||
rpc ExampleStreamStream(stream ExampleRequest) returns (stream ExampleResponse);
|
||||
}
|
||||
|
||||
message ExampleRequest {
|
||||
string example_string = 1;
|
||||
int64 example_integer = 2;
|
||||
}
|
||||
|
||||
message ExampleResponse {
|
||||
string example_string = 1;
|
||||
int64 example_integer = 2;
|
||||
}
|
95
tests/inputs/example_service/test_example_service.py
Normal file
95
tests/inputs/example_service/test_example_service.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from typing import AsyncIterator, AsyncIterable
|
||||
|
||||
import pytest
|
||||
from grpclib.testing import ChannelFor
|
||||
|
||||
from tests.output_betterproto.example_service.example_service import (
|
||||
TestBase,
|
||||
TestStub,
|
||||
ExampleRequest,
|
||||
ExampleResponse,
|
||||
)
|
||||
|
||||
|
||||
class ExampleService(TestBase):
|
||||
async def example_unary_unary(
|
||||
self, example_string: str, example_integer: int
|
||||
) -> "ExampleResponse":
|
||||
return ExampleResponse(
|
||||
example_string=example_string,
|
||||
example_integer=example_integer,
|
||||
)
|
||||
|
||||
async def example_unary_stream(
|
||||
self, example_string: str, example_integer: int
|
||||
) -> AsyncIterator["ExampleResponse"]:
|
||||
response = ExampleResponse(
|
||||
example_string=example_string,
|
||||
example_integer=example_integer,
|
||||
)
|
||||
yield response
|
||||
yield response
|
||||
yield response
|
||||
|
||||
async def example_stream_unary(
|
||||
self, request_iterator: AsyncIterator["ExampleRequest"]
|
||||
) -> "ExampleResponse":
|
||||
async for example_request in request_iterator:
|
||||
return ExampleResponse(
|
||||
example_string=example_request.example_string,
|
||||
example_integer=example_request.example_integer,
|
||||
)
|
||||
|
||||
async def example_stream_stream(
|
||||
self, request_iterator: AsyncIterator["ExampleRequest"]
|
||||
) -> AsyncIterator["ExampleResponse"]:
|
||||
async for example_request in request_iterator:
|
||||
yield ExampleResponse(
|
||||
example_string=example_request.example_string,
|
||||
example_integer=example_request.example_integer,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_calls_with_different_cardinalities():
|
||||
test_string = "test string"
|
||||
test_int = 42
|
||||
|
||||
async with ChannelFor([ExampleService()]) as channel:
|
||||
stub = TestStub(channel)
|
||||
|
||||
# unary unary
|
||||
response = await stub.example_unary_unary(
|
||||
example_string="test string",
|
||||
example_integer=42,
|
||||
)
|
||||
assert response.example_string == test_string
|
||||
assert response.example_integer == test_int
|
||||
|
||||
# unary stream
|
||||
async for response in stub.example_unary_stream(
|
||||
example_string="test string",
|
||||
example_integer=42,
|
||||
):
|
||||
assert response.example_string == test_string
|
||||
assert response.example_integer == test_int
|
||||
|
||||
# stream unary
|
||||
request = ExampleRequest(
|
||||
example_string=test_string,
|
||||
example_integer=42,
|
||||
)
|
||||
|
||||
async def request_iterator():
|
||||
yield request
|
||||
yield request
|
||||
yield request
|
||||
|
||||
response = await stub.example_stream_unary(request_iterator())
|
||||
assert response.example_string == test_string
|
||||
assert response.example_integer == test_int
|
||||
|
||||
# stream stream
|
||||
async for response in stub.example_stream_stream(request_iterator()):
|
||||
assert response.example_string == test_string
|
||||
assert response.example_integer == test_int
|
Reference in New Issue
Block a user