Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 05f6c65

Browse files
committed
add async rest tests
1 parent 7147a58 commit 05f6c65

File tree

3 files changed

+79
-6
lines changed

3 files changed

+79
-6
lines changed

tests/system/conftest.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
try:
4646
from google.showcase_v1beta1.services.echo.transports import (
4747
AsyncEchoRestTransport,
48+
AsyncEchoRestInterceptor,
4849
)
4950

5051
HAS_ASYNC_REST_ECHO_TRANSPORT = True
@@ -272,6 +273,28 @@ def post_expand_with_metadata(self, request, metadata):
272273
return request, metadata
273274

274275

276+
if HAS_ASYNC_REST_ECHO_TRANSPORT:
277+
class EchoMetadataClientRestAsyncInterceptor(AsyncEchoRestInterceptor):
278+
request_metadata: Sequence[Tuple[str, str]] = []
279+
response_metadata: Sequence[Tuple[str, str]] = []
280+
281+
async def pre_echo(self, request, metadata):
282+
self.request_metadata = metadata
283+
return request, metadata
284+
285+
async def post_echo_with_metadata(self, request, metadata):
286+
self.response_metadata = metadata
287+
return request, metadata
288+
289+
async def pre_expand(self, request, metadata):
290+
self.request_metadata = metadata
291+
return request, metadata
292+
293+
async def post_expand_with_metadata(self, request, metadata):
294+
self.response_metadata = metadata
295+
return request, metadata
296+
297+
275298
class EchoMetadataClientGrpcInterceptor(
276299
grpc.UnaryUnaryClientInterceptor,
277300
grpc.UnaryStreamClientInterceptor,
@@ -401,6 +424,7 @@ def intercepted_echo_grpc_async():
401424
)
402425
return EchoAsyncClient(transport=transport), interceptor
403426

427+
404428
@pytest.fixture
405429
def intercepted_echo_rest():
406430
transport_name = "rest"
@@ -415,3 +439,22 @@ def intercepted_echo_rest():
415439
interceptor=interceptor,
416440
)
417441
return EchoClient(transport=transport), interceptor
442+
443+
444+
@pytest.fixture
445+
def intercepted_echo_rest_async():
446+
if not HAS_ASYNC_REST_ECHO_TRANSPORT:
447+
pytest.skip("Skipping test with async rest.")
448+
449+
transport_name = "rest_asyncio"
450+
transport_cls = EchoAsyncClient.get_transport_class(transport_name)
451+
interceptor = EchoMetadataClientRestAsyncInterceptor()
452+
453+
# The custom host explicitly bypasses https.
454+
transport = transport_cls(
455+
credentials=async_anonymous_credentials(),
456+
host="localhost:7469",
457+
url_scheme="http",
458+
interceptor=interceptor,
459+
)
460+
return EchoAsyncClient(transport=transport), interceptor

tests/system/test_grpc_interceptor_streams.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323

2424
def test_unary_stream(intercepted_echo_grpc):
2525
client, interceptor = intercepted_echo_grpc
26-
content = 'The hail in Wales falls mainly on the snails.'
26+
content = "The hail in Wales falls mainly on the snails."
2727
responses = client.expand(
2828
{
2929
"content": content,
3030
}
3131
)
3232

33-
for ground_truth, response in zip(content.split(' '), responses):
33+
for ground_truth, response in zip(content.split(" "), responses):
3434
assert response.content == ground_truth
3535
assert ground_truth == "snails."
3636

tests/system/test_response_metadata.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,45 @@ def test_metadata_response_rest_streams(intercepted_echo_rest):
6262
if os.environ.get("GAPIC_PYTHON_ASYNC", "true") == "true":
6363

6464
@pytest.mark.asyncio
65-
async def test_metadata_response_grpc_unary_async(intercepted_echo_grpc_async):
65+
async def test_metadata_response_rest_streams_async(intercepted_echo_rest_async):
66+
request_content = "The hail in Wales falls mainly on the snails."
67+
request_metadata = ("something2", "something_value2")
68+
response_metadata = ("X-Showcase-Request-Something2", "something_value2")
69+
client, interceptor = intercepted_echo_rest_async
70+
await client.expand(
71+
{
72+
"content": request_content,
73+
},
74+
metadata=(request_metadata,),
75+
)
76+
77+
assert request_metadata in interceptor.request_metadata
78+
assert response_metadata in interceptor.response_metadata
79+
80+
@pytest.mark.parametrize(
81+
"transport,response_metadata",
82+
[
83+
("grpc_asyncio", ("something3", "something_value3")),
84+
("rest_asyncio", ("X-Showcase-Request-Something3", "something_value3")),
85+
],
86+
)
87+
@pytest.mark.asyncio
88+
async def test_metadata_response_unary_async(
89+
intercepted_echo_grpc_async,
90+
intercepted_echo_rest_async,
91+
transport,
92+
response_metadata,
93+
):
6694
request_content = "The hail in Wales falls mainly on the snails."
6795
request_metadata = ("something3", "something_value3")
68-
response_metadata = ("something3", "something_value3")
6996

70-
client, interceptor = intercepted_echo_grpc_async
97+
if transport == "grpc_asyncio":
98+
client, interceptor = intercepted_echo_grpc_async
99+
else:
100+
client, interceptor = intercepted_echo_rest_async
71101
response = await client.echo(
72102
request=showcase.EchoRequest(content=request_content),
73-
metadata=(("something3", "something_value3"),),
103+
metadata=(request_metadata,),
74104
)
75105
assert response.content == request_content
76106
assert request_metadata in interceptor.request_metadata

0 commit comments

Comments
 (0)