Skip to content

Commit e214655

Browse files
Add async usage test
1 parent 7692825 commit e214655

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

test/test_grpc_async_usage.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import typing
2+
import pytest
3+
4+
import grpc
5+
from testproto.grpc import dummy_pb2, dummy_pb2_grpc
6+
7+
ADDRESS = "localhost:22223"
8+
9+
10+
class Servicer(dummy_pb2_grpc.DummyServiceServicer):
11+
async def UnaryUnary(
12+
self,
13+
request: dummy_pb2.DummyRequest,
14+
context: grpc.aio.ServicerContext,
15+
) -> dummy_pb2.DummyReply:
16+
return dummy_pb2.DummyReply(value=request.value[::-1])
17+
18+
async def UnaryStream(
19+
self,
20+
request: dummy_pb2.DummyRequest,
21+
context: grpc.aio.ServicerContext,
22+
) -> typing.AsyncIterator[dummy_pb2.DummyReply]:
23+
for char in request.value:
24+
yield dummy_pb2.DummyReply(value=char)
25+
26+
async def StreamUnary(
27+
self,
28+
request: typing.AsyncIterator[dummy_pb2.DummyRequest],
29+
context: grpc.aio.ServicerContext,
30+
) -> dummy_pb2.DummyReply:
31+
values = [data.value async for data in request]
32+
return dummy_pb2.DummyReply(value="".join(values))
33+
34+
async def StreamStream(
35+
self,
36+
request: typing.AsyncIterator[dummy_pb2.DummyRequest],
37+
context: grpc.ServicerContext,
38+
) -> typing.AsyncIterator[dummy_pb2.DummyReply]:
39+
async for data in request:
40+
yield dummy_pb2.DummyReply(value=data.value.upper())
41+
42+
43+
def make_server() -> grpc.aio.Server:
44+
server = grpc.aio.server()
45+
servicer = Servicer()
46+
server.add_insecure_port(ADDRESS)
47+
dummy_pb2_grpc.add_DummyServiceServicer_to_server(servicer, server)
48+
return server
49+
50+
51+
@pytest.mark.asyncio
52+
async def test_grpc() -> None:
53+
server = make_server()
54+
await server.start()
55+
async with grpc.aio.insecure_channel(ADDRESS) as channel:
56+
client = dummy_pb2_grpc.DummyServiceStub(channel)
57+
request = dummy_pb2.DummyRequest(value="cprg")
58+
result1 = await client.UnaryUnary(request)
59+
result2 = client.UnaryStream(dummy_pb2.DummyRequest(value=result1.value))
60+
result2_list = [r async for r in result2]
61+
assert len(result2_list) == 4
62+
result3 = client.StreamStream(dummy_pb2.DummyRequest(value=part.value) for part in result2_list)
63+
result3_list = [r async for r in result3]
64+
assert len(result3_list) == 4
65+
result4 = await client.StreamUnary(dummy_pb2.DummyRequest(value=part.value) for part in result3_list)
66+
assert result4.value == "GRPC"
67+
68+
await server.stop(None)

test_requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# generated code.
33
protobuf==4.21.9
44
pytest==7.2.0
5+
pytest-asyncio==0.20.3
56
grpc-stubs==1.24.11
67
grpcio-tools==1.50.0
78
types-protobuf==4.21.0.1

0 commit comments

Comments
 (0)