@@ -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