
    8.                     t   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ZddlZddlm	Z	 ddl
mZ ddlmc 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  G d dej>                        Z  G d dejB                        Z" G d dejF                        Z$y)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                   >    e Zd ZdZd Zd Zd Z ed      d        Zy)TestCatz"Integration tests for cat command.c                    | j                  d      }| j                  ddt        |      gd| j                  rdnd      }| j                  r| j	                  d	|       n| j	                  d
|       | j                  ddt        |      gd| j                  rdnd      }| j                  r| j	                  d	|       n| j	                  d
|       | j                  ddt        |      gd| j                  rdnd      }| j                  r| j	                  d	|       n| j	                  d
|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       | j                  dddt        |      gd      }| j                  d|       y)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_rangez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                 :   | j                         }| j                  |dd      }| j                  ||j                  dt        |            }| j	                  dt        |      gd      }| j                  d	|       | j	                  d|j                  gd      }| j                  d
|       | j	                  d|j                  gd      }| j                  d	|       t        r6| j	                  d|j                  dz   gdd      }| j                  d|       y| j	                  d|j                  dz   gdd      }| j                  r,| j                  dj                  |j                        |       y| j                  t        |j                  z  dz   |       y)z'Tests cat command on versioned objects.s   data1r   )
bucket_urir   gs_idempotent_generations   data2)r9   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-   r0   version_specific_urir   r/   r.   formatr   )r1   r9   uri1uri2r4   r3   s         r5   test_cat_versionz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	r7   c                 @   | j                         }d}d}| j                  ||      }| j                  ||      }| j                  dt        |      t        |      dz   gddd      \  }}| j	                  |j                  d	      |       | j                  r| j	                  d
|       n| j	                  d|       | j                  dt        |      dz   t        |      gddd      \  }}|j                  d	      }| j                  r%| j	                  ||       | j	                  d
|       n$| j                  ||       | j	                  d|       | j                  dt        |      t        |      gd      }| j	                  ||j                  d	      z   |       y)z*Tests cat command with multiple arguments.r   s
   abcdefghij)r9   r   r   nonexistentTr   )r#   r   r   asciiz.The following URLs matched no objects or filesNotFoundExceptionr"   N)CreateBucketr+   r,   r-   r/   decoder.   assertNotIn)	r1   r9   r=   r<   obj_uri1obj_uri2r4   r3   decoded_data1s	            r5   test_cat_multi_argzTestCat.test_cat_multi_arg   s   ""$JEE  J GH  J GH^^	X	j	M	)	+ $ NFF 	MM%,,w'0
mmDfM
mm'0^^	Z =0	h	 $ NFF LL)M
mmM6*
mmDfM }f-
mm'0 ^^	XX/t  EFMM-%,,w"77@r7   z7S3 customer-supplied encryption keys are not supported.c           	      4   | j                   t        j                  k(  rt        j                  d      S d}| j                  d|t              }| j                  dt        |      gdd      }| j                  d	|       d
dt        fg}t        |      5  | j                  dt        |      gd      }| j                  |j                  d      |       | j                  dddt        |      gd      }| j                  |d       d d d        y # 1 sw Y   y xY w)Nz3gsutil does not support encryption with the XML APIr   foo)r;   r   encryption_keyr   r   T)r   r   z No decryption key matches objectGSUtilrT   r"   rI   r    r&   r'   )test_apir   XMLr   skipr+   r   r,   r-   r/   r   r0   encode)r1   object_contents
object_urir3   boto_config_for_testr4   s         r5   test_cat_encrypted_objectz!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   A2DDN)	__name__
__module____qualname____doc__r6   rF   rQ   r	   r]    r7   r5   r   r   *   s3    *8$t(T'AR FG& H&r7   r   c                       e Zd ZdZd Zy)TestShimCatFlagsz!Unit tests for shimming cat flagsc                    | j                  d      }t        ddg      5  t        ddd      5  | j                  dd	d
dt	        |      gd      }dj                  |j                  d         }| j                  dj                  t        j                  d      t	        |            |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr$   r   )rU   use_gcloud_storageTrue)rU   hidden_shim_modedry_runrg   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messagesr/   rC   r   _get_gcloud_binary_path)r1   r[   mock_log_handler
info_liness       r5   test_shim_translates_flagsz+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>B>-C
>C	C

CN)r^   r_   r`   ra   rv   rb   r7   r5   rd   rd      s
    )/r7   rd   c                       e Zd ZdZd Zy)TestCatHelperzUnit tests for cat helper.c                 (   t        j                         }t        j                  |      }d}| j	                  d| j
                        }| j                  |d|      }| j                  |d|      }| j                  d      |j                  _	         t        j                                }t        j                         }||j                  _        ||_        |j                  d	g|
       t        j                  dd|d dd dd d d
      t        j                         g}	t        j                  dd|d dd dd d d
      t        j                         g}
| j!                  |j"                  dd |	|
g       | j!                  |j"                  dd |	|
g       y )N)command_objr$   bucket)bucket_nameproviderfoo1)r9   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   	CatHelperrK   default_providerr+   _test_wildcard_iteratorWildcardIteratorreturn_value	mock_open
gsutil_apiGetObjectMediaflushCatUrlStringscallr/   call_args_list)r1   cat_command_mockcat_helper_mockrZ   r9   objobj1stdout_mockwrite_flush_collector_mockmock_part_onemock_part_twos              r5   test_cat_helper_runs_flushz(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.2K!!ug+!N		(&* !#'		! 			M 			(&* !#'		! 			M 	MM,;;Aa@ -02MM,;;Aa@ -02r7   N)r^   r_   r`   ra   r   rb   r7   r5   rx   rx      s
    "92r7   rx   )%ra   
__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
   rA   r   r-   r   r   r   r   r   gslib.utilsr   r   r   GsUtilIntegrationTestCaser   ShimUnitTestBaserd   GsUtilUnitTestCaserx   rb   r7   r5   <module>r      s     & %  ' 	 
 ( 2 ' ' ? 8 0 ) 1 2 1 % " ! g&h00 g&T/x00 /,<2H// <2r7   