
    /              	          d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZej.                  j1                  ej.                  j3                  e      d      Zej.                  j1                  ed      Z ee      5 Z e j>                  e      Z ddd       ej.                  j1                  ed      Z!ej.                  j1                  ed      Z"ej.                  j1                  ed      Z#ej.                  j1                  ed      Z$ej.                  j1                  ed      Z% ee#      5 Z e j>                  e      Z&ddd       ej.                  j1                  ed      Z'dZ(dZ)dZ*dZ+dZ,dZ-dZ.d e)d!e(d"e'id#Z/d e)d!e(d$d%d%iid#Z0d e)d&e(d'e,e-e.d(d#Z1d)Z2d*d+jg                  e2      z   Z4d e)d!e(d"e'ie4d,Z5d e)d&e(d'e,e-e.d(e4d,Z6d e*d-e(d"e'ie+d.Z7d e*d-e(d"e'ie4e+d/Z8ej.                  j1                  ed0      Z9ej.                  j1                  ed1      Z:ej.                  j1                  ed2      Z;ej.                  j1                  ed3      Z<ej.                  j1                  ed4      Z=ej.                  j1                  ed5      Z> ej~                  e
j                  6      ZAeAeAj                  _C        dd7ZD ej                  d8eAej                  j                  fd9:      ZHej                  j                  ej                  d;eDd9<      ZKd= ZLd> ZMd? ZNd@ ZOdA ZPdB ZQdC ZRdD ZSdE ZTdF ZUdG ZVdH ZWdI ZXdJ ZYdK ZZdL Z[dM Z\dN Z]dO Z^dP Z_dQ Z`dR ZadS ZbeKdT        ZceKdU        ZdeKdV        ZeeKdW        ZfeKdX        ZgeKdY        ZheKdZ        ZieKd[        Zjd\ ZkeKd]        Zlej                  j                  ej                  i d9^      d_        Zod` Zpda Zqdb Zrej                  j                  dcdddg      eHde               ZueHdf        Zvej                  j                  dcdddg       ej                  dgd9h       ej                  did9h      dj                      Zwej                  j                  dcdddg      eH ej                  dgd9h      dk                      Zx ej                  dgd9h      dl        Zy ej                  dmej                  j                  d9:       ej                  dnd9d9:      eHdo                      Zz ej                  dmdd9:       ej                  dnd9p      eHdq                      Z{dr Z|ds Z} G dt dueI      Z~ej                  dv        Zej                  j                  ej                        dw        Zej                  j                  ej                        dx        Zej                  j                  ej                        dy        Zdz Zej                  j                  ej                        d{        Zej                  j                  ej                        ej                  j                  ed|d}      d~               Z ej                  dd9d9:       ej                  ddd9:      d               Z ej                  ddd9:      d        Z ej                  dd9d9:       ej                  d ej                         d9<      d               Zd Z ej                  ddd9:      d        Z ej                  deAej                  j                  fd9:      d        Z ej                  d8eAej                  j                  fd9:      d        Z ej                  dnd9d9:       ej                  dgdd9:       ej                  d8eAej                  j                  fd9:      d                      Z ej                  deAej                  j                  fd9:      d        Z ej                  deAej                  j                  fd9:      d        Z ej                  dd9h       ej                  deAdfd9:       ej                  dieAdfd9:       ej                  deAdfd9:       ej                  deAdfd9:      d                                    Z ej                  ddd9:       ej                  didd9:       ej                  ddd9:       ej                  ddd9:      d                             Z ej                  deAej                  j                  fd9:       ej                  deAd9:      d               Z ej                  deAej                  j                  fd9:      d        Z ej                  deAej                  j                  fd9:      d        ZeKd        ZeKd        ZeKej                  j                  ej                        d               ZeKej                  j                  ej                        d               ZeKd        ZeKd        ZeKd        ZeKd        ZeKd        Zd Z ej                  dgd9h      d        Z ej                  dgd9h      d        Z ej                  dgd9h      d        Z ej                  dgd9h      d        Z ej                  dgd9h      d        Z ej                  dgd9h      d        ZeKd        Z ej                  dgd9h      d        Zej                  j                  ej                         ej                  dgd9h      d               Z ej                  dd9d9:       ej                  ddd9:      ej                  j                  ej                        d                      Zy# 1 sw Y   xY w# 1 sw Y   
xxY w)    N)_default)api_key)
app_engine)aws)compute_engine)credentials)environment_vars)
exceptions)external_account) external_account_authorized_user)identity_pool)impersonated_credentials)	pluggable)gdch_credentials)service_accountdatazauthorized_user.jsonzauthorized_user_cloud_sdk.jsonz4authorized_user_cloud_sdk_with_quota_project_id.jsonzservice_account.jsonzclient_secrets.jsonzgdch_service_account.jsonzexternal_subject_token.txtz#https://sts.googleapis.com/v1/tokenzi//iam.googleapis.com/projects/123456/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_IDzR//iam.googleapis.com/locations/global/workforcePools/POOL_ID/providers/PROVIDER_ID"WORKFORCE_POOL_USER_PROJECT_NUMBERzChttp://169.254.169.254/latest/meta-data/placement/availability-zonez@http://169.254.169.254/latest/meta-data/iam/security-credentialszNhttps://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15r   z$urn:ietf:params:oauth:token-type:jwtfile)typeaudiencesubject_token_type	token_urlcredential_source
executablecommandz+urn:ietf:params:aws:token-type:aws4_requestaws1)environment_id
region_urlurlregional_cred_verification_urlz1service-1234@service-name.iam.gserviceaccount.comz<https://us-east1-iamcredentials.googleapis.com/v1/projects/-z'/serviceAccounts/{}:generateAccessToken)r   r   r   r   r   !service_account_impersonation_urlz)urn:ietf:params:oauth:token-type:id_token)r   r   r   r   r   workforce_pool_user_project)r   r   r   r   r   r!   r"   z8impersonated_service_account_authorized_user_source.jsonz4impersonated_service_account_with_quota_project.jsonz8impersonated_service_account_service_account_source.jsonzIimpersonated_service_account_external_account_authorized_user_source.jsonz%external_account_authorized_user.jsonz-external_account_authorized_user_non_gdu.json)specc                 P    | j                   sy t        j                  j                  S N)scopesmocksentinel
project_id)selfrequests     Mplatform/gsutil/third_party/google-auth-library-python/tests/test__default.pyget_project_id_side_effectr-      s    ;;==###    z/google.auth._default.load_credentials_from_fileT)return_valueautospecget_project_id)side_effectr0   c                      t        j                  t        j                        5 } t	        j
                  d       d d d         j                  d      sJ y # 1 sw Y   xY w)N z	not found)pytestraisesr
   DefaultCredentialsErrorr   load_credentials_from_filematchexcinfos    r,   'test_load_credentials_from_missing_filer<      sF    	z99	:g++B/ 
; ==&&& 
;	:s   AAc                  D   t        j                  t        j                        5 } t	        j
                  d       d d d         j                  d      sJ t        j                  t        j                        5 } t	        j
                  d        d d d        | j                  d      sJ t        j                  t        j                        5 } t	        j
                  d       d d d        | j                  d      sJ y # 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   5xY w)Nr4   zdict type was expected   )r5   r6   r
   r7   r   load_credentials_from_dictr9   r:   s    r,   /test_load_credentials_from_dict_non_dict_objectr@      s    	z99	:g++B/ 
;==2333	z99	:g++D1 
;==2333	z99	:g++A. 
;==2333 
;	: 
;	: 
;	:s#   C>8D
D>D
DDc                      t        j                  t              \  } }t        | t        j
                  j                  j                        sJ |J y r%   )r   r?   AUTHORIZED_USER_FILE_DATA
isinstancegoogleoauth2r   Credentialsr   r)   s     r,   /test_load_credentials_from_dict_authorized_userrH      sH    &AA!K k6==#<#<#H#HIIIr.   c                    | j                  d      }|j                  d       t        j                  t        j
                        5 }t        j                  t        |             d d d        j                  d      sJ y # 1 sw Y   xY w)Ninvalid.json{znot a valid json file)
joinwriter5   r6   r
   r7   r   r8   strr9   tmpdirjsonfiler;   s      r,   ,test_load_credentials_from_file_invalid_jsonrR      se    {{>*HNN3	z99	:g++CM: 
; ==1222 
;	:s   BB
c                 D   | j                  d      }|j                  t        j                  ddi             t	        j
                  t        j                        5 }t        j                  t        |             d d d        j                  d      sJ y # 1 sw Y   xY w)NrJ   r   znot-a-real-typedoes not have a valid typerL   rM   jsondumpsr5   r6   r
   r7   r   r8   rN   r9   rO   s      r,   ,test_load_credentials_from_file_invalid_typerX      st    {{>*HNN4::v'89:;	z99	:g++CM: 
; ==6777 
;	:s   BBc                      t        j                  t              \  } }t        | t        j
                  j                  j                        sJ |J y r%   )r   r8   AUTHORIZED_USER_FILErC   rD   rE   r   rF   rG   s     r,   /test_load_credentials_from_file_authorized_userr[      sD    &AABVWKk6==#<#<#H#HIIIr.   c                     t        j                  t        j                        5 }t	        j
                  t               d d d        j                  d      sJ |j                  d      sJ y # 1 sw Y   0xY w)NrT   zType is None)r5   r6   r
   r7   r   r8   CLIENT_SECRETS_FILEr9   )rP   r;   s     r,   'test_load_credentials_from_file_no_typer^      s\     
z99	:g++,?@ 
; ==6777==)))	 
;	:s   A--A6c                 j   | j                  d      }|j                  t        j                  ddi             t	        j
                  t        j                        5 }t        j                  t        |             d d d        j                  d      sJ |j                  d      sJ y # 1 sw Y   0xY w)Nzauthorized_user_bad.jsonr   authorized_userzFailed to load authorized usermissing fieldsrU   rP   filenamer;   s      r,   :test_load_credentials_from_file_authorized_user_bad_formatrd         {{56HNN4::v'89:;	z99	:g++CM: 
; ==:;;;==*+++	 
;	:   B))B2c                     t        j                  t        d      5  t        j                  t
              \  } }d d d        t         t        j                  j                  j                        sJ J t        j                  t              \  } }t        | t        j                  j                  j                        sJ |J y # 1 sw Y   xY w)N	Cloud SDKr9   )r5   warnsUserWarningr   r8   AUTHORIZED_USER_CLOUD_SDK_FILErC   rD   rE   r   rF   4AUTHORIZED_USER_CLOUD_SDK_WITH_QUOTA_PROJECT_ID_FILErG   s     r,   9test_load_credentials_from_file_authorized_user_cloud_sdkrn     s    	k	5"*"E"E*#
Z 
6 k6==#<#<#H#HIII 'AA<K k6==#<#<#H#HIII 
6	5s   CCc                  .   t        j                  t        d      5  t        j                  t
        dg      \  } }d d d        t         t        j                  j                  j                        sJ J | j                  dgk(  sJ y # 1 sw Y   PxY w)Nrh   ri   %https://www.google.com/calendar/feedsr&   )r5   rj   rk   r   r8   rl   rC   rD   rE   r   rF   r&   rG   s     r,   Etest_load_credentials_from_file_authorized_user_cloud_sdk_with_scopesrr     s    	k	5"*"E"E*;<#
Z 
6
 k6==#<#<#H#HIII"I!JJJJ 
6	5s    BBc                      t        j                  t        d      \  } }t        | t        j
                  j                  j                        sJ |J | j                  dk(  sJ y Nproject-fooquota_project_id)	r   r8   rl   rC   rD   rE   r   rF   rw   rG   s     r,   Ltest_load_credentials_from_file_authorized_user_cloud_sdk_with_quota_projectrx   (  s^    &AA&K k6==#<#<#H#HIII''=888r.   c                      t        j                  t              \  } }t        | t        j
                        sJ |t        d   k(  sJ y )Nr)   )r   r8   SERVICE_ACCOUNT_FILErC   r   rF   SERVICE_ACCOUNT_FILE_DATArG   s     r,   /test_load_credentials_from_file_service_accountr|   2  sB    &AABVWKk?#>#>???2<@@@@r.   c                      t        j                  t        dg      \  } }t        | t        j
                        sJ |t        d   k(  sJ | j                  dgk(  sJ y )Nrp   rq   r)   )r   r8   rz   rC   r   rF   r{   r&   rG   s     r,   ;test_load_credentials_from_file_service_account_with_scopesr~   8  sd    &AA&M%NK k?#>#>???2<@@@@"I!JJJJr.   c                      t        j                  t        d      \  } }t        | t        j
                        sJ |t        d   k(  sJ | j                  dk(  sJ y )Nru   rv   r)   )r   r8   rz   rC   r   rF   r{   rw   rG   s     r,   Btest_load_credentials_from_file_service_account_with_quota_projectr   A  s\    &AA}K k?#>#>???2<@@@@''=888r.   c                 j   | j                  d      }|j                  t        j                  ddi             t	        j
                  t        j                        5 }t        j                  t        |             d d d        j                  d      sJ |j                  d      sJ y # 1 sw Y   0xY w)Nzserivce_account_bad.jsonr   r   zFailed to load service accountra   rU   rb   s      r,   :test_load_credentials_from_file_service_account_bad_formatr   J  re   rf   c                  n   t        j                  t              \  } }t        | t        j
                        sJ t        | j                  t        j                  j                  j
                        sJ | j                  dk(  sJ | j                  dgk(  sJ | j                  rJ | j                  rJ |J y Nz"service-account-target@example.comz$service-account-delegate@example.com)r   r8   8IMPERSONATED_SERVICE_ACCOUNT_AUTHORIZED_USER_SOURCE_FILErC   r   rF   _source_credentialsrD   rE   r   service_account_email
_delegates_quota_project_id_target_scopesrG   s     r,   Htest_load_credentials_from_file_impersonated_with_authorized_user_sourcer   U  s    &AA@K k#;#G#GHHH'')B)B)N)N   ,,0TTTT!!&L%MMMM,,,,))))r.   c                      t        j                  t              \  } }t        | t        j
                        sJ | j                  dk(  sJ y )Nquota_project)r   r8   4IMPERSONATED_SERVICE_ACCOUNT_WITH_QUOTA_PROJECT_FILErC   r   rF   r   r   _s     r,   ?test_load_credentials_from_file_impersonated_with_quota_projectr   d  sF    88<NK k#;#G#GHHH((O;;;r.   c                      t        j                  t              \  } }t        | t        j
                        sJ t        | j                  t        j
                        sJ | j                  rJ y r%   )	r   r8   8IMPERSONATED_SERVICE_ACCOUNT_SERVICE_ACCOUNT_SOURCE_FILErC   r   rF   r   r   r   r   s     r,   Htest_load_credentials_from_file_impersonated_with_service_account_sourcer   l  s`    88@NK k#;#G#GHHHk557R7RSSS,,,,,r.   c                      t        j                  t              \  } }t        | t        j
                        sJ t        | j                  t        j
                        sJ | j                  rJ y r%   )	r   r8   IIMPERSONATED_SERVICE_ACCOUNT_EXTERNAL_ACCOUNT_AUTHORIZED_USER_SOURCE_FILErC   r   rF   r   r   r   r   s     r,   Ytest_load_credentials_from_file_impersonated_with_external_account_authorized_user_sourcer   u  sj    88QNK k#;#G#GHHH'')I)U)U   ,,,,,r.   c                  b    t        j                  t        d      \  } }| j                  dk(  sJ y )Nnew_quota_projectrv   )r   r8   r   r   r   s     r,   Btest_load_credentials_from_file_impersonated_passing_quota_projectr     s3    88@,NK ((,????r.   c                  j    t        j                  t        ddg      \  } }| j                  ddgk(  sJ y Nscope1scope2rq   )r   r8   r   r   r   s     r,   ;test_load_credentials_from_file_impersonated_passing_scopesr     s<    88@(#NK %%(H)====r.   c                    t        t              5 }t        j                  |      }d d d        dd<   | j	                  d      }|j                  t        j                  |             t        j                  t        j                        5 }t        j                  t        |             d d d        j                  d      sJ y # 1 sw Y   xY w# 1 sw Y   )xY w)Nsomething_wrongr!   rJ   zCannot extract target principalopenr   rV   loadrL   rM   rW   r5   r6   r
   r7   r   r8   rN   r9   rP   fhimpersonated_credentials_inforQ   r;   s        r,   Ctest_load_credentials_from_file_impersonated_wrong_target_principalr     s    	F	G2(,		"% 
H 	 "+ {{>*HNN4::;<=	z99	:g++CM: 
; ==;<<< 
H	G 
;	:s   CCCCc                    t        t              5 }t        j                  |      }d d d        dd   d<   | j	                  d      }|j                  t        j                  |             t        j                  t        j                        5 }t        j                  t        |             d d d        j                  d      sJ y # 1 sw Y   xY w# 1 sw Y   )xY w)Nr   source_credentialsr   rJ   z;source credential of type external_account is not supportedr   r   s        r,   >test_load_credentials_from_file_impersonated_wrong_source_typer     s    	F	G2(,		"% 
HBT!"67?{{>*HNN4::;<=	z99	:g++CM: 
; ==WXXX 
H	G 
;	:s   C	C	CCc                    |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |J | j                  sJ y Nconfig.json)rL   rM   rV   rW   IDENTITY_POOL_DATAr   r8   rN   rC   r   rF   calledr1   rP   config_filer   r)   s        r,   >test_load_credentials_from_file_external_account_identity_poolr     su     ++m,Kdjj!345&AA#kBRSKk=#<#<===    r.   c                    |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |J | j                  sJ y r   )rL   rM   rV   rW   AWS_DATAr   r8   rN   rC   r   rF   r   r   s        r,   4test_load_credentials_from_file_external_account_awsr     sp    ++m,Kdjj*+&AA#kBRSKk3??333    r.   c                 L   |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |j                  rJ |j                  rJ |J | j                  sJ y r   )rL   rM   rV   rW   IMPERSONATED_IDENTITY_POOL_DATAr   r8   rN   rC   r   rF   is_useris_workforce_poolr   r   s        r,   Ktest_load_credentials_from_file_external_account_identity_pool_impersonatedr     s     ++m,Kdjj!@AB&AA#kBRSKk=#<#<==="""",,,,    r.   c                 L   |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |j                  rJ |j                  rJ |J | j                  sJ y r   )rL   rM   rV   rW   IMPERSONATED_AWS_DATAr   r8   rN   rC   r   rF   r   r   r   r   s        r,   Atest_load_credentials_from_file_external_account_aws_impersonatedr     s     ++m,Kdjj!678&AA#kBRSKk3??333"""",,,,    r.   c                 L   |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |j                  sJ |j                  sJ |J | j                  sJ y r   )rL   rM   rV   rW   IDENTITY_POOL_WORKFORCE_DATAr   r8   rN   rC   r   rF   r   r   r   r   s        r,   :test_load_credentials_from_file_external_account_workforcer     s    ++m,Kdjj!=>?&AA#kBRSKk=#<#<===((((    r.   c                 L   |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |j                  rJ |j                  sJ |J | j                  sJ y r   )rL   rM   rV   rW   )IMPERSONATED_IDENTITY_POOL_WORKFORCE_DATAr   r8   rN   rC   r   rF   r   r   r   r   s        r,   Gtest_load_credentials_from_file_external_account_workforce_impersonatedr     s     ++m,Kdjj!JKL&AA#kBRSKk=#<#<===""""((((    r.   c                 ~   |j                  d      }|j                  t        j                  t                     t        j                  t        |      dgdg      \  }}t        |t        j                        sJ |t        j                  j                  u sJ |j                  dgk(  sJ |j                  dgk(  sJ y )Nr   rp   .https://www.googleapis.com/auth/cloud-platformr&   default_scopes)rL   rM   rV   rW   r   r   r8   rN   rC   r   rF   r'   r(   r)   r&   r   r   s        r,   Mtest_load_credentials_from_file_external_account_with_user_and_default_scopesr     s     ++m,Kdjj!345&AAK78HIK k=#<#<===11111"I!JJJJ%%8*   r.   c                    |j                  d      }|j                  t        j                  t                     t        j                  t        |      d      \  }}t        |t        j                        sJ |J |j                  dk(  sJ y )Nr   ru   rv   )rL   rM   rV   rW   r   r   r8   rN   rC   r   rF   rw   r   s        r,   Ctest_load_credentials_from_file_external_account_with_quota_projectr     s     ++m,Kdjj!345&AAK=K k=#<#<===''=888r.   c                 t   | j                  d      }|j                  t        j                  ddi             t	        j
                  t        j                        5 }t        j                  t        |             d d d        j                  dj                  t        |                  sJ y # 1 sw Y   5xY wNzexternal_account_bad.jsonr   r   z3Failed to load external account credentials from {}rL   rM   rV   rW   r5   r6   r
   r7   r   r8   rN   r9   formatrb   s      r,   ;test_load_credentials_from_file_external_account_bad_formatr   +  s    {{67HNN4::v'9:;<	z99	:g++CM: 
; ===DDS]S   
;	:   B..B7c                    |j                  d      }|j                  t        j                  t                     t        j                  t        |      t        j                  j                  dg      \  }}t        |t        j                        sJ |t        j                  j                  u sJ | j                  |t        j                  j                         y Nr   r   )r+   r&   r+   )rL   rM   rV   rW   r   r   r8   rN   r'   r(   r+   rC   r   rF   r)   assert_called_withr   s        r,   Atest_load_credentials_from_file_external_account_explicit_requestr   7  s     ++m,Kdjj!345&AAK%%@AK k=#<#<===11111%%k4==;P;P%Qr.   )clearc                  6    t        j                         dk(  sJ y )NNN)r   !_get_explicit_environ_credentials r.   r,   -test__get_explicit_environ_credentials_no_envr   I  s    557<GGGr.   c                      t        j                  t        t        j                  j
                        \  } }t        | t        j                        sJ |J y Nr   )	r   r8   %EXTERNAL_ACCOUNT_AUTHORIZED_USER_FILEr'   r(   r+   rC   r   rF   rG   s     r,   @test_load_credentials_from_file_external_account_authorized_userr   N  sK    &AA-t}}7L7LK k#C#O#OPPPr.   c                      t        j                  t        t        j                  j
                        \  } }t        | t        j                        sJ | j                  dk(  sJ y )Nr   fake_universe_domain)
r   r8   -EXTERNAL_ACCOUNT_AUTHORIZED_USER_NON_GDU_FILEr'   r(   r+   rC   r   rF   universe_domainr   s     r,   Htest_load_credentials_from_file_external_account_authorized_user_non_gdur   W  sS    885t}}?T?TNK k#C#O#OPPP&&*@@@@r.   c                 t   | j                  d      }|j                  t        j                  ddi             t	        j
                  t        j                        5 }t        j                  t        |             d d d        j                  dj                  t        |                  sJ y # 1 sw Y   5xY w)Nz)external_account_authorized_user_bad.jsonr   r   zCFailed to load external account authorized user credentials from {}r   rb   s      r,   Ktest_load_credentials_from_file_external_account_authorized_user_bad_formatr   `  s    {{FGHNN4::v'IJKL	z99	:g++CM: 
; ==MTTM	
   
;	:r   rw   ru   c                     |j                  t        j                  d       t        j                  |      \  }}|t
        u sJ |t        j                  j                  u sJ | j                  d|       y Nrc   rv   )
setenvr	   CREDENTIALSr   r   MOCK_CREDENTIALSr'   r(   r)   r   )r   rw   monkeypatchr   r)   s        r,   &test__get_explicit_environ_credentialsr   n  sp     '33Z@&HH)K ****11111J9IJr.   c                     t         d f| _        |j                  t        j                  d       t        j                         \  }}|t         u sJ |J y )Nrc   )r   r/   r   r	   r   r   r   )r   r   r   r)   s       r,   4test__get_explicit_environ_credentials_no_project_idr   |  sT    ($.D'33Z@&HHJK****r.   z?google.auth._cloud_sdk.get_application_default_credentials_path)r0   z0google.auth._default._get_gcloud_sdk_credentialsc                     d|_         |j                  t        j                  d       t	        j
                  |       | j                  |       y r   )r/   r   r	   r   r   r   r   )get_gcloud_credsget_adc_pathrw   r   s       r,   9test__get_explicit_environ_credentials_fallback_to_gcloudr     sF     !+L'33Z@..@PQ ''9I'Jr.   c                     t         | _        t        j                  |      \  }}|t        u sJ |t
        j                  j                  u sJ |j                  t         |       y )Nrv   )	rz   r/   r   _get_gcloud_sdk_credentialsr   r'   r(   r)   r   )r   r   rw   r   r)   s        r,    test__get_gcloud_sdk_credentialsr     sb     !5L&BB)K ****111110CSTr.   c                     |j                  d      }t        |      | _        t        j                         \  }}|J |J y )Nznon-existent)rL   rN   r/   r   r   )r   rP   non_existentr   r)   s        r,   -test__get_gcloud_sdk_credentials_non_existentr     sJ     ;;~.L #L 1L&BBDKr.   z%google.auth._cloud_sdk.get_project_idzos.path.isfilec                     t         d f| _        t        j                         \  }}|t         k(  sJ |t        j
                  j                  k(  sJ |j                  sJ y r%   )r   r/   r   r   r'   r(   r)   r   r   unused_isfiler1   r   r)   s        r,   +test__get_gcloud_sdk_credentials_project_idr     sZ     )$.D&BBDK****11111    r.   )r/   c                     t         d f| _        t        j                         \  }}|t         k(  sJ |J |j                  sJ y r%   )r   r/   r   r   r   r   s        r,   .test__get_gcloud_sdk_credentials_no_project_idr     sN     )$.D&BBDK****    r.   c                      t        j                  t        j                        5 } t	        j
                  dddi       d d d         j                  d      sJ y # 1 sw Y   xY w)N	file_nameformat_version2z/Failed to load GDCH service account credentials)r5   r6   r
   r7   r   %_get_gdch_service_account_credentialsr9   r:   s    r,   Atest__get_gdch_service_account_credentials_invalid_format_versionr    sR    	z99	:g66*C0	
 
; ==JKKK	 
;	:s   AA"c                      t        j                  d      } t        | t        j                        sJ | j
                  dk(  sJ y )Nr   )r   get_api_key_credentialsrC   r   rF   token)credss    r,   test_get_api_key_credentialsr    s:    ,,Y7EeW00111;;)###r.   c                       e Zd ZdZd Zy)_AppIdentityModulezThe interface of the App Idenity app engine module.
    See https://cloud.google.com/appengine/docs/standard/python/refdocs    /google.appengine.api.app_identity.app_identity
    c                     t               r%   )NotImplementedError)r*   s    r,   get_application_idz%_AppIdentityModule.get_application_id  s    !##r.   N)__name__
__module____qualname____doc__r  r   r.   r,   r  r    s    
$r.   r  c              #   x   K   t        j                  t        d      }| j                  t        d|       | yw)z9Mocks the app_identity module for google.auth.app_engine.T)instanceapp_identityN)r'   create_autospecr  setattrr   )r   app_identity_modules     r,   r  r    s5      ../ADQ
N4GH
s   8:c                 <   dt         j                  t        j                  <   t        j
                  j                  | j                  _        t        j                         \  }}t        |t        j                        sJ |t        j
                  j                  k(  sJ y Npython27)osenvironr	   LEGACY_APPENGINE_RUNTIMEr'   r(   projectr  r/   r   _get_gae_credentialsrC   r   rF   )r  r   r)   s      r,   test__get_gae_credentials_gen1r#    sp    <FBJJ88937==3H3HL##0&;;=Kk:#9#9:::.....r.   c                  h    dt         j                  d<   t        j                         \  } }| J |J y Npython37GAE_RUNTIME)r  r  r   r"  rG   s     r,   test__get_gae_credentials_gen2r(    s;     *BJJ}&;;=Kr.   c                      dt         j                  t        j                  <   dt         j                  d<   t	        j
                         \  } }| J |J y r%  )r  r  r	   r   r   r"  rG   s     r,   /test__get_gae_credentials_gen2_backwards_compatr*    sS     =GBJJ889 *BJJ}&;;=Kr.   c                      t         j                  t        j                  vsJ dt        j                  vsJ t	        j
                         \  } }| J |J y )Nr'  r	   r   r  r  r   r"  rG   s     r,   #test__get_gae_credentials_env_unsetr-    sW    44BJJFFF

***&;;=Kr.   c                     t         j                  t        j                  vsJ dd l} t
        j                  j                  | j                  dd i      5  t        j                         \  }}|J |J dt        j                  t         j                  <   t        j                         \  }}|J |J 	 d d d        y # 1 sw Y   y xY w)Nr   google.auth.app_enginer  )r	   r   r  r  sysr'   patchdictmodulesr   r"  r0  r   r)   s      r,   'test__get_gae_credentials_no_app_enginer5     s     44BJJFFF	'?&F	G"*"?"?"AZ"""!!!@J

#<<="*"?"?"AZ"""!!! 
H	G	Gs   A B==Cr  )newc                     t         j                  t        j                  vsJ t	        j
                         \  } }| J |J dt        j                  t         j                  <   t	        j
                         \  } }| J |J y r  r,  rG   s     r,   !test__get_gae_credentials_no_apisr8  2  s     44BJJFFF&;;=K<FBJJ889&;;=Kr.   z.google.auth.compute_engine._metadata.is_on_gcez3google.auth.compute_engine._metadata.get_project_idexample-projectc                 x    t        j                         \  }}t        |t        j                        sJ |dk(  sJ y )Nr9  r   _get_gce_credentialsrC   r   rF   
unused_getunused_pingr   r)   s       r,   test__get_gce_credentialsr@  B  s<     ';;=Kk>#=#=>>>****r.   Fc                 B    t        j                         \  }}|J |J y r%   )r   r<  )r?  r   r)   s      r,   !test__get_gce_credentials_no_pingrB  Q  s/     ';;=Kr.   c                 r    t        j                         \  }}t        |t        j                        sJ |J y r%   r;  r=  s       r,   'test__get_gce_credentials_no_project_idrD  [  s9     ';;=Kk>#=#=>>>r.   c                      dd l } t        j                  j                  d      5  d | j                  d<   t        j                         \  }}|J |J 	 d d d        y # 1 sw Y   y xY w)Nr   sys.modulesgoogle.auth.compute_engine)r0  r'   r1  r2  r3  r   r<  r4  s      r,   +test__get_gce_credentials_no_compute_enginerH  j  s[    		'4801"*"?"?"AZ"""!!!	 
(	'	's   /AA&c                     t        j                  t        j                  j                         | j                  t        j                  j                         y r   )r   r<  r'   r(   r+   r   )pings    r,   *test__get_gce_credentials_explicit_requestrK  t  s7     !!$--"7"78DMM$9$9:r.   z6google.auth._default._get_explicit_environ_credentialsc                 r    t        j                         t        t        j                  j
                  fk(  sJ y r%   )r   defaultr   r'   r(   r)   )r>  s    r,   test_default_early_outrN  |  s+     "2DMM4L4L!MMMMr.   c                     |j                  t        j                  d       t        j                         \  }}|j
                  dk(  sJ y )Nz/path/to/filezN/path/to/file file via the GOOGLE_APPLICATION_CREDENTIALS environment variable)r   r	   r   r   rM  _cred_file_path)unused_load_credr   credr   s       r,   #test_default_cred_file_path_env_varrS    sJ     '33_E GD![	\	\r.   /path/to/adc/filec                 T    t        j                         \  }}|j                  dk(  sJ y )NrT  )r   rM  rP  )rQ  unused_get_adc_filer   rR  r   s        r,   "test_default_cred_file_path_gcloudrW    s+      GD!#6666r.   c                     |j                  t        j                  d       t        j                         t
        dfk(  sJ y Nzexplicit-env)r   r	   PROJECTr   rM  r   r>  r   s     r,   test_default_explict_project_idr\    s8     '//@"2N!CCCCr.   c                     |j                  t        j                  d       t        j                         t
        dfk(  sJ y rY  )r   r	   LEGACY_PROJECTr   rM  r   r[  s     r,   &test_default_explict_legacy_project_idr_    s8     '66G"2N!CCCCr.   zlogging.Logger.warningz)google.auth._default._get_gae_credentialsz)google.auth._default._get_gce_credentialsc                     t        j                         t        d fk(  sJ |j                  t        j
                  t        j
                  t        j
                         y r%   )r   rM  r   r   r'   ANY)
unused_gce
unused_gae
unused_sdkunused_explicitlogger_warnings        r,   test_default_without_project_idrg    s?    0 "2D!9999%%dhh$((Cr.   r   c                     t        j                  t        j                        5 }t	        j
                         sJ 	 d d d        j                  t        j                        sJ y # 1 sw Y   +xY wr%   )r5   r6   r
   r7   r   rM  r9   _CLOUD_SDK_MISSING_CREDENTIALS)rb  rc  rd  re  r;   s        r,   test_default_failrj    sR    * 
z99	:g!!! 
; ==@@AAA 
;	:s   A&&A/z/google.auth.credentials.with_scopes_if_requiredc                     ddg}t        j                  |      \  }}|| j                  k(  sJ |t        j                  j
                  k(  sJ | j                  t        |d        y )Nonetworq   r   )r   rM  r/   r'   r(   r)   assert_called_once_withr   )with_scopesr>  r&   r   r)   s        r,   test_default_scopedrq    se     U^F&..f=K+2222211111''(8&QU'Vr.   c                     t        j                  d      \  }}t        j                  j	                  d       |t
        j                  j                  k(  sJ y rt   )r   rM  r   with_quota_projectro  r'   r(   r)   )rs  r   r)   s      r,   test_default_quota_projectrt    sE     '..NK''??N11111r.   c                     ddl }t        j                  j                  d      5  d|j                  d<   d|j                  d<   t        j                         t        t        j                  j                  fk(  sJ 	 ddd       y# 1 sw Y   yxY w)z
    google.auth.compute_engine and google.auth.app_engine are both optional
    to allow not including them when using this package. This verifies
    that default fails gracefully if these modules are absent
    r   NrF  rG  r/  )
r0  r'   r1  r2  r3  r   rM  r   r(   r)   )r>  r0  s     r,   0test_default_no_app_engine_compute_engine_modulerv    sh     		'480104,-!&68P8P%QQQQ 
(	'	's   ABBc                 n   |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                         \  }}t        |t        j                        sJ |j                  rJ |j                  rJ |J y r   )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r   r   r1   r   rP   r   r   r)   s         r,   7test_default_environ_external_credentials_identity_poolry  #  s     ++m,Kdjj!345'33S5EF&..0Kk=#<#<==="""",,,,r.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                        sJ |j                  rJ |j                  rJ |t         j"                  j$                  u sJ |j&                  dgk(  sJ | j(                  dk(  sJ y )Nr   rp   rq      )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r   r   r'   r(   r)   r&   
call_countrx  s         r,   Dtest_default_environ_external_credentials_identity_pool_impersonatedr}  4  s     ++m,Kdjj!@AB'33S5EF&..78K k=#<#<==="""",,,,11111"I!JJJJ $$)))r.   c                    d}|t         j                  t        j                  <   |j	                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                         sJ |j"                  rJ |j$                  rJ ||k(  sJ |j&                  dgk(  sJ | j(                  dk(  sJ y Nproject_from_envr   rp   rq   r>   )r  r  r	   rZ  rL   rM   rV   rW   r   r   r   rN   r   rM  rC   r   rF   r   r   r&   r|  r1   r   rP   r  r   r   r)   s          r,   :test_default_environ_external_credentials_project_from_envr  J  s    
 *+;BJJ''(++m,Kdjj!@AB'33S5EF&..78K k=#<#<==="""",,,,))))"I!JJJJ $$)))r.   c                    d}|t         j                  t        j                  <   |j	                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                         sJ |j"                  rJ |j$                  rJ ||k(  sJ |j&                  dgk(  sJ | j(                  dk(  sJ y r  )r  r  r	   r^  rL   rM   rV   rW   r   r   r   rN   r   rM  rC   r   rF   r   r   r&   r|  r  s          r,   Atest_default_environ_external_credentials_legacy_project_from_envr  d  s    
 *2BBJJ../++m,Kdjj!@AB'33S5EF&..78K k=#<#<==="""",,,,))))"I!JJJJ $$)))r.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                        sJ |j                  rJ |j                  rJ |t         j"                  j$                  u sJ |j&                  dgk(  sJ y Nr   rp   rq   )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r   r   r'   r(   r)   r&   rx  s         r,   :test_default_environ_external_credentials_aws_impersonatedr  ~  s     ++m,Kdjj!678'33S5EF&..78K k3??333"""",,,,11111"I!JJJJr.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                        sJ |j                  sJ |j                  sJ |t         j"                  j$                  u sJ |j&                  dgk(  sJ y r  )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r   r   r'   r(   r)   r&   rx  s         r,   3test_default_environ_external_credentials_workforcer    s     ++m,Kdjj!=>?'33S5EF&..78K k=#<#<===((((11111"I!JJJJr.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dg      \  }}t        |t        j                        sJ |j                  rJ |j                  sJ |t         j"                  j$                  u sJ |j&                  dgk(  sJ y r  )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r   r   r'   r(   r)   r&   rx  s         r,   @test_default_environ_external_credentials_workforce_impersonatedr    s     ++m,Kdjj!JKL'33S5EF&..78K k=#<#<===""""((((11111"I!JJJJr.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  dgdgd      \  }}t        |t        j                        sJ |t        j                  j                   u sJ |j"                  dk(  sJ |j$                  dgk(  sJ |j&                  dgk(  sJ y )Nr   rp   r   ru   )r&   r   rw   )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  rC   r   rF   r'   r(   r)   rw   r&   r   rx  s         r,   [test_default_environ_external_credentials_with_user_and_default_scopes_and_quota_project_idr    s     ++m,Kdjj!345'33S5EF&..78HI&K k=#<#<===11111''=888"I!JJJJ%%8*   r.   c                    |j                  d      }|j                  t        j                  t                     |j                  t        j                  t        |             t        j                  t        j                  j                  dg      \  }}t        |t        j                         sJ |t        j                  j"                  u sJ | j%                  t        j&                  t        j                  j                         y r   )rL   rM   rV   rW   r   r   r	   r   rN   r   rM  r'   r(   r+   rC   r   rF   r)   r   ra  rx  s         r,   Ftest_default_environ_external_credentials_explicit_request_with_scopesr    s     ++m,Kdjj!345'33S5EF&..%%@AK
 k=#<#<===11111
 %%dhh8M8M%Nr.   c                    |j                  d      }|j                  t        j                  ddi             | j	                  t
        j                  t        |             t        j                  t        j                        5 }t        j                          d d d        j                  dj                  t        |                  sJ y # 1 sw Y   5xY wr   )rL   rM   rV   rW   r   r	   r   rN   r5   r6   r
   r7   r   rM  r9   r   )r   rP   rc   r;   s       r,   4test_default_environ_external_credentials_bad_formatr    s    {{67HNN4::v'9:;<'33S]C	z99	:g 
; ===DDS]S   
;	:s   CCc                     t         | _        t        j                  t        t
        j                        5  t        j                  d       \  }}d d d        y # 1 sw Y   y xY w)Nri   rv   )rl   r/   r5   rj   rk   r   _CLOUD_SDK_CREDENTIALS_WARNINGrM  r   r   r)   s      r,   <test_default_warning_without_quota_project_id_for_user_credsr    sB     !?L	k)P)P	Q"*"2"2D"IZ 
R	Q	Qs   AA!c                 L    t         | _        t        j                  d      \  }}y rt   )rl   r/   r   rM  r  s      r,   <test_default_no_warning_with_quota_project_id_for_user_credsr    s!     !?L&..NKr.   c                 r   t         | _        t        j                         \  }}t	        |t
        j                        sJ t	        |j                  t        j                  j                  j                        sJ |j                  dk(  sJ |j                  dgk(  sJ |j                  rJ |j                  rJ y r   )r   r/   r   rM  rC   r   rF   r   rD   rE   r   r   r   r   r   )r   r   r   s      r,   )test_default_impersonated_service_accountr    s     !YL%%'NKk#;#G#GHHH'')B)B)N)N   ,,0TTTT!!&L%MMMM,,,,)))))r.   c                 v    t         | _        ddg}t        j                  |      \  }}|j                  |k(  sJ y r   r   r/   r   rM  r   )r   r&   r   r   s       r,   4test_default_impersonated_service_account_set_scopesr    s?     !YL!F%%V4NK%%///r.   c                 v    t         | _        ddg}t        j                  |      \  }}|j                  |k(  sJ y )Nr   r   rn  r  )r   r   r   r   s       r,   <test_default_impersonated_service_account_set_default_scopesr  !  s?     !YL)N%%^DNK%%777r.   c                     t         | _        ddg}ddg}t        j                  ||      \  }}|j                  |k(  sJ y )Nr   r   scope3scope4r   r  )r   r&   r   r   r   s        r,   Ltest_default_impersonated_service_account_set_both_scopes_and_default_scopesr  ,  sK     !YL!F)N%%VNSNK%%///r.   c                    |j                  d      }|j                  t        j                  t                     t        j                  t        |            \  }}t        |t        j                        sJ |J | j                  sJ y r   )rL   rM   rV   rW   PLUGGABLE_DATAr   r8   rN   rC   r   rF   r   r   s        r,   5test_load_credentials_from_external_account_pluggabler  :  sr    ++m,Kdjj01&AA#kBRSKk9#8#8999    r.   c                    t         | _        t        j                  d      \  }}t	        |t
        j                        sJ |j                  dk(  sJ |j                  J |j                  dk(  sJ |j                  dk(  sJ |dk(  sJ y )Nru   rv   service_identity_namez.https://service-identity.<Domain>/authenticatez/path/to/ca/certproject_foo)GDCH_SERVICE_ACCOUNT_FILEr/   r   rM  rC   r   ServiceAccountCredentials_service_identity_name	_audience
_token_uri_ca_cert_path)r   r
  r!  s      r,   -test_default_gdch_service_account_credentialsr  F  s     !:L%%}ENE7e-GGHHH''+BBBB??"""OOOO"4444m###r.   c                 `   t         | _        t        j                  d       \  }}|j                  dk(  sJ d}|t
        j                  t        j                  <   t        j                  d       \  }}|j                  |k(  sJ d}t        j                  |      \  }}|j                  |k(  sJ y )Nrv   rw   quota_from_envexplicit_quota)	rm   r/   r   rM  rw   r  r  r	   GOOGLE_CLOUD_QUOTA_PROJECT)r   r   r   r  r  s        r,   #test_quota_project_from_environmentr  V  s    
 !UL%%t<NK''+====%N>LBJJ::;%%t<NK''>999%N%%~FNK''>999r.   c                 J   t        j                         \  }}|dk(  sJ |j                  J d}|t        j                  t
        j                  <   t        j                         \  }}|j                  |k(  sJ d}t        j                  |      \  }}|j                  |k(  sJ y )Nr9  r  r  rv   )r   r<  rw   r  r  r	   r  )r>  r?  r   r)   r  r  s         r,   test_quota_gce_credentialsr  j  s     ';;=K****''/// &N>LBJJ::;&;;=K''>999 &N&;;'K ''>999r.   r%   )rV   r  r'   r5   google.authr   r   r   r   r   r   r	   r
   r   r   r   r   r   google.oauth2r   r   google.oauth2.credentialsrD   pathrL   dirname__file__DATA_DIRrZ   r   r   r   rB   rl   rm   rz   r]   r  r{   SUBJECT_TOKEN_TEXT_FILE	TOKEN_URLAUDIENCEWORKFORCE_AUDIENCEWORKFORCE_POOL_USER_PROJECT
REGION_URLSECURITY_CREDS_URLCRED_VERIFICATION_URLr   r  r   SERVICE_ACCOUNT_EMAILr   !SERVICE_ACCOUNT_IMPERSONATION_URLr   r   r   r   r   r   r   r   r   r   MockCredentialsWithQuotaProjectr   rs  r/   r-   r1  r(   r)   LOAD_FILE_PATCHobjectrF   %EXTERNAL_ACCOUNT_GET_PROJECT_ID_PATCHr<   r@   rH   rR   rX   r[   r^   rd   rn   rr   rx   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r  r   r   r   r   markparametrizer   r   r   r   r   r   r   r  r  r  fixturer  r#  r(  r*  r-  r5  r8  r@  rB  TransportErrorrD  rH  rK  rN  rS  rW  r\  r_  rg  rj  rq  rt  rv  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r.   r,   <module>r     s    	      "  & # ( " ( 8 % 0 ! * )   77<<16:ww||H.DE 	
2 )		"   "$."  8:ww||D8 4 ww||H.DE ggll8-BC GGLL3NO 	
2 )		"   '',,x1MN 1	vX  C R
W T  @ "9:  @&I(>? G  !*?	 L B/667LMN "
 @ "9:)J#  G  !*?	 *K  "E "9:#>   "E "9:)J#>- ) <>77<<H< 8 8:ww||D8 4 <>77<<H< 8 MOGGLLOM I
 )+5) % 13=1 - 499+"I"IJ 3C  # # 0$ $**5"DMM$<$<=
 )-

(9(9  *	 ): ) %'438*, K9AK9,<--@>= Y '
! '
! '! '! '! '! '! '! '
! '
! '! '! ' '( '9 '9	 'R 'R" Rt,H -HA +dM-BC	K  D	K   +dM-BCEPT >NK O D
K +dM-BCEPT	U  D
	U EPT +))
 4$?	!  @	! 3$QUV40	!  1 W	!L$$ $   / /     " "" :~48 9  44RV 9"
++ 45SW 44RV 9)
))+
" 45SW;;
 <"DMM$<$<=
N
N 5"DMM$<$<=

 4$?E$
 5"DMM$<$<=
7 @7 <"DMM$<$<=
D
D
 <"DMM$<$<=
D
D
 $t4<"D)
 6"D)
 /"D)
 /"D)
D 5*D <
 6
 /
 /
B(B <"DMM$<$<=
 5!
WW <"DMM$<$<=
2
2 <"DMM$<$<=
R
R ' '  '* '** '*  '*0 '*  '*0 'K 'K$ 'K 'K$ 'K 'K$ ' ', 'O 'O*
 EPTJJ EPTOO EPT** EPT00 EPT88 EPT00 '! '! EPT
$
$ EPT: :  44RV 9"
 : :S*  "  s   o37p 3o= p
