
    8.                     t   S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKJ	r	  SSK
Jr  SSKJs  Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  S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\R>                  5      r  " S S\RB                  5      r" " S S\RF                  5      r$g)zTests for cat command.    )absolute_import)print_function)division)unicode_literalsN)ApiSelector)NO_URLS_MATCHED_TARGET)	SkipForS3)GenerationFromURI)ObjectToURI)RUN_S3_TESTS)SetBotoConfigForTest)SetEnvironmentForTest)TEST_ENCRYPTION_KEY1)unittest)
cat_helper)	shim_util)mockc                   F    \ rS rSrSrS rS rS r\" S5      S 5       r	Sr
g	)
TestCat*   z"Integration tests for cat command.c                    U R                  SS9nU R                  SS[        U5      /SU R                  (       a  SOSS9nU R                  (       a  U R	                  S	U5        OU R	                  S
U5        U R                  SS[        U5      /SU R                  (       a  SOSS9nU R                  (       a  U R	                  S	U5        OU R	                  S
U5        U R                  SS[        U5      /SU R                  (       a  SOSS9nU R                  (       a  U R	                  S	U5        OU R	                  S
U5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        U R                  SSS[        U5      /SS9nU R                  SU5        g)z/Tests cat command with various range arguments.
   0123456789contentscatz-r a-bT      return_stderrexpected_statuszJExpected a non-negative integer value or a range of such values instead ofzInvalid rangez-r 1-2-3z-r 1.7-3-r-return_stdout
0123456789z	1000-3000 z1000-1-3123z8-89z0-00z-3789N)CreateObject	RunGsUtilsuri_use_gcloud_storageassertInassertEqual)selfkey_uristderrstdouts       'platform/gsutil/gslib/tests/test_cat.pytest_cat_rangeTestCat.test_cat_range-   s   7G^^	$w-(!551  >F 
mm
V
 mmOV,^^	
DM*!551  >F 
mm
V
 mmOV,^^	
DM*!551  >F 
mm
V
 mmOV, ^^UD#tG}=*.  0F\6*^^	k4=1  GFR ^^	gtG}-T  CFR ^^	eT']+4  AFUF#^^	dDM*$  @FT6"^^	eT']+4  AFS&!^^	dDM*$  @FUF#    c                 $   U R                  5       nU R                  USSS9nU R                  UUR                  S[        U5      S9nU R	                  S[        U5      /SS9nU R                  S	U5        U R	                  SUR                  /SS9nU R                  S
U5        U R	                  SUR                  /SS9nU R                  S	U5        [        (       a3  U R	                  SUR                  S-   /SSS9nU R                  SU5        gU R	                  SUR                  S-   /SSS9nU R                  (       a,  U R                  SR                  UR                  5      U5        gU R                  [        UR                  -  S-   U5        g)z'Tests cat command on versioned objects.s   data1r   )
bucket_urir   gs_idempotent_generations   data2)r;   object_namer   r<   r   Tr#   data2data123456r   r   zBadRequestException: 40023z5The following URLs matched no objects or files:
{}23
N)CreateVersionedBucketr,   r=   urigenr-   r.   r1   version_specific_urir   r0   r/   formatr   )r2   r;   uri1uri2r5   r4   s         r6   test_cat_versionTestCat.test_cat_versiong   s   ++-J
&.67  9D 
)-)9)9&.6<Tl  DD ^^UDJ/t^DFWf%^^UD$=$=>*.  0FWf%^^UD$=$=>*.  0FWf%| ~~ud&?&?'&IJ,0./  1f mm.7 ~~ud&?&?$&FG,0./  1f 
	!	!ELL))+,2	4 	,t/H/HH4O	r9   c                 (   U R                  5       nSnSnU R                  XS9nU R                  XS9nU R                  S[        U5      [        U5      S-   /SSSS9u  pgU R	                  UR                  S	5      U5        U R                  (       a  U R	                  S
U5        OU R	                  SU5        U R                  S[        U5      S-   [        U5      /SSSS9u  pgUR                  S	5      nU R                  (       a$  U R	                  X5        U R	                  S
U5        O#U R                  X5        U R	                  SU5        U R                  S[        U5      [        U5      /SS9nU R	                  XR                  S	5      -   U5        g)z*Tests cat command with multiple arguments.r   s
   abcdefghij)r;   r   r   nonexistentTr   )r$   r   r    asciiz.The following URLs matched no objects or filesNotFoundExceptionr#   N)CreateBucketr,   r-   r.   r0   decoder/   assertNotIn)	r2   r;   r?   r>   obj_uri1obj_uri2r5   r4   decoded_data1s	            r6   test_cat_multi_argTestCat.test_cat_multi_arg   s   ""$JEE  J GH  J GH^^	X	j	M	)	+ $ NF 	MM%,,w'0
mmDfM
mm'0^^	Z =0	h	 $ NF LL)M
mmM*
mmDfM }-
mm'0 ^^	XX/t  EFMM-,,w"77@r9   z7S3 customer-supplied encryption keys are not supported.c           	      *   U R                   [        R                  :X  a  [        R                  " S5      $ SnU R                  SU[        S9nU R                  S[        U5      /SSS9nU R                  S	U5        S
S[        4/n[        U5         U R                  S[        U5      /SS9nU R                  UR                  S5      U5        U R                  SSS[        U5      /SS9nU R                  US5        S S S 5        g ! , (       d  f       g = f)Nz3gsutil does not support encryption with the XML APIr   foo)r=   r   encryption_keyr   r   T)r    r   z No decryption key matches objectGSUtilrX   r#   rL   r!   r'   r(   )test_apir   XMLr   skipr,   r   r-   r.   r0   r   r1   encode)r2   object_contents
object_urir4   boto_config_for_testr5   s         r6   test_cat_encrypted_object!TestCat.test_cat_encrypted_object   s   }}']]
?A A#O""u,;2F # HJ ^^UD$45,-*.  0F 	MM4f=%'79MNO	2	3~~ud:&67t~Lf
v}}W-?~~$tJ/
0  Ff
vu% 
4	3	3s   A,D
D N)__name__
__module____qualname____firstlineno____doc__r7   rH   rT   r	   ra   __static_attributes__rc   r9   r6   r   r   *   s3    *8$t(T'AR FG& H&r9   r   c                       \ rS rSrSrS rSrg)TestShimCatFlags   z!Unit tests for shimming cat flagsc                    U R                  SS9n[        SS/5         [        SSS.5         U R                  SS	S
S[	        U5      /SS9nSR                  UR                  S   5      nU R                  SR                  [        R                  " S5      [	        U5      5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr%   r   )rY   use_gcloud_storageTrue)rY   hidden_shim_modedry_runro   fake_dir)(CLOUDSDK_CORE_PASS_CREDENTIALS_TO_GSUTILCLOUDSDK_ROOT_DIRr   z-hr!   z2-4T)return_log_handler
infoz3Gcloud Storage Command: {} storage cat -d -r 2-4 {})r,   r   r   
RunCommandr.   joinmessagesr0   rE   r   _get_gcloud_binary_path)r2   r_   mock_log_handler
info_liness       r6   test_shim_translates_flags+TestShimCatFlags.test_shim_translates_flags   s    ""L"9J	GHJ 
K 6<)" 	  ??D$tJ'78# + % YY/88@A
"F11*=Z "#-		/	
K 
K	 	
K 
Ks#   C
A<B9(C
9
C	C


Crc   N)rd   re   rf   rg   rh   r~   ri   rc   r9   r6   rk   rk      s
    )/r9   rk   c                       \ rS rSrSrS rSrg)TestCatHelper   zUnit tests for cat helper.c                    [         R                  " 5       n[        R                  " US9nSnU R	                  SU R
                  S9nU R                  USUS9nU R                  USUS9nU R                  S5      UR                  l	        [         R                  " 5       " 5       n[         R                  " 5       nXR                  l        Xl        UR                  S	/US
9  [         R                  " SSUS SS SS S SS9
[         R                  " 5       /n	[         R                  " SSUS SS SS S SS9
[         R                  " 5       /n
U R!                  UR"                  SS X/5        U R!                  UR"                  SS X/5        g )N)command_objr%   bucket)bucket_nameproviderfoo1)r;   r=   r   foo2zgs://bucket/foo*url)url_strings
cat_out_fdr   
   gs)compressed_encoding
start_byteend_byteobject_size
generationdecryption_tupler   r      )r   Mockr   	CatHelperrN   default_providerr,   _test_wildcard_iteratorWildcardIteratorreturn_value	mock_open
gsutil_apiGetObjectMediaflushCatUrlStringscallr0   call_args_list)r2   cat_command_mockcat_helper_mockr^   r;   objobj1stdout_mockwrite_flush_collector_mockmock_part_onemock_part_twos              r6   test_cat_helper_runs_flush(TestCatHelper.test_cat_helper_runs_flush   s   yy{ **7GHO"O""x,0,A,A # CJ


z(.%4  6C 
)/&5  7D 6:5Q5Q6%%2 .."$K "&1K.2!!ug+!N		(&* !#'		! 			M 			(&* !#'		! 			M 	MM,;;Aa@ 02MM,;;Aa@ 02r9   rc   N)rd   re   rf   rg   rh   r   ri   rc   r9   r6   r   r      s
    "92r9   r   )%rh   
__future__r   r   r   r   ossysgslib.cs_api_mapr   gslib.exceptionr   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser	   gslib.tests.utilr
   rC   r   r.   r   r   r   r   r   gslib.utilsr   r   r   GsUtilIntegrationTestCaser   ShimUnitTestBaserk   GsUtilUnitTestCaser   rc   r9   r6   <module>r      s     & %  ' 	 
 ( 2 ' ' ? 8 0 ) 1 2 1 % " ! g&h00 g&T/x00 /,<2H// <2r9   