
    	{                        S SK r S SKJr  S SKrS SKrS SKrS SKrS SKJ	r	  S SKJ
r
  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S	rS
rSrSrS/rSrSrSrSrS/rSrSrSrSrSrSSSSS.r SSSS.r!SS \\\\\S!.S"./00r" " S# S$\
RF                  5      r$S0S% jr% S1S& jr&S' r' " S( S)\(5      r) " S* S+\(5      r* " S, S-\(5      r+ " S. S/\(5      r,g)2    N)_helpers)credentials)
downscoped)
exceptions)	transport)DEFAULT_UNIVERSE_DOMAIN)
TokenStatezPresource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a')zcustomer-a-objectszLCondition to make permissions available for objects starting with customer-az://storage.googleapis.com/projects/_/buckets/example-bucketz!inRole:roles/storage.objectViewerzPresource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-b')zcustomer-b-objectszLCondition to make permissions available for objects starting with customer-bz8//storage.googleapis.com/projects/_/buckets/other-bucketz"inRole:roles/storage.objectCreatorQUOTA_PROJECT_IDz/urn:ietf:params:oauth:grant-type:token-exchangez-urn:ietf:params:oauth:token-type:access_tokenz#https://sts.googleapis.com/v1/tokenACCESS_TOKENBearer  )access_tokenissued_token_type
token_type
expires_ininvalid_grantzSubject token is invalid.z#https://tools.ietf.org/html/rfc6749)errorerror_description	error_uriaccessBoundaryaccessBoundaryRules
expressiontitledescriptionavailablePermissionsavailableResourceavailabilityConditionc                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )SourceCredentialsT   c                 P   > [         [        U ]  5         SU l        Xl        X l        g )Nr   )superr!   __init___counter_raise_error_expires_in)selfraise_errorr   	__class__s      Oplatform/gsutil/third_party/google-auth-library-python/tests/test_downscoped.pyr%   SourceCredentials.__init__U   s$    /1'%    c                 2   U R                   (       a  [        R                  " S5      e[        R                  " 5       nU =R
                  S-  sl        SR                  U R
                  5      U l        U[        R                  " U R                  S9-   U l        g )N5Failed to refresh access token in source credentials.   zACCESS_TOKEN_{}seconds)r'   r   RefreshErrorr   utcnowr&   formattokendatetime	timedeltar(   expiry)r)   requestnows      r,   refreshSourceCredentials.refresh[   sp    ))G  oo&--dmm<
H..t7G7GHHr.   )r&   r(   r'   r:   r7   )Fr   )__name__
__module____qualname____firstlineno__r%   r=   __static_attributes____classcell__)r+   s   @r,   r!   r!   T   s    &I Ir.   r!   c                 0    [         R                  " XU5      $ N)r   AvailabilityConditionr   s      r,   make_availability_conditionrH   f   s    ++J{KKr.   c                 0    [         R                  " XU5      $ rF   )r   AccessBoundaryRule)available_resourceavailable_permissionsavailability_conditions      r,   make_access_boundary_rulerN   j   s     ((3I r.   c                 .    [         R                  " U 5      $ rF   )r   CredentialAccessBoundary)ruless    r,   make_credential_access_boundaryrR   r   s    ..u55r.   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestAvailabilityConditionv   c                     [        [        [        [        5      nUR                  [        :X  d   eUR
                  [        :X  d   eUR                  [        :X  d   eg rF   )rH   
EXPRESSIONTITLEDESCRIPTIONr   r   r   r)   rM   s     r,   test_constructor*TestAvailabilityCondition.test_constructorw   sR    !<{"
 &00J>>>%++u444%11[@@@r.   c                     [        [        5      nUR                  [        :X  d   eUR                  b   eUR                  b   eg rF   )rH   rW   r   r   r   rZ   s     r,   %test_constructor_required_params_only?TestAvailabilityCondition.test_constructor_required_params_only   sE    !<Z!H%00J>>>%++333%11999r.   c                     [        [        [        [        5      n[        Ul        [        Ul        [        Ul	        UR
                  [        :X  d   eUR                  [        :X  d   eUR                  [        :X  d   eg rF   )
rH   rW   rX   rY   OTHER_EXPRESSIONr   OTHER_TITLEr   OTHER_DESCRIPTIONr   rZ   s     r,   test_setters&TestAvailabilityCondition.test_setters   so    !<{"
 -=)'2$->*%004DDDD%++{:::%115FFFFr.   c                     [         R                  " [        5       n[        [        /[
        [        5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)Nz(The provided expression is not a string.)pytestraises	TypeErrorrH   rW   rX   rY   matchr)   excinfos     r,   test_invalid_expression_type6TestAvailabilityCondition.test_invalid_expression_type   sD    ]]9%'e[I & }}GHHHH &%s   A
A%c                     [         R                  " [        5       n[        [        S[
        5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)NFz+The provided title is not a string or None.)rg   rh   ri   rH   rW   rY   rj   rk   s     r,   test_invalid_title_type1TestAvailabilityCondition.test_invalid_title_type   sB    ]]9%'
E;G & }}JKKKK &%   A
A c                     [         R                  " [        5       n[        [        [
        S5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)NFz1The provided description is not a string or None.)rg   rh   ri   rH   rW   rX   rj   rk   s     r,   test_invalid_description_type7TestAvailabilityCondition.test_invalid_description_type   sB    ]]9%'
E5A & }}PQQQQ &%rr   c                 Z    [        [        5      nUR                  5       S[        0:X  d   eg )Nr   )rH   rW   to_jsonrZ   s     r,   !test_to_json_required_params_only;TestAvailabilityCondition.test_to_json_required_params_only   s)    !<Z!H%--/L*3MMMMr.   c                     [        [        [        [        5      nUR	                  5       [        [        [        S.:X  d   eg )Nr   )rH   rW   rX   rY   rw   rZ   s     r,   test_to_json_'TestAvailabilityCondition.test_to_json_   s?    !<{"
 &--/$&4
 
 	
 
r.    N)r?   r@   rA   rB   r[   r^   rd   rm   rp   rt   rx   r{   rC   r}   r.   r,   rT   rT   v   s0    A:
GILRN
	
r.   rT   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)TestAccessBoundaryRule   c                     [        [        [        [        5      n[	        [
        [        U5      nUR                  [
        :X  d   eUR                  [        [        5      :X  d   eUR                  U:X  d   eg rF   )rH   rW   rX   rY   rN   AVAILABLE_RESOURCEAVAILABLE_PERMISSIONSrK   rL   tuplerM   r)   rM   access_boundary_rules      r,   r[   'TestAccessBoundaryRule.test_constructor   sz    !<{"
  9 57M 
 $66:LLLL#99U!>
 
 	
 
 $::>TTTTr.   c                     [        [        [        5      nUR                  [        :X  d   eUR                  [        [        5      :X  d   eUR                  b   eg rF   )rN   r   r   rK   rL   r   rM   r)   r   s     r,   r^   <TestAccessBoundaryRule.test_constructor_required_params_only   s`    8 5 
 $66:LLLL#99U!>
 
 	
 
 $::BBBr.   c                 X   [        [        [        [        5      n[        [        [
        [        5      n[        [        [        U5      n[        Ul        [        Ul        X#l        UR                  [        :X  d   eUR                  [        [        5      :X  d   eUR                  U:X  d   eg rF   )rH   rW   rX   rY   ra   rb   rc   rN   r   r   OTHER_AVAILABLE_RESOURCErK   OTHER_AVAILABLE_PERMISSIONSrL   rM   r   )r)   rM   other_availability_conditionr   s       r,   rd   #TestAccessBoundaryRule.test_setters   s    !<{"
 (Ck+<(
$  9 57M 
 3K/5P26R3#66:RRRR#99U'>
 
 	
 
 !77;WW	
Wr.   c                     [        [        [        [        5      n[        R
                  " [        5       n[        S [        U5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)Nz0The provided available_resource is not a string.)
rH   rW   rX   rY   rg   rh   ri   rN   r   rj   r)   rM   rl   s      r,   $test_invalid_available_resource_type;TestAccessBoundaryRule.test_invalid_available_resource_type   s[    !<{"
 ]]9%%+-C &
 }}OPPPP &%s   A''
A5c                     [        [        [        [        5      n[        R
                  " [        5       n[        [        / SQU5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)N)r   r1      z9Provided available_permissions are not a list of strings.)
rH   rW   rX   rY   rg   rh   ri   rN   r   rj   r   s      r,   'test_invalid_available_permissions_type>TestAccessBoundaryRule.test_invalid_available_permissions_type   sb    !<{"
 ]]9%%"I/E &
 }}G
 
 	
 
 &%s   A))
A7c                     [        [        [        [        5      n[        R
                  " [        5       n[        [        S/U5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)Nzroles/storage.objectViewerz6available_permissions must be prefixed with 'inRole:'.)
rH   rW   rX   rY   rg   rh   
ValueErrorrN   r   rj   r   s      r,   (test_invalid_available_permissions_value?TestAccessBoundaryRule.test_invalid_available_permissions_value   s^    !<{"
 ]]:&'%"-.& ' }}UVVVV '&s   A((
A6c                     [         R                  " [        5       n[        [        [
        SS05        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)NfoobarzdThe provided availability_condition is not a 'google.auth.downscoped.AvailabilityCondition' or None.)rg   rh   ri   rN   r   r   rj   rk   s     r,   (test_invalid_availability_condition_type?TestAccessBoundaryRule.test_invalid_availability_condition_type  sR    ]]9%%"$9E5> &
 }}r
 
 	
 
 &%s   A
A"c                     [        [        [        [        5      n[	        [
        [        U5      nUR                  5       [        [
        [        [        [        S.S.:X  d   eg )Nr   r   )rH   rW   rX   rY   rN   r   r   rw   r   s      r,   test_to_json#TestAccessBoundaryRule.test_to_json  s`    !<{"
  9 57M 
 $++-$9!3(*&2
 
 	
 
r.   c                 n    [        [        [        5      nUR                  5       [        [        S.:X  d   eg )N)r   r   )rN   r   r   rw   r   s     r,   rx   8TestAccessBoundaryRule.test_to_json_required_params_only'  s;    8 5 
 $++-$9!32
 
 	
 
r.   r}   N)r?   r@   rA   rB   r[   r^   rd   r   r   r   r   r   rx   rC   r}   r.   r,   r   r      s3    U	C
,	Q
W

$
r.   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestCredentialAccessBoundaryi2  c                     [        [        [        [        5      n[	        [
        [        U5      nU/n[        U5      nUR                  [        U5      :X  d   eg rF   )
rH   rW   rX   rY   rN   r   r   rR   rQ   r   r)   rM   r   rQ   credential_access_boundarys        r,   r[   -TestCredentialAccessBoundary.test_constructor3  sW    !<{"
  9 57M 
 &&%DU%K")//5<???r.   c                     [        [        [        [        5      n[	        [
        [        U5      nU/n[        [        [        [        5      n[	        [        [        U5      nU/n[        U5      nXgl        UR                  [        U5      :X  d   eg rF   )rH   rW   rX   rY   rN   r   r   ra   rb   rc   r   r   rR   rQ   r   )r)   rM   r   rQ   r   other_access_boundary_ruleother_rulesr   s           r,   rd   )TestCredentialAccessBoundary.test_setters?  s    !<{"
  9 57M 
 &&'Bk+<(
$ &?$'(&
"
 22%DU%K"+6()//53EEEEr.   c                 ,   [        [        [        [        5      n[	        [
        [        U5      nU/S-  n[        U5      n[	        [        [        5      nUR                  U5        [        UR                  5      S:X  d   eUR                  S   U:X  d   eg )N	   
   )rH   rW   rX   rY   rN   r   r   rR   r   r   add_rulelenrQ   )r)   rM   r   rQ   r   additional_access_boundary_rules         r,   test_add_rule*TestCredentialAccessBoundary.test_add_ruleU  s    !<{"
  9 57M 
 &&*%DU%K" +D$&A+
' 	#++,KL-334:::)//26UUUUr.   c                 r   [        [        [        [        5      n[	        [
        [        U5      nU/S-  n[        U5      n[        R                  " [        5       nUR                  U5        S S S 5        WR                  S5      (       d   e[        UR                  5      S:X  d   eg ! , (       d  f       NB= f)Nr   @Credential access boundary rules can have a maximum of 10 rules.)rH   rW   rX   rY   rN   r   r   rR   rg   rh   r   r   rj   r   rQ   r)   rM   r   rQ   r   rl   s         r,   test_add_rule_invalid_value8TestCredentialAccessBoundary.test_add_rule_invalid_valueh  s    !<{"
  9 57M 
 &&+%DU%K" ]]:&'&//0DE ' }}N
 
 	
 
 -334::: '&s   B((
B6c                    [        [        [        [        5      n[	        [
        [        U5      nU/n[        U5      n[        R                  " [        5       nUR                  S5        S S S 5        WR                  S5      (       d   e[        UR                  5      S:X  d   eUR                  S   U:X  d   eg ! , (       d  f       NW= f)NinvalidzWThe provided rule does not contain a valid 'google.auth.downscoped.AccessBoundaryRule'.r1   r   )rH   rW   rX   rY   rN   r   r   rR   rg   rh   ri   r   rj   r   rQ   r   s         r,   test_add_rule_invalid_type7TestCredentialAccessBoundary.test_add_rule_invalid_type{  s    !<{"
  9 57M 
 &&%DU%K" ]]9%&//	: & }}e
 
 	
 
 -334999)//26JJJJ &%s   B::
Cc                     [         R                  " [        5       n[        S/5        S S S 5        WR	                  S5      (       d   eg ! , (       d  f       N'= f)Nr   zZList of rules provided do not contain a valid 'google.auth.downscoped.AccessBoundaryRule'.)rg   rh   ri   rR   rj   rk   s     r,   test_invalid_rules_type4TestCredentialAccessBoundary.test_invalid_rules_type  sH    ]]9%+YK8 & }}h
 
 	
 
 &%s   A		
Ac                    [        [        [        [        5      n[	        [
        [        U5      nU/S-  n[        R                  " [        5       n[        U5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)N   r   )rH   rW   rX   rY   rN   r   r   rg   rh   r   rR   rj   )r)   rM   r   too_many_rulesrl   s        r,   test_invalid_rules_value5TestCredentialAccessBoundary.test_invalid_rules_value  s}    !<{"
  9 57M 
 //"4]]:&'+N; ' }}N
 
 	
 
 '&s   A<<
B
c           	          [        [        [        [        5      n[	        [
        [        U5      nU/n[        U5      nUR                  5       SS[        [
        [        [        [        S.S./00:X  d   eg )Nr   r   r   r   )	rH   rW   rX   rY   rN   r   r   rR   rw   r   s        r,   r   )TestCredentialAccessBoundary.test_to_json  s    !<{"
  9 57M 
 &&%DU%K")113%0E-?*4%*+62
(8
 
 	
 
r.   r}   N)r?   r@   rA   rB   r[   rd   r   r   r   r   r   r   rC   r}   r.   r,   r   r   2  s.    
@F,V&;&K(


r.   r   c                      \ rS rSr\\" 5       SS4S j5       r\\R                  4S j5       r	\\
4S j5       rS rS rS rS	 r\R"                  " S
\R$                  R&                  S9S 5       r\R"                  " S
\R$                  R&                  S9S 5       r\R"                  " S
\R$                  R&                  S9S 5       rS rS rS rS rS r\R"                  " S
5      S 5       rSrg)TestCredentialsi  Nc                     [        [        [        [        5      n[	        [
        [        U5      nU/n[        U5      n[        R                  " U UUU5      $ rF   )
rH   rW   rX   rY   rN   r   r   rR   r   Credentials)source_credentialsquota_project_iduniverse_domainrM   r   rQ   r   s          r,   make_credentials TestCredentials.make_credentials  s`     "={"
  9 57M 
 &&%DU%K"%%&	
 	
r.   c                     [         R                  " [        R                  SS9nXl        [
        R                  " U 5      R                  S5      Ul        [         R                  " [        R                  5      nX#l
        U$ )NT)instanceutf-8)mockcreate_autospecr   ResponsestatusjsondumpsencodedataRequestreturn_value)r   r   responser;   s       r,   make_mock_request!TestCredentials.make_mock_request  s[    ''	(:(:TJ 

4(//8&&y'8'89'r.   c                 P   U S   U:X  d   eU S   S:X  d   eU S   U:X  d   eU S   c   e[         R                  R                  U S   5      nU H-  u  pVUR                  S5      X%R                  S5         :X  a  M-   e   [	        U5      [	        UR                  5       5      :X  d   eg)zEAsserts the request was called with the expected parameters.
        urlmethodPOSTheadersbodyNr   )urllibparse	parse_qsldecoder   keys)request_kwargsr   request_datatoken_endpointbody_tupleskvs          r,   assert_request_kwargs%TestCredentials.assert_request_kwargs  s     e$666h'6111i(G333f%111ll,,^F-CD!FQ88G$XXg5F(GGGG ";3|'8'8':#;;;;r.   c                    U R                  5       nUR                  (       a   eUR                  (       a   eUR                  (       a   eUR                  (       a   eUR
                  (       a   eUR                  [        :X  d   eg rF   r   r7   validr:   expiredr   r   r   r)   r   s     r,   test_default_state"TestCredentials.test_default_state  sr    ++- $$$$$$$$%%%%&&&&////**.EEEEr.   c                    U R                  S S9nUR                  (       a   eUR                  (       a   eUR                  (       a   eUR                  (       a   eUR
                  (       a   eUR                  [        :X  d   eg )Nr   r   r   s     r,   +test_default_state_with_explicit_none_value;TestCredentials.test_default_state_with_explicit_none_value  sw    ++D+A $$$$$$$$%%%%&&&&////**.EEEEr.   c                    SnU R                  US9nUR                  (       a   eUR                  (       a   eUR                  (       a   eUR                  (       a   eUR
                  (       a   eUR                  U:X  d   eg )Nfoo.comr   )r   r7   r   r:   r   r   r   )r)   test_universe_domainr   s      r,   +test_create_with_customized_universe_domain;TestCredentials.test_create_with_customized_universe_domain  s|    (++<P+Q$$$$$$$$%%%%&&&&////**.BBBBr.   c                     U R                  5       nUR                  (       a   eUR                  " S5      nUR                  S:X  d   eg )Nzproject-foo)r   r   with_quota_project)r)   r   quota_project_credss      r,   test_with_quota_project'TestCredentials.test_with_quota_project  sD    ++-////)<<]K"33}DDDr.   zgoogle.auth._helpers.utcnow)r   c           	         Sn[         R                  5       nSUS'   [        R                  R                  [        R                  " US   S9-   nSS0n[
        S[        [        [        R                  R                  [        R                  " [        5      5      S.nU R                  [        R                   US	9n[#        5       nU R%                  XS
9n	[&        R(                  R+                  U5      n
[,        R.                  R1                  USUR2                  S9 nU	R2                  " U5        U R5                  UR6                  S   XVU
5        U	R8                  (       d   eU	R:                  U:X  d   eU	R<                  (       a   eU	R>                  US   :X  d   eURA                  U5        S S S 5        g ! , (       d  f       g = f)Nr  
  r   r2   Content-Type!application/x-www-form-urlencodedACCESS_TOKEN_1
grant_typesubject_tokensubject_token_typerequested_token_typeoptionsr   r   )r   r   r=   wrapsr1   r   )!SUCCESS_RESPONSEcopyr8   minr9   
GRANT_TYPESUBJECT_TOKEN_TYPEREQUESTED_TOKEN_TYPEr   r   quoter   r   CREDENTIAL_ACCESS_BOUNDARY_JSONr   http_clientOKr!   r   r   _STS_TOKEN_URL_PATTERNr6   r   patchobjectr=   r   	call_argsr   r:   r   r7   assert_called_with)r)   unused_utcnowr  r   expected_expiryr   r   r;   r   r   token_exchange_endpointwrapped_souce_cred_refreshs               r,   test_refresh_on_custom_universe/TestCredentials.test_refresh_on_custom_universe"  s   (#((*!%"++//(2D2D\*3
 
 "#FG$-"4$8||))$**5T*UV
 ((X(N.0++1 , 
 #-"C"C"J"J #
 ZZ	1C1K1K  
'(&&!!!$g=T $$$$%%888"****$$(@@@@&99'B
 
 
s   BF44
Gc           	      F   [         R                  5       nSUS'   [        R                  R                  [        R                  " US   S9-   nSS0n[
        S[        [        [        R                  R                  [        R                  " [        5      5      S.nU R                  [        R                   US9n[#        5       nU R%                  US	9n[&        R(                  R+                  US
UR,                  S9 n	UR,                  " U5        U R/                  UR0                  S   XE5        UR2                  (       d   eUR4                  U:X  d   eUR6                  (       a   eUR8                  US   :X  d   eU	R;                  U5        S S S 5        g ! , (       d  f       g = f)Nr  r   r2   r  r  r  r  r  r   r=   r  r1   r   )r  r  r8   r  r9   r  r  r  r   r   r   r   r   r!  r   r"  r#  r!   r   r   r%  r&  r=   r   r'  r   r:   r   r7   r(  )
r)   r)  r   r*  r   r   r;   r   r   r,  s
             r,   test_refreshTestCredentials.test_refreshM  su   #((*!%"++//(2D2D\*3
 
 "#FG$-"4$8||))$**5T*UV
 ((X(N.0++?Q+R ZZ	1C1K1K  
'(&&w'8'8';WS$$$$%%888"****$$(@@@@&99'B
 
 
s   9BF
F c           	      >   [         R                  5       nUS	 Sn[        US9n[        R                  R                  [        R
                  " US9-   nSS0n[        S[        [        [        R                  R                  [        R                  " [        5      5      S.nU R                  [         R"                  US	9nU R%                  US
9n	[&        R(                  R+                  USUR,                  S9 n
U	R,                  " U5        U R/                  UR0                  S   Xg5        U	R2                  (       d   eU	R4                  U:X  d   eU	R6                  (       a   eU	R8                  US   :X  d   eU
R;                  U5        S S S 5        g ! , (       d  f       g = f)Nr   i  )r   r2   r  r  r  r  r  r0  r=   r  r1   r   )r  r  r!   r8   r  r9   r  r  r  r   r   r   r   r   r!  r   r"  r#  r   r   r%  r&  r=   r   r'  r   r:   r   r7   r(  )r)   r)  r   expected_expires_inr   r*  r   r   r;   r   r,  s              r,   (test_refresh_without_response_expires_in8TestCredentials.test_refresh_without_response_expires_inp  s{   #((* \"" /:MN"++//(2D2D'3
 
 "#FG$-"4$8||))$**5T*UV
 ((X(N++?Q+R ZZ	1C1K1K  
'(&&w'8'8';WS$$$$%%888"****$$(@@@@&99'B
 
 
s   5BF
Fc                 |   U R                  [        R                  [        S9nU R	                  5       n[
        R                  " [        R                  5       nUR                  " U5        S S S 5        WR                  S5      (       d   eUR                  (       a   eUR                  b   eg ! , (       d  f       NI= f)Nr  zYError code invalid_grant: Subject token is invalid. - https://tools.ietf.org/html/rfc6749)r   r"  BAD_REQUESTERROR_RESPONSEr   rg   rh   r   
OAuthErrorr=   rj   r   r7   )r)   r;   r   rl   s       r,   !test_refresh_token_exchange_error1TestCredentials.test_refresh_token_exchange_error  s    ((** ) 
 ++-]]:001W( 2 }}h
 
 	
 
 &&&&  ((( 21s   B--
B;c                 t   U R                  [        SS9S9n[        R                  " [        R
                  5       nUR                  " [        R                  R                  5        S S S 5        WR                  S5      (       d   eUR                  (       a   eUR                  b   eg ! , (       d  f       NI= f)NT)r*   r0  r0   )r   r!   rg   rh   r   r4   r=   r   sentinelr;   rj   r   r7   )r)   r   rl   s      r,   -test_refresh_source_credentials_refresh_error=TestCredentials.test_refresh_source_credentials_refresh_error  s     ++0TB , 
 ]]:223w 5 56 4 }}UVVVV&&&&  ((( 43s   +B))
B7c                     0 nU R                  [        R                  [        S9nU R	                  5       nUR
                  " U5        UR                  " U5        USSR                  [        S   5      0:X  d   eg )Nr  authorization	Bearer {}r   )r   r"  r#  r  r   r=   applyr6   r)   r   r;   r   s       r,   #test_apply_without_quota_project_id3TestCredentials.test_apply_without_quota_project_id  sx    ((EU(V++-G$'"[//0@0PQ
 
 	
 
r.   c                 
   SS0nU R                  [        R                  [        S9nU R	                  [
        S9nUR                  " U5        UR                  " U5        USSR                  [        S   5      [
        S.:X  d   eg )Notherheader-valuer  )r   rC  r   )rI  rB  zx-goog-user-project)	r   r"  r#  r  r   r
   r=   rD  r6   rE  s       r,    test_apply_with_quota_project_id0TestCredentials.test_apply_with_quota_project_id  s    N+((EU(V++=M+NG$'"#(//0@0PQ#3
 
 	
 
r.   c                 x   SS0nU R                  [        R                  [        S9nU R	                  5       nUR
                  " USSU5        USSR                  [        S   5      S.:X  d   eUR
                  " [        R                  R                  SSU5        USSR                  [        S   5      S.:X  d   eg )	NrI  rJ  r  r   https://example.com/apirC  r   )rI  rB  )
r   r"  r#  r  r   before_requestr6   r   r>  r;   rE  s       r,   test_before_request#TestCredentials.test_before_request  s    N+((EU(V++- 	""7F4MwW#(//0@0PQ
 
 	
 
 	""MM!!6+Dg	
 #(//0@0PQ
 
 	
 
r.   c                 H   0 nU R                  [        R                  [        S9nU R	                  5       nSUl        [        R                  R                  Ul        [        R                  R                  [        R                  -   [        R                  " SS9-   Ul        UR                  (       d   eUR                  (       a   eUR                  [         R"                  :X  d   eUR$                  " USSU5        USS0:X  d   e[        R                  R                  [        R                  " SS9-   Ul        UR                  (       a   eUR                  (       d   eUR                  [         R&                  :X  d   eUR$                  " USSU5        UR                  [         R"                  :X  d   eUSS	R)                  [        S
   5      0:X  d   e[        R                  R                  [        R                  " SS9-   Ul        UR                  (       a   eUR                  (       d   eUR                  [         R*                  :X  d   eUR$                  " USSU5        UR                  [         R"                  :X  d   eUSS	R)                  [        S
   5      0:X  d   eg )Nr  r7   r1   r2   r   rN  rB  zBearer tokenrC  r   ip  )r   r"  r#  r  r   r7   r8   r  r   r   REFRESH_THRESHOLDr9   r:   r   r   token_stater	   FRESHrO  STALEr6   INVALID)r)   r5   r   r;   r   s        r,   test_before_request_expired+TestCredentials.test_before_request_expired  sc   ((EU(V++-#&//33 !!(()  +, 	     &&&&&&**:*::::""7F4MwW ?N;;;; '//33h6H6HQR6SS$$$$""""&&**:*::::""7F4MwW&&**:*:::: [//0@0PQ
 
 	
 
 '//33h6H6HQU6VV$$$$""""&&**<*<<<<""7F4MwW&&**:*:::: [//0@0PQ
 
 	
 
r.   r}   )r?   r@   rA   rB   staticmethodr!   r   r"  r#  r   TOKEN_EXCHANGE_ENDPOINTr   r   r   r  r
  r   r%  r8   r  r-  r1  r5  r;  r?  rF  rK  rP  rX  rC   r}   r.   r,   r   r     s1   ,.
 
* '2~~   >U< <FFCE 
ZZ-H<M<M<Q<QR(C S(CT 
ZZ-H<M<M<Q<QR C S CD 
ZZ-H<M<M<Q<QR&C S&CP))



. 
ZZ-.2
 /2
r.   r   )NNrF   )-r8   http.clientclientr"  r   r   r   rg   google.authr   r   r   r   r   google.auth.credentialsr   r	   rW   rX   rY   r   r   ra   rb   rc   r   r   r
   r  r  r[  r  r  r9  r!  r   r!   rH   rN   rR   r&  rT   r   r   r   r}   r.   r,   <module>r`     s`    !       # " " ! ; . W  	R  R <=  W  #R  V CD % >
F ? D "H	  46 (=%7","#.*
 
# "I// I$L
 GK6=
 =
@y
V y
xL
6 L
^Y
f Y
r.   