Skip to content

Commit 2620f09

Browse files
committed
update tests
1 parent ee8b1c8 commit 2620f09

3 files changed

Lines changed: 37 additions & 20 deletions

File tree

packages/gapic-generator/noxfile.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ def showcase_mtls(
457457
"""Run the Showcase mtls test suite."""
458458

459459
with showcase_library(session, templates=templates, other_opts=other_opts):
460-
session.install("pytest", "pytest-asyncio", "pyopenssl")
460+
session.install("pytest", "pytest-asyncio")
461461
test_directory = Path("tests", "system")
462462
ignore_file = env.get("IGNORE_FILE")
463463
pytest_command = [
@@ -486,9 +486,9 @@ def showcase_pqc(
486486
):
487487
"""Run the Showcase PQC verification test suite against grpcio 1.83+ over standard TLS."""
488488
with showcase_library(session, templates=templates, other_opts=other_opts):
489-
session.install("pytest", "pytest-asyncio", "pyopenssl")
489+
session.install("pytest", "pytest-asyncio")
490490
session.install("--pre", "--upgrade", "grpcio>=1.83.0rc0", "grpcio-status>=1.83.0rc0")
491-
session.run("py.test", "--quiet", "--tls", "-s", *(session.posargs or ["tests/system/test_pqc.py"]), env=env)
491+
session.run("py.test", "--quiet", "--tls", *(session.posargs or ["tests/system/test_pqc.py"]), env=env)
492492

493493

494494
def run_showcase_unit_tests(session, fail_under=100, rest_async_io_enabled=False):

packages/gapic-generator/tests/system/conftest.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ async def _add_request_metadata(self, client_call_details):
400400
async def intercept_unary_unary(self, continuation, client_call_details, request):
401401
await self._add_request_metadata(client_call_details)
402402
response = await continuation(client_call_details, request)
403-
metadata = [(k, str(v)) for k, v in await response.trailing_metadata()]
403+
metadata = [(k, str(v)) for k, v in await response.initial_metadata()] + [(k, str(v)) for k, v in await response.trailing_metadata()]
404404
self.response_metadata = metadata
405405
return response
406406

@@ -449,7 +449,7 @@ def intercepted_echo_grpc(use_mtls, use_tls):
449449

450450

451451
@pytest_asyncio.fixture
452-
async def intercepted_echo_grpc_async():
452+
async def intercepted_echo_grpc_async(use_mtls, use_tls):
453453
# The interceptor adds 'showcase-trailer' client metadata. Showcase server
454454
# echoes any metadata with key 'showcase-trailer', so the same metadata
455455
# should appear as trailing metadata in the response.
@@ -458,8 +458,12 @@ async def intercepted_echo_grpc_async():
458458
"intercepted",
459459
)
460460
host = "localhost:7469"
461-
channel = grpc.aio.insecure_channel(host, interceptors=[interceptor])
462-
# intercept_channel = grpc.aio.intercept_channel(channel, interceptor)
461+
if use_mtls:
462+
channel = grpc.aio.secure_channel(host, ssl_credentials, interceptors=[interceptor])
463+
elif use_tls:
464+
channel = grpc.aio.secure_channel(host, tls_credentials, interceptors=[interceptor])
465+
else:
466+
channel = grpc.aio.insecure_channel(host, interceptors=[interceptor])
463467
transport = EchoAsyncClient.get_transport_class("grpc_asyncio")(
464468
credentials=ga_credentials.AnonymousCredentials(),
465469
channel=channel,

packages/gapic-generator/tests/system/test_pqc.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,8 @@ def run_pqc_test(use_tls):
2424
pytest.skip("PQC integration test requires TLS (--tls or --mtls flag) to be enabled.")
2525

2626

27-
def _verify_pqc_negotiated_group(client, interceptor, transport_name):
28-
# Make secure call using standard GAPIC client library fixture
29-
response = client.echo(request=showcase.EchoRequest(content="Verify PQC connection."))
30-
assert response.content == "Verify PQC connection."
31-
32-
# Extract negotiated group and supported groups from response headers
27+
def _verify_pqc_metadata(interceptor, transport_name):
28+
"""Extracts and verifies negotiated PQC group and supported groups from interceptor metadata."""
3329
response_metadata = getattr(interceptor, "response_metadata", []) or []
3430
headers = {key.lower(): value for key, value in response_metadata}
3531
negotiated_group = headers.get("x-showcase-tls-group")
@@ -38,12 +34,10 @@ def _verify_pqc_negotiated_group(client, interceptor, transport_name):
3834
assert negotiated_group is not None, "Failed: Showcase server did not return negotiated TLS group header."
3935
assert supported_groups is not None, "Failed: Showcase server did not return client advertised supported groups."
4036

41-
print(f"\n[PQC Verification] ({transport_name}) Negotiated TLS Group: {negotiated_group}")
42-
print(f"[PQC Verification] ({transport_name}) Client Advertised Supported Groups: {supported_groups}")
43-
4437
# Enforce PQC compliance (X25519MLKEM768 or Kyber)
45-
assert "MLKEM" in negotiated_group or "Kyber" in negotiated_group, \
46-
f"Failed: {transport_name} Connection is NOT PQC-compliant! Negotiated: {negotiated_group}"
38+
assert (
39+
"MLKEM" in negotiated_group or "Kyber" in negotiated_group
40+
), f"Failed: {transport_name} Connection is NOT PQC-compliant! Negotiated: {negotiated_group}"
4741

4842

4943
def test_pqc_grpc(run_pqc_test, intercepted_echo_grpc):
@@ -53,12 +47,31 @@ def test_pqc_grpc(run_pqc_test, intercepted_echo_grpc):
5347
pytest.skip(f"gRPC PQC negotiation requires grpcio >= 1.83.0 (current: {grpc.__version__})")
5448

5549
client, interceptor = intercepted_echo_grpc
56-
_verify_pqc_negotiated_group(client, interceptor, "grpc")
50+
response = client.echo(request=showcase.EchoRequest(content="Verify PQC connection."))
51+
assert response.content == "Verify PQC connection."
52+
_verify_pqc_metadata(interceptor, "grpc")
5753

5854

5955
def test_pqc_rest(run_pqc_test, intercepted_echo_rest):
6056
"""Verifies that the REST client library negotiates PQC (X25519MLKEM768) with Showcase server."""
6157
client, interceptor = intercepted_echo_rest
62-
_verify_pqc_negotiated_group(client, interceptor, "rest")
58+
response = client.echo(request=showcase.EchoRequest(content="Verify PQC connection."))
59+
assert response.content == "Verify PQC connection."
60+
_verify_pqc_metadata(interceptor, "rest")
61+
62+
63+
@pytest.mark.asyncio
64+
async def test_pqc_grpc_async(run_pqc_test, intercepted_echo_grpc_async):
65+
"""Verifies that the async gRPC client library negotiates PQC (X25519MLKEM768) with Showcase server."""
66+
# TODO(Phase 3): Remove this check once grpcio >= 1.83.0 is enforced across all client libraries.
67+
if Version(grpc.__version__) < Version("1.83.0rc0"):
68+
pytest.skip(f"gRPC PQC negotiation requires grpcio >= 1.83.0 (current: {grpc.__version__})")
69+
70+
client, interceptor = intercepted_echo_grpc_async
71+
response = await client.echo(request=showcase.EchoRequest(content="Verify PQC connection."))
72+
assert response.content == "Verify PQC connection."
73+
_verify_pqc_metadata(interceptor, "grpc_asyncio")
74+
75+
6376

6477

0 commit comments

Comments
 (0)