
    rN              	       6	   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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  \R$                  R'                  \R$                  R)                  \5      S	S
5      r\" \R$                  R'                  \S5      S5       r\R3                  5       rSSS5        \R6                  R9                  \S5      rSS/rSrSr Sr!\RD                  RG                  SSS/5      S 5       r$S r%S r&S r'\RD                  RG                  SSS0SS0/5      S 5       r(\RD                  RG                  SSS0SS S!00S"S S!10/5      S# 5       r)\RD                  RG                  S$S%S&/5      \RT                  " S'\ R                   RV                  S(9S) 5       5       r,S* r-\R\                  4S+ jr/S, r0S- r1S. r2S/ r3S0 r4S1 r5S2 r6S3 r7\RT                  " S'\ R                   RV                  S(9S4 5       r8S5 r9S6 r:S7 r;S8 r<S9 r=\RT                  " S'\ R                   RV                  S(9S: 5       r>\RT                  " S'\ R                   RV                  S(9S; 5       r?S< r@\RT                  " S=\ S(9\RT                  " S>SS(9\RT                  R                  \S?SS@9SA 5       5       5       rB\RD                  RG                  SBSS/5      \RT                  " S=\ S(9\RT                  " S>SS(9\RT                  R                  \S?SS@9SC 5       5       5       5       rC\RT                  " SD\!S(9\RT                  " SESFS 0S(9\RT                  R                  \S?SS@9SG 5       5       5       rD\RD                  RG                  SBSS/5      \RT                  " SD\!S(9\RT                  " SESFS 0S(9\RT                  R                  \S?SS@9SH 5       5       5       5       rE\RT                  " S>SS(9\RT                  R                  \S?SS@9SI 5       5       rF\RD                  RG                  SBSS/5      \RT                  " S>SS(9\RT                  R                  \S?SS@9SJ 5       5       5       rG\RD                  RG                  SBSS/5      SK 5       rHg! , (       d  f       GN= f)L    N)_helpers)crypt)
exceptions)iam)jwt)	transport)_clientz..datazprivatekey.pemrb1z&https://www.googleapis.com/auth/pubsubz-https://www.googleapis.com/auth/logging.writezThttps://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/logging.writez8gl-python/3.7 auth/1.1 auth-request-type/at cred-type/saz8gl-python/3.7 auth/1.1 auth-request-type/it cred-type/sa	retryableTFc                    SSS.n[         R                  " [        R                  5       n[        R
                  " X5        S S S 5        WR                  R                  U :X  d   eUR                  S5      (       d   eg ! , (       d  f       NC= f)Nhelp	I'm aliveerrorerror_descriptionzhelp: I\'m alive	pytestraisesr   RefreshErrorr	   _handle_error_responsevaluer   match)r   response_dataexcinfos      Splatform/gsutil/third_party/google-auth-library-python/tests/oauth2/test__client.pytest__handle_error_responser   9   sl    $;GM	z..	/7&&}@ 
0 ==""i///==,----	 
0	/s   A>>
Bc                      SS0n [         R                  " [        R                  5       n[        R
                  " U S5        S S S 5        WR                  R                  (       a   eUR                  S5      (       d   eg ! , (       d  f       ND= f)NfoobarFz{\"foo\": \"bar\"}r   r   r   s     r   $test__handle_error_response_no_errorr#   D   sh    ENM	z..	/7&&}e< 
0 }}&&&&==.////	 
0	/s   A??
Bc                     Sn [         R                  " [        R                  5       n[        R
                  " U S5        S S S 5        WR                  R                  (       a   eUR                  U 5      (       d   eg ! , (       d  f       ND= f)Nthis is an error messageFr   r"   s     r   $test__handle_error_response_not_jsonr&   N   sc    .M	z..	/7&&}e< 
0 }}&&&&==''''	 
0	/s   A==
Bc                      [         R                  n [        SS5       HJ  nX;   a"  [        R                  " USS05      (       d   eM*  [        R                  " USS05      (       d  MJ   e   g )Nd   iX  r   invalid_scope)r   DEFAULT_RETRYABLE_STATUS_CODESranger	   
_can_retry)retryable_codesstatus_codes     r   test__can_retry_retryabler/   X   s_    >>OS#)%%kG_3MNNNN))+7QRRRR	 '    r   r   internal_failureserver_errorc                 \    [         R                  " [        R                  U 5      (       d   eg Nr	   r,   http_clientOKr   s    r   test__can_retry_messager9   a   s!     knnm<<<<r0   r)   r    r!   r   c                 \    [         R                  " [        R                  U 5      (       a   eg r4   r5   r8   s    r    test__can_retry_no_retry_messager;   h   s$     !!+..-@@@@@r0   mock_expires_in  500zgoogle.auth._helpers.utcnow)return_valuec                     [         R                  " SU05      nU[        R                  R                  [        R                  " SS9-   :X  d   eg )N
expires_inr=   seconds)r	   _parse_expirydatetimemin	timedelta)unused_utcnowr<   results      r   test__parse_expiryrJ   t   sC     ""L/#BCFX&&**X-?-?-LLLLLr0   c                  6    [         R                  " 0 5      b   eg r4   )r	   rD    r0   r   test__parse_expiry_nonerM   {   s      $,,,r0   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encoder
   Requestr?   )r   rU   responserequests       r   make_requestr\      s[    ##I$6$6FHOJJ}-44W=HM""9#4#45G#Nr0   c                      [        SS05      n [        R                  " U SSS05      nU R                  SSSS0SR	                  S	5      S
9  USS0:X  d   eg )NtestrZ   http://example.comparamsPOSTContent-Typez!application/x-www-form-urlencodedztest=paramsrQ   methodurlheadersbody)r\   r	   _token_endpoint_requestassert_called_withrX   r[   rI   s     r   test__token_endpoint_requestrk      su    FJ/0G,,%'9F
  !DE!!'*	   fj))))r0   c                      [        SS05      n [        R                  " U SSS0SSS9nU R                  SSS	S
S.SS9  USS0:X  d   eg )Nr^   rZ   r_   r`   access_tokenT)rm   use_jsonra   application/jsonzBearer access_token)rb   Authorizations   {"test": "params"}rc   )r\   r	   rh   ri   rj   s     r   %test__token_endpoint_request_use_jsonrq      su    FJ/0G,,	#F  .2
 #   fj))))r0   c                      [        0 [        R                  S9n [        R                  " [
        R                  5         [        R                  " U S0 5        S S S 5        g ! , (       d  f       g = f)NrU   r_   )	r\   r6   BAD_REQUESTr   r   r   r   r	   rh   r[   s    r   "test__token_endpoint_request_errorrv      sE    2k&=&=>G	z..	/''1ErJ 
0	/	/s   A
A-c                     [        SS0[        R                  S9n [        R                  " [
        R                  5         [        R                  " U SSS05        S S S 5        U R                  S:X  d   e[        SS0[        R                  S9n [        R                  " [
        R                  5         [        R                  " U SSS05        S S S 5        U R                  S:X  d   eg ! , (       d  f       N= f! , (       d  f       N2= f)Nr   r1   rs   r_      r   )
r\   r6   rt   r   r   r   r   r	   rh   
call_countru   s    r   3test__token_endpoint_request_internal_failure_errorrz      s    	01+:Q:QG 
z..	/''),?AS+T	
 
0
 """	$%k.E.EG 
z..	/'')G5G+H	
 
0
 """! 
0	/ 
0	/s   C(2C9(
C69
Dc                     [         R                  " [        R                  SS9n [        R
                  U l        [        R                  " SS05      R                  S5      U l
        [         R                  " [        R                  SS9n[        R
                  Ul        [        R                  " SS05      R                  S5      Ul
        [         R                  " [        R                  5      nX U/Ul        [        R                  " [        R                   5         ["        R$                  " USSS05        S S S 5        UR&                  S:X  d   eg ! , (       d  f       N!= f)	NTrO   r   r1   rQ   r)   r_   rx   )rR   rS   r   rT   r6   rt   rU   rV   rW   rX   r
   rY   side_effectr   r   r   r   r	   rh   ry   )retryable_errorunretryable_errorr[   s      r   Etest__token_endpoint_request_internal_failure_and_retry_failure_errorr      s   **9+=+=MO(44O::':<N&OPWWO ,,Y-?-?$O*66!ZZ)<o(NOVV ""9#4#45G*=NOG	z..	/''),?+Q	
 
0 """ 
0	/s   E
Ec                  D   [         R                  " [        R                  SS9n [        R
                  U l        [        R                  " SS05      R                  S5      U l
        [         R                  " [        R                  SS9n[        R                  Ul        [        R                  " SS05      R                  S5      Ul
        [         R                  " [        R                  5      nX/Ul        [        R                  " USS	S
05      nUR                   S:X  d   eg )NTrO   r   r1   rQ   helloworldr_   r^   r`      )rR   rS   r   rT   r6   rt   rU   rV   rW   rX   r
   r7   rY   r|   r	   rh   ry   )r}   rZ   r[   _s       r   @test__token_endpoint_request_internal_failure_and_retry_succeedsr      s    **9+=+=MO(44O::':<N&OPWWO ##I$6$6FH!nnHOJJ1299'BHM""9#4#45G*5G''%'9	A """r0   c                     [         R                  " [        R                  SS9n [        R
                  U l        SU l        [         R                  " [        R                  5      nXl	        [        R                  " [        R                  5       n[        R                  " US0 5        S S S 5        WR!                  S5      (       d   eg ! , (       d  f       N'= f)NTrO   r%   r_   )rR   rS   r   rT   r6   rt   rU   r
   rY   r?   r   r   r   r   r	   rh   r   )rZ   r[   r   s      r   )test__token_endpoint_request_string_errorr     s    ##I$6$6FH!--HO.HM""9#4#45G#	z..	/7''1ErJ 
0==34444 
0	/s   C
Cc                     U R                   S   S   R                  S5      n[        R                  R	                  U5      nUR                  5        H  u  pEX4   S   U:X  a  M   e   g )N   rg   rQ   r   )	call_argsdecodeurllibparseparse_qsitems)r[   r`   request_bodyrequest_paramskeyr   s         r   verify_request_paramsr     s^    $$Q'/66w?L\\**<8Nlln
"1%... %r0   c                     [        SSSS.5      n[        R                  " USS5      u  p#n[        U[        R                  SS.5        US:X  d   eX0" 5       [
        R                  " SS9-   :X  d   eUS	   S:X  d   eg )
Ntokenr=   r
   )rm   rA   extrar_   assertion_value
grant_type	assertionrB   r   )r\   r	   	jwt_grantr   _JWT_GRANT_TYPErE   rG   )utcnowr[   r   expiry
extra_datas        r   test_jwt_grantr     s     fEG !( 1 1%'8!E:
  7 7FWX
 GVX 2 23 ?????g&(((r0   c                     [        SSS.5      n [        R                  " [        R                  5       n[
        R                  " U SS5        S S S 5        WR                  R                  (       a   eg ! , (       d  f       N,= fNr=   r
   )rA   r   r_   r   )	r\   r   r   r   r   r	   r   r   r   r[   r   s     r   test_jwt_grant_no_access_tokenr   -  sg     	
G 
z..	/7'#79JK 
0}}&&&&& 
0	/   A22
B c                     [         R                  " 5       n [         R                  " U 5      n[        R                  " [
        SU05      R                  S5      n[        SU05      n[        R                  " U[        R                  SSSS5      u  pEUR                  S   S	   S
:X  d   eUR                  S   S   S   S:X  d   eUR                  S   S   S   S:X  d   e[        R                  " UR                  S   S   5      nUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eXB:X  d   eU R                  SS9n XP:X  d   eg )NexprQ   r   
fake_emailfake_audiencefake_access_tokengoogleapis.comr   re   z^https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/fake_email:generateIdTokenrf   rb   ro   rp   zBearer fake_access_tokenrg   audienceincludeEmailtrueuseEmailAzpr   microsecond)r   r   datetime_to_secsr   rX   SIGNERr   r\   r	   #call_iam_generate_id_token_endpointr   _IAM_IDTOKEN_ENDPOINTr   rV   loadsreplace)nowid_token_expiryid_tokenr[   r   r   response_bodys          r   (test_call_iam_generate_id_token_endpointr   ;  sk   
//
C//4Ozz&5/":;BB7KHGX./G??!!ME 	!U#k	l	l Q	*>:>PPPP!Y'8<VVVJJw003F;<M$777(F222'6111 
++!+
$C==r0   c            	         [        SS05      n [        R                  " [        R                  5       n[
        R                  " U [        R                  SSSS5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)Nr   zno tokenr   r   r   r   zNo ID token in response)
r\   r   r   r   r   r	   r   r   r   r   r   s     r   4test_call_iam_generate_id_token_endpoint_no_id_tokenr   ^  sz     Z	
G 
z..	/733%%	
 
0 ==23333 
0	/s   *A==
Bc                     [         R                  " 5       n [         R                  " U 5      n[        R                  " [
        SU05      R                  S5      n[        USS.5      n[        R                  " USS5      u  pEn[        U[        R                  SS.5        XB:X  d   eU R                  SS	9n XP:X  d   eUS
   S:X  d   eg )Nr   rQ   r
   )r   r   r_   r   r   r   r   r   )r   r   r   r   rX   r   r   r\   r	   id_token_jwt_grantr   r   r   )r   r   r   r[   r   r   r   s          r   test_id_token_jwt_grantr   r  s    
//
C//4Ozz&5/":;BB7KH6BCG ' : :%'8!E:
  7 7FWX
 
++!+
$C==g&(((r0   c                     [        SSS.5      n [        R                  " [        R                  5       n[
        R                  " U SS5        S S S 5        WR                  R                  (       a   eg ! , (       d  f       N,= fr   )	r\   r   r   r   r   r	   r   r   r   r   s     r   'test_id_token_jwt_grant_no_access_tokenr     sg     	
G 
z..	/7""7,@BST 
0}}&&&&& 
0	/r   c           	      <   [        SSSSS.5      n[        R                  " USSSS	S
S9u  p#pE[        U[        R                  SSS	S
S.5        US:X  d   eUS:X  d   eU[
        R
                  R                  [
        R                  " SS9-   :X  d   eUS   S:X  d   eg )Nr   new_refresh_tokenr=   r
   )rm   refresh_tokenrA   r   r_   r   	client_idclient_secret
rapt_token)r   )r   r   r   r   raptrB   r   )r\   r	   refresh_grantr   _REFRESH_GRANT_TYPErE   rF   rG   rH   r[   r   r   r   r   s         r   test_refresh_grantr     s    #0		
G 07/D/D0,E& !55,$, 	
	 G////X&&**X-?-?-LLLLLg&(((r0   c           	      Z   [        SSSS[        S.5      n[        R                  " USSSS	[        5      u  p#pE[        U[        R                  SSS	[        S
.5        US:X  d   eUS:X  d   eU[        R                  R                  [        R                  " SS9-   :X  d   eUS   S:X  d   eg )Nr   r   r=   r
   )rm   r   rA   r   scoper_   r   r   r   )r   r   r   r   r   rB   r   )
r\   SCOPES_AS_STRINGr	   r   SCOPES_AS_LISTr   r   rE   rF   rG   r   s         r   test_refresh_grant_with_scopesr     s    #0%	
G 07/D/D0,E& !55,$,%	
	 G////X&&**X-?-?-LLLLLg&(((r0   c                     [        SSSS.5      n [        R                  " [        R                  5       n[
        R                  " U SSSS5        S S S 5        WR                  R                  (       a   eg ! , (       d  f       N,= f)	Nr   r=   r
   )r   rA   r   r_   r   r   r   )	r\   r   r   r   r   r	   r   r   r   r   s     r   "test_refresh_grant_no_access_tokenr     sr     1		
G 
z..	/7)?K	
 
0 }}&&&&&	 
0	/s   A55
Bz;google.auth.metrics.token_request_access_token_sa_assertionz#google.oauth2._client._parse_expiryrh   )autospecc                 ,   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       5        U R	                  [        R
                  [        R
                  [        R
                  SS[        0S9  g NTx-goog-api-client	can_retryrf   r	   r   rR   Mockri   ANY)ACCESS_TOKEN_REQUEST_METRICS_HEADER_VALUE)mock_token_endpoint_requestmock_expirymock_metrics_header_values      r   test_jwt_grant_retry_defaultr     s\     diik499;		<22$&OP 3 r0   r   c                 *   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       US9  U R	                  [        R
                  [        R
                  [        R
                  US[        0S9  g Nr   r   r   r   )r   r   r   r   s       r   test_jwt_grant_retry_with_retryr   
  s^     diik499;		yQ22$&OP 3 r0   z7google.auth.metrics.token_request_id_token_sa_assertionzgoogle.auth.jwt.decoder   c                 ,   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       5        U R	                  [        R
                  [        R
                  [        R
                  SS[        0S9  g r   r	   r   rR   r   ri   r   %ID_TOKEN_REQUEST_METRICS_HEADER_VALUE)r   mock_jwt_decoder   s      r   %test_id_token_jwt_grant_retry_defaultr     s\     tyy{DIIKE22$&KL 3 r0   c                 *   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       US9  U R	                  [        R
                  [        R
                  [        R
                  US[        0S9  g r   r   )r   r   r   r   s       r   (test_id_token_jwt_grant_retry_with_retryr   1  sc     		TYY[$))+  22$&KL 3 r0   c                 n   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       [        R                  " 5       [        R                  " 5       5        U R	                  [        R
                  [        R
                  [        R
                  SS9  g )NTr   r	   r   rR   r   ri   r   )r   mock_parse_expirys     r    test_refresh_grant_retry_defaultr   G  se     		TYY[$))+tyy{DIIK  22$((DHH 3 r0   c           	      l   [         R                  " [        R                  " 5       [        R                  " 5       [        R                  " 5       [        R                  " 5       [        R                  " 5       US9  U R	                  [        R
                  [        R
                  [        R
                  US9  g )Nr   r   )r   r   r   s      r   #test_refresh_grant_retry_with_retryr   R  sl     										  22$((DHH	 3 r0   c           	      &   SSS.nSn[         R                  " [        R                  SS9n[        R
                  Ul        [        R                  " U5      R                  S5      Ul
        [         R                  " [        R                  5      nX4l        [        R                  " U[         R                  " 5       U[         R                  " 5       [         R                  " 5       U S9  U (       a  UR                   S	:X  d   eg UR                   S
:X  d   eg )Nr   r   r   z
dummy bodyTrO   rQ   r   rx   r   )rR   rS   r   rT   r6   INTERNAL_SERVER_ERRORrU   rV   rW   rX   r
   rY   r?   r	    _token_endpoint_request_no_throwr   ry   )r   r   rg   mock_responsemock_requests        r   0test__token_endpoint_request_no_throw_with_retryr   e  s    $;GMD((););dKM&<<MM299'BM''	(9(9:L -,,diik4diikY &&!+++&&!+++r0   )IrE   http.clientclientr6   rV   osr   rR   r   google.authr   r   r   r   r   r   google.oauth2r	   pathjoindirname__file__DATA_DIRopenfhreadPRIVATE_KEY_BYTES	RSASignerfrom_stringr   r   r   r   r   markparametrizer   r#   r&   r/   r9   r;   patchrF   rJ   rM   r7   r\   rk   rq   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr   r   r   r   r   r   r   rL   r0   r   <module>r     s2    !  	       "   ! ! 77<<14@	"'',,x!1
2D9R	 : 
	$	$%6	< -3
5  ? * ? &
 tUm4. 5.0(S w 23g~5NO== 	/"	5%.!	uen-AA *S%L9)8I8I8M8MNM O :M
- (3~~ *&*4K#0#4#,	5/ )8I8I8M8MN) O)(' F4().' )8I8I8M8MN#) O#)L )8I8I8M8MN$) O$)N'" A: 1E75E
 F F	
 tUm4A: 1E75E
 F F	 5
 =6 $E1:>75E
 F ?	
 tUm4=6 $E1:>75E F ?	 5 1E75E F F tUm41E75E F F 5  tUm4, 5,G :9s   "R		
R