@@ -334,6 +334,82 @@ def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code):
334334 client ._add_cred_info_for_auth_errors (error )
335335 assert error .details == []
336336
337+ def test__setup_request_id ():
338+ class MockRequest :
339+ def __init__ (self , ** kwargs ):
340+ for k , v in kwargs .items ():
341+ setattr (self , k , v )
342+ def __contains__ (self , key ):
343+ return hasattr (self , key )
344+
345+ class MockProtoRequest :
346+ def __init__ (self , ** kwargs ):
347+ for k , v in kwargs .items ():
348+ setattr (self , k , v )
349+ def HasField (self , key ):
350+ return hasattr (self , key )
351+
352+ # Test with proto3 optional field not in request
353+ request = MockRequest ()
354+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
355+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request .request_id )
356+
357+ # Test with proto3 optional field already in request
358+ request = MockRequest (request_id = "already_set" )
359+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
360+ assert request .request_id == "already_set"
361+
362+ # Test with non-proto3 optional field empty
363+ request = MockRequest (request_id = "" )
364+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , False )
365+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request .request_id )
366+
367+ # Test with non-proto3 optional field already set
368+ request = MockRequest (request_id = "already_set" )
369+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , False )
370+ assert request .request_id == "already_set"
371+
372+ # Test with proto3 optional field not in request (MockProtoRequest)
373+ request = MockProtoRequest ()
374+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
375+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request .request_id )
376+
377+ # Test with proto3 optional field already in request (MockProtoRequest)
378+ request = MockProtoRequest (request_id = "already_set" )
379+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
380+ assert request .request_id == "already_set"
381+
382+ # Test with ValueError
383+ class MockValueErrorRequest :
384+ def HasField (self , key ):
385+ raise ValueError ("Mismatched field" )
386+ def __contains__ (self , key ):
387+ return hasattr (self , key )
388+
389+ request = MockValueErrorRequest ()
390+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
391+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request .request_id )
392+
393+ # Test with dict and proto3 optional field not in request
394+ request = {}
395+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
396+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request ["request_id" ])
397+
398+ # Test with dict and proto3 optional field already in request
399+ request = {"request_id" : "already_set" }
400+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , True )
401+ assert request ["request_id" ] == "already_set"
402+
403+ # Test with dict and non-proto3 optional field empty
404+ request = {"request_id" : "" }
405+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , False )
406+ assert re .match (r"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" , request ["request_id" ])
407+
408+ # Test with dict and non-proto3 optional field already set
409+ request = {"request_id" : "already_set" }
410+ StorageBatchOperationsClient ._setup_request_id (request , "request_id" , False )
411+ assert request ["request_id" ] == "already_set"
412+
337413@pytest .mark .parametrize ("client_class,transport_name" , [
338414 (StorageBatchOperationsClient , "grpc" ),
339415 (StorageBatchOperationsAsyncClient , "grpc_asyncio" ),
0 commit comments