Skip to content

Commit 5c9a12e

Browse files
committed
Merge pull request #1 from boukeversteegh/client-streaming-tests
Client streaming tests
2 parents e1ccd54 + 4e78fe9 commit 5c9a12e

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import asyncio
2+
import betterproto
3+
from betterproto.grpc.util.async_channel import AsyncChannel
4+
from dataclasses import dataclass
5+
import pytest
6+
from typing import AsyncIterator
7+
8+
9+
@dataclass
10+
class Message(betterproto.Message):
11+
body: str = betterproto.string_field(1)
12+
13+
14+
@pytest.fixture
15+
def expected_responses():
16+
return [Message("Hello world 1"), Message("Hello world 2"), Message("Done")]
17+
18+
19+
class ClientStub:
20+
async def connect(self, requests: AsyncIterator):
21+
await asyncio.sleep(0.1)
22+
async for request in requests:
23+
await asyncio.sleep(0.1)
24+
yield request
25+
await asyncio.sleep(0.1)
26+
yield Message("Done")
27+
28+
29+
async def to_list(generator: AsyncIterator):
30+
result = []
31+
async for value in generator:
32+
result.append(value)
33+
return result
34+
35+
36+
@pytest.fixture
37+
def client():
38+
# channel = Channel(host='127.0.0.1', port=50051)
39+
# return ClientStub(channel)
40+
return ClientStub()
41+
42+
43+
@pytest.mark.asyncio
44+
async def test_send_from_before_connect_and_close_automatically(
45+
client, expected_responses
46+
):
47+
requests = AsyncChannel()
48+
await requests.send_from(
49+
[Message(body="Hello world 1"), Message(body="Hello world 2")], close=True
50+
)
51+
responses = client.connect(requests)
52+
53+
assert await to_list(responses) == expected_responses
54+
55+
56+
@pytest.mark.asyncio
57+
async def test_send_from_after_connect_and_close_automatically(
58+
client, expected_responses
59+
):
60+
requests = AsyncChannel()
61+
responses = client.connect(requests)
62+
await requests.send_from(
63+
[Message(body="Hello world 1"), Message(body="Hello world 2")], close=True
64+
)
65+
66+
assert await to_list(responses) == expected_responses
67+
68+
69+
@pytest.mark.asyncio
70+
async def test_send_from_close_manually_immediately(client, expected_responses):
71+
requests = AsyncChannel()
72+
responses = client.connect(requests)
73+
await requests.send_from(
74+
[Message(body="Hello world 1"), Message(body="Hello world 2")], close=False
75+
)
76+
requests.close()
77+
78+
assert await to_list(responses) == expected_responses
79+
80+
81+
@pytest.mark.asyncio
82+
async def test_send_individually_and_close_before_connect(client, expected_responses):
83+
requests = AsyncChannel()
84+
await requests.send(Message(body="Hello world 1"))
85+
await requests.send(Message(body="Hello world 2"))
86+
requests.close()
87+
responses = client.connect(requests)
88+
89+
assert await to_list(responses) == expected_responses
90+
91+
92+
@pytest.mark.asyncio
93+
async def test_send_individually_and_close_after_connect(client, expected_responses):
94+
requests = AsyncChannel()
95+
await requests.send(Message(body="Hello world 1"))
96+
await requests.send(Message(body="Hello world 2"))
97+
responses = client.connect(requests)
98+
requests.close()
99+
100+
assert await to_list(responses) == expected_responses

0 commit comments

Comments
 (0)