@@ -160,14 +160,28 @@ def install_unittest_dependencies(session, *constraints):
160160 session .install ("-e" , "." , * constraints )
161161
162162
163- def default (session ):
163+ @nox .session (python = UNIT_TEST_PYTHON_VERSIONS )
164+ @nox .parametrize (
165+ "protobuf_implementation" ,
166+ ["python" , "upb" , "cpp" ],
167+ )
168+ def unit (session , protobuf_implementation ):
164169 # Install all test dependencies, then install this package in-place.
165170
171+ if protobuf_implementation == "cpp" and session .python in ("3.11" , "3.12" ):
172+ session .skip ("cpp implementation is not supported in python 3.11+" )
173+
166174 constraints_path = str (
167175 CURRENT_DIRECTORY / "testing" / f"constraints-{ session .python } .txt"
168176 )
169177 install_unittest_dependencies (session , "-c" , constraints_path )
170178
179+ # TODO(https://github.com/googleapis/synthtool/issues/1976):
180+ # Remove the 'cpp' implementation once support for Protobuf 3.x is dropped.
181+ # The 'cpp' implementation requires Protobuf<4.
182+ if protobuf_implementation == "cpp" :
183+ session .install ("protobuf<4" )
184+
171185 # Run py.test against the unit tests.
172186 session .run (
173187 "py.test" ,
@@ -181,15 +195,12 @@ def default(session):
181195 "--cov-fail-under=0" ,
182196 os .path .join ("tests" , "unit" ),
183197 * session .posargs ,
198+ env = {
199+ "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION" : protobuf_implementation ,
200+ },
184201 )
185202
186203
187- @nox .session (python = UNIT_TEST_PYTHON_VERSIONS )
188- def unit (session ):
189- """Run the unit test suite."""
190- default (session )
191-
192-
193204def install_systemtest_dependencies (session , * constraints ):
194205 # Use pre-release gRPC for system tests.
195206 # Exclude version 1.52.0rc1 which has a known issue.
@@ -358,9 +369,16 @@ def docfx(session):
358369
359370
360371@nox .session (python = "3.12" )
361- def prerelease_deps (session ):
372+ @nox .parametrize (
373+ "protobuf_implementation" ,
374+ ["python" , "upb" , "cpp" ],
375+ )
376+ def prerelease_deps (session , protobuf_implementation ):
362377 """Run all tests with prerelease versions of dependencies installed."""
363378
379+ if protobuf_implementation == "cpp" and session .python in ("3.11" , "3.12" ):
380+ session .skip ("cpp implementation is not supported in python 3.11+" )
381+
364382 # Install all dependencies
365383 session .install ("-e" , ".[all, tests, tracing]" )
366384 unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES
@@ -397,9 +415,9 @@ def prerelease_deps(session):
397415 "protobuf" ,
398416 # dependency of grpc
399417 "six" ,
418+ "grpc-google-iam-v1" ,
400419 "googleapis-common-protos" ,
401- # Exclude version 1.52.0rc1 which has a known issue. See https://github.com/grpc/grpc/issues/32163
402- "grpcio!=1.52.0rc1" ,
420+ "grpcio" ,
403421 "grpcio-status" ,
404422 "google-api-core" ,
405423 "google-auth" ,
@@ -425,4 +443,10 @@ def prerelease_deps(session):
425443 session .run ("python" , "-c" , "import grpc; print(grpc.__version__)" )
426444 session .run ("python" , "-c" , "import google.auth; print(google.auth.__version__)" )
427445
428- session .run ("py.test" , "tests/unit" )
446+ session .run (
447+ "py.test" ,
448+ "tests/unit" ,
449+ env = {
450+ "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION" : protobuf_implementation ,
451+ },
452+ )
0 commit comments