
    j'                        d 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ddlmZ ddlZddlmZmZ  e eddd             ddlm Z  	 ddl!m"Z" dZ#	 ddl%Z%dZ&dZ'	 	 	 	 	 ddZ( G d dejR                        Z*y# e$$ r dZ#Y 1w xY w# e$$ r dZ&Y 7w xY w)z"Tests for gcs_json_credentials.py.    )absolute_import)print_function)division)unicode_literals)GceAssertionCredentials)reauth_creds)gcs_json_api)gcs_json_credentials)	CredTypes)CommandException)testcase)SetBotoConfigForTest)unittest)WrappedCredentialsN)ServiceAccountCredentials)add_moveMovedModulemockzunittest.mock)r   )load_pkcs12TFzThis is the error messagec                     g }| r/|j                  dd| d   f       |j                  dd| d   f       n|j                  d       |j                  dd|fdd	|fdd
|fdd|fg       |S )NCredentialsgs_service_key_filekeyfilegs_service_client_id	client_id)r   r   Ngs_oauth2_refresh_tokenGoogleComputeservice_accountgs_external_account_file(gs_external_account_authorized_user_file)appendextend)service_account_credsuser_account_creds	gce_credsexternal_account_creds&external_account_authorized_user_credsconfigs         8platform/gsutil/gslib/tests/test_gcs_json_credentials.pygetBotoCredentialsConfigr*   8   s     &
MM="7(35 6
MM="8(57 8 MM>?---!:<NO!#4i@!;(*!K8:	; < 
-    c                   (   e Zd ZdZej
                  j                  ej                  d ej                   ej                         ddddg            d        Z
d	 Z ej                  ed
      ej
                  j                  ej                  d ee            d               Zd Zej
                  j                  ej(                  d ee            d        Zej
                  j                  ej,                  dd      d        Zej
                  j                  ed ee            d        Zd Zej
                  j                  ed ee            d        Zd Zej
                  j                  ed ee            d        Zd Zy)TestGcsJsonCredentialsz5Test logic for interacting with GCS JSON Credentials.%from_service_account_pkcs12_keystring123ab)	token_uriservice_account_emailscopes)return_valuec                    t        j                  dd      }| j                  |      }t        t	        |dd            5  | j                  t        j                                t        j                  d d d d       }| j                  |j                  j                  d       | j                  |j                  t        j                         d d d        y # 1 sw Y   y xY w)Ngslibtests/test_data/test.p12contents?r   r   r#   r/   )pkgutilget_dataCreateTempFiler   r*   
assertTruer
   _HasOauth2ServiceAccountCredsr	   
GcsJsonApiassertEqualcredentialsr3   assertIsInstanceP12Credentials)self_r:   tmpfileclients        r)   "testOauth2ServiceAccountCredentialz9TestGcsJsonCredentials.testOauth2ServiceAccountCredentialS   s     )CDH!!8!4G	 8
 	

 oo*HHJK&&tT4>f
v))??G
F..0D0S0ST
 
 
s   BCCc                     t        j                  dd      }| j                  |      }| j                  t              5 }t        j                  |       d d d        y # 1 sw Y   y xY w)Nr7   r8   r9   )r>   r?   r@   assertRaises	Exceptionr
   CreateP12ServiceAccount)rH   r:   rJ   excs       r)   8testP12CredentialsthrowsErrorIfProvidedWithMissingFieldszOTestGcsJsonCredentials.testP12CredentialsthrowsErrorIfProvidedWithMissingFieldsc   sR    )CDH!!8!4G			9	%227; 
&	%	%s   AA&z%p12credentials requires cryptography.__init__)side_effectc           	      L   t        j                  dd      }| j                  |      }t        t	        |dd            5  | j                         5 }| j                  t              5 }t        j                  d t        j                         d d        d d d        | j                  t        t        j                               | j                  t         j"                  |j$                  d          d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr7   r8   r9   r;   r<   r=   r   )r>   r?   r@   r   r*   
assertLogsrN   rO   r	   rC   logging	getLoggerassertInERROR_MESSAGEstr	exceptionr   OAUTH2_SERVICE_ACCOUNToutputrH   rI   r:   rJ   loggerrQ   s         r)   testOauth2ServiceAccountFailurez6TestGcsJsonCredentials.testOauth2ServiceAccountFailurei   s    
 )CDH!!8!4G	 8
 	

 ??y)S

!
!$(9(9(;T4
H *mS%78i66a8HI	 
 
 *) 
 
s=   DD(+DAD1DDDD	DD#c                 "   t        t        d            5  | j                  t        j                                t        j                  d d d d       }| j                  |j                  t        j                         d d d        y # 1 sw Y   y xY w)Nr;   r$   )r   r*   rA   r
   _HasOauth2UserAccountCredsr	   rC   rF   rE   r   Oauth2WithReauthCredentials)rH   rK   s     r)   testOauth2UserCredentialz/TestGcsJsonCredentials.testOauth2UserCredential{   si    	6#N	O
oo*EEGH&&tT4>f
F..(DDF 
P	O	Os   A&BBc           	         t        t        d            5  | j                         5 }| j                  t              5 }t        j                  d t        j                         d d        d d d        | j                  t        t        j                               | j                  t        j                  |j                  d          d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr;   rc   r   )r   r*   rV   rN   rO   r	   rC   rW   rX   rY   rZ   r[   r\   r   OAUTH2_USER_ACCOUNTr^   rH   rI   r`   rQ   s       r)   testOauth2UserFailurez,TestGcsJsonCredentials.testOauth2UserFailure   s     
6#N	O??y)S

!
!$(9(9(;T4
H *mS%78i33V]]15EF	  
P	O))  
P	O:   C/C#+C(AC#C/C C##C,	(C//C8r   T)autospecc                    fd}d j                   _        dj                   _        |j                   _        t	        t        d            5  | j                  t        j                                t        j                  d d d d       }| j                  |j                  t               | j                  |j                  j                  d       | j                  |j                  j                  d        d d d        y # 1 sw Y   y xY w)Nc                 (    | j                   _        y )N)r5   store)ro   mock_credentialss    r)   	set_storez;TestGcsJsonCredentials.testGCECredential.<locals>.set_store   s    ,1##)r+   rEfrEshtOkEnr;   r%   )r5   r   refresh_tokenrq   r   r*   rA   r
   _HasGceCredsr	   rC   rF   rE   r   rD   assertIs)rH   rp   rq   rK   s    `  r)   testGCECredentialz(TestGcsJsonCredentials.testGCECredential   s    
2 /3!!+2@!!/.7!!+	6E	F
oo*779:&&tT4>f
F..0GH
v))77H
mmF&&00$7 
G	F	Fs   B(D  D	c           	         t        t        d            5  | j                         5 }| j                  t              5 }t        j                  d t        j                         d d        d d d        | j                  t        t        j                               | j                  t        j                  |j                  d          d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr;   rs   r   )r   r*   rV   rN   rO   r	   rC   rW   rX   rY   rZ   r[   r\   r   GCEr^   ri   s       r)   testGCECredentialFailurez/TestGcsJsonCredentials.testGCECredentialFailure   s     
6E	F??y)S

!
!$(9(9(;T4
H *mS%78immV]]1%56	  
G	F))  
G	Frk   c                    t        j                  dd      }| j                  |      }t        t	        |            5  t        j                  d d d d       }| j                  |j                  t               d d d        y # 1 sw Y   y xY w)Nr7   6tests/test_data/test_external_account_credentials.jsonr9   r&   
r>   r?   r@   r   r*   r	   rC   rF   rE   r   rH   r:   rJ   rK   s       r)   testExternalAccountCredentialz4TestGcsJsonCredentials.testExternalAccountCredential   s}    IKH!!8!4G	 @
B&&tT4>f
F..0BC
B 
B 
B   9B  B	c           	      F   t        j                  dd      }| j                  |      }t        t	        |            5  | j                         5 }| j                  t              5 }t        j                  d t        j                         d d        d d d        | j                  t        t        j                               | j                  t         j"                  |j$                  d          d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr7   r|   r9   r}   r   )r>   r?   r@   r   r*   rV   rN   rO   r	   rC   rW   rX   rY   rZ   r[   r\   r   EXTERNAL_ACCOUNTr^   r_   s         r)   testExternalAccountFailurez1TestGcsJsonCredentials.testExternalAccountFailure   s     IKH!!8!4G	 @
B??y)S

!
!$(9(9(;T4
H *mS%78i00&--2BC	 
B 
B *) 
B 
B<   DD%+C?AD.D?DDD	DD c                    t        j                  dd      }| j                  |      }t        t	        |            5  t        j                  d d d d       }| j                  |j                  t               d d d        y # 1 sw Y   y xY w)Nr7   Ftests/test_data/test_external_account_authorized_user_credentials.jsonr9   r'   r~   r   s       r)   +testExternalAccountAuthorizedUserCredentialzBTestGcsJsonCredentials.testExternalAccountAuthorizedUserCredential   s    PH !!8!4G	 3:	<
= &&tT4>f
F..0BC	
= 
= 
=r   c           	      F   t        j                  dd      }| j                  |      }t        t	        |            5  | j                         5 }| j                  t              5 }t        j                  d t        j                         d d        d d d        | j                  t        t        j                               | j                  t         j"                  |j$                  d          d d d        d d d        y # 1 sw Y   pxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr7   r   r9   r   r   )r>   r?   r@   r   r*   rV   rN   rO   r	   rC   rW   rX   rY   rZ   r[   r\   r    EXTERNAL_ACCOUNT_AUTHORIZED_USERr^   r_   s         r)   (testExternalAccountAuthorizedUserFailurez?TestGcsJsonCredentials.testExternalAccountAuthorizedUserFailure   s     PH !!8!4G	 3:	<
= ??y)S

!
!$(9(9(;T4
H *mS%78i@@mmA&	(	 
= 
= *) 
= 
=r   c                     t        t        dddd            5  | j                  t              5  t	        j
                  d d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr;   r<   )r$   r#   )r   r*   rN   r   r	   rC   )rH   s    r)   /testOauth2ServiceAccountAndOauth2UserCredentialzFTestGcsJsonCredentials.testOauth2ServiceAccountAndOauth2UserCredential   sg    	 C03258#	$
% -.dD$7 /
% 
% /.
% 
%s"   A&A	A&A#	A&&A/N) __name__
__module____qualname____doc__r   patchobjectr
   rG   MockrL   rR   r   
skipUnless
HAS_CRYPTO
ValueErrorrZ   ra   rf   r   re   rj   credentials_librw   r   rz   r   r   r   r   r   r    r+   r)   r-   r-   P   s   =::)88<"E"6"E"Eidiik]bz  JM  OR  IS  #T  UUUU< 8z#JK::)88!+M!:  <J< LJF ::\==!+M!:  <G<G ::)99."  $8$8 ::,!+M!:  <7<7D ::'!+M!:  <
D<
D
D ::'!+M!:  <(<( 8r+   r-   )NNNNN)+r   
__future__r   r   r   r   apitools.base.pyr   google_reauthr   r7   r	   r
   gslib.cred_typesr   gslib.exceptionr   gslib.testsr   gslib.tests.utilr   r   gslib.utils.wrapped_credentialsr   rW   oauth2client.service_accountr   r>   sixr   r   	six.movesr   OpenSSL.cryptor   HAS_OPENSSLImportErrorcryptographyr   rZ   r*   GsUtilUnitTestCaser-   r   r+   r)   <module>r      s    ) & %  ' 4 &  & & ,   1 % >  B  % VV_	5 6 (+* , +/0Y8X88 Y8I  +  *s$   B4 C 4B>=B>C
C