
    -                     |   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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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\RL                  5      r'g)zTests for stat command.    )absolute_import)print_function)division)unicode_literals)ApiSelector)NO_URLS_MATCHED_TARGETN)	SkipForS3)
SkipForXML)GenerationFromURI)ObjectToURI)SetBotoConfigForTest)TEST_ENCRYPTION_CONTENT1)TEST_ENCRYPTION_CONTENT1_CRC32C)TEST_ENCRYPTION_CONTENT1_MD5)TEST_ENCRYPTION_CONTENT2)TEST_ENCRYPTION_CONTENT2_CRC32C)TEST_ENCRYPTION_CONTENT2_MD5)TEST_ENCRYPTION_CONTENT3)TEST_ENCRYPTION_CONTENT3_CRC32C)TEST_ENCRYPTION_CONTENT3_MD5)TEST_ENCRYPTION_KEY1)TEST_ENCRYPTION_KEY1_SHA256_B64)TEST_ENCRYPTION_KEY2)TEST_ENCRYPTION_KEY2_SHA256_B64)unittest)Retryc                       \ rS rSrSr\" S5      \" S5      S 5       5       rS rS r	S r
S	 rS
 rS rS r\" S5      S 5       rS rSrg)TestStat/   z#Integration tests for stat command.z0'Archived time' is a GS-specific response field.zXML API only supports 'DeletedTime' response field when making a GET Bucket request to list all objects, which is heavy overhead when the real intent is just a HEAD Object call.c                     U R                  5       nU R                  USS9nU R                  UUR                  S[        U5      S9  U R	                  SUR
                  /SS9nU R                  SU5        g)	z>Tests stat output of an outdated object under version control.   z)
bucket_uricontents)r"   object_namer#   gs_idempotent_generationstatTreturn_stdoutzNoncurrent timeN)CreateVersionedBucketCreateObjectr$   urigen	RunGsUtilversion_specific_uriassertIn)selfr"   old_object_uristdouts       (platform/gsutil/gslib/tests/test_stat.pytest_versioned_stat_output#TestStat.test_versioned_stat_output2   s     ++-J&&*t&LN 	"0"<"<#/5n/E  G
 ^^V^%H%HI*.  0F 	MM#V,    c                    U R                  SS9nU R                  S[        U5      /SS9nU R                  UR                  U5        U R                  SU5        U R
                  S:X  a  U R                  [        R                  :X  a%  U R                  SU5        U R                  S	U5        O0U R                  [        R                  :X  a  U R                  S
U5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        g)z%Tests stat output of a single object.r!   r#   r&   Tr'   zCreation time:gszCache-Control:zContent-Encoding:zStorage class:zGeneration:zMetageneration:zHash (crc32c):zHash (md5):zArchived timezContent-Length:zContent-Type:zETag:N)r*   r,   surir.   uridefault_providertest_apir   XMLJSONassertNotInr/   
object_urir1   s      r2   test_stat_outputTestStat.test_stat_outputG   s&   ""D"1J^^VT*%56d^KFMM*..&)MM"F+ $	+//	)&/)62==K,,,&/
mmM6*
mm%v.
mm$f-
mmM6*
/MM#V,MM/6*MM'6"r5   c                    U R                  SS9nU R                  SS[        U5      /SS9nU R                  S[	        U5      5        U R                  SS[        US5      /SS	S
9nU R                  S[	        U5      5        g )Nr!   r7   -qr&   Tr'   r   junk   )r(   expected_status)r*   r,   r9   assertEquallenr@   s      r2   test_minus_q_statTestStat.test_minus_q_stati   s    ""D"1J^^T64
+;<*.  0FQF$^^	vtJ/0  F 	QF$r5   c                 p    U R                  / SQSS9  U R                  / SQSS9  U R                  / SQSS9  g )N)rE   r&   zgs://rG   )rH   )rE   r&   zgs://bucket/object)rE   r&   zfile://tmp/abc)r,   )r/   s    r2   test_stat_of_non_object_uri$TestStat.test_stat_of_non_object_urit   s5    NN*AN>NN7NKNN3QNGr5   c                     U R                  5       nU R                  USSS9  U R                  S[        US5      [        US5      /SSSS9u  p#U R	                  [
        [        US5      -  U5        U R	                  S	[        US5      -  U5        g )
N
notmissingr!   r"   r$   r#   r&   missingrG   TrH   r(   return_stderr%s:CreateBucketr*   r,   r9   r.   r   r/   r"   r1   stderrs       r2   test_stat_one_missingTestStat.test_stat_one_missingy       ""$J".#  % ^^		j)	$	j,	'	)  $ NF 	MM(4
I+FFOMM%$z<88&Ar5   c                     U R                  5       nU R                  USSS9  U R                  S[        US5      [        US5      /SSSS	9u  p#U R	                  [
        [        US5      -  U5        U R	                  S
[        US5      -  U5        g )NrQ   r!   rR   r&   zmissin*z
notmissin*rG   TrT   rV   rW   rY   s       r2   test_stat_one_missing_wildcard'TestStat.test_stat_one_missing_wildcard   r]   r5   c                     U R                  SS9nU R                  USSS9  [        U5      S S S-   nU R                  SU/5        [        U5      S S S	-   nU R                  SU/5        g )
Nzaaa-)bucket_name_prefixfoor!   rR   z?/foor&   z*/foo)rX   r*   r9   r,   )r/   r"   stat_stringstat_string2s       r2   test_stat_bucket_wildcard"TestStat.test_stat_bucket_wildcard   sx    ""f"=JNz"3B''1KNNFK()
#CR(72LNNFL)*r5   c                    ^ ^^^ T R                  5       nT R                  USSS9mT R                  USSS9m[        T5      S S S-   m[        [        SSS	9UUU U4S
 j5       nU" 5         g )Nfoo1r!   rR   foo2*   rG   triestimeout_secsc                     > TR                  ST/SS9n TR                  [        T5      U 5        TR                  [        T5      U 5        g )Nr&   Tr'   )r,   r.   r9   )r1   object1_uriobject2_urir/   re   s    r2   _Check13TestStat.test_stat_object_wildcard.<locals>._Check1   s@    ~~v{34~Hf
mmD%v.
mmD%v.r5   )rX   r*   r9   r   AssertionError)r/   r"   ru   rs   rt   re   s   `  @@@r2   test_stat_object_wildcard"TestStat.test_stat_object_wildcard   s    ""$J##z06-1 $ 3K ##z06-1 $ 3K {#CR(3.K >3/ 4/
 Ir5   z7S3 customer-supplied encryption keys are not supported.c                    U R                   [        R                  :X  a  [        R                  " S5      $ U R                  5       nU R                  US[        [        S9n[        SS[        4/5         U R                  S[        U5      /SS9nU R                  [        U5        U R                  [        U5        U R                  [        R                   " S	5      U5        S
S
S
5        U R                  S[        U5      /SS9nU R#                  [        U5        U R#                  [        U5        U R                  SU5        U R                  [        R                   " S	5      U5        g
! , (       d  f       N= f)z,Tests stat command with an encrypted object.3gsutil does not support encryption with the XML APIrc   r"   r$   r#   encryption_keyGSUtilr}   r&   Tr'   asciiN	encrypted)r<   r   r=   r   skiprX   r*   r   r   r   r,   r9   r.   r   r   r   decoder?   )r/   r"   rA   r1   s       r2   test_stat_encrypted_object#TestStat.test_stat_encrypted_object   sA    }}']]
?A A""$J""j/4,D2F # HJ 
*: 4 6 7 
8~~vtJ'78~Mf
mm0&9
mm3V<
mm3::7CVL
8 ^^VT*%56d^KF16:4f=MM+v&MM188A6J
8 
8s   2A.E((
E6c                   ^ ^^^^ T R                   [        R                  :X  a  [        R                  " S5      $ T R                  5       nT R                  US[        [        S9mT R                  US[        [        S9mT R                  US[        S9m[        T5      SS S	-   m[        S
S[        4/5         [        [        SSS9UUUU U4S j5       nU" 5         SSS5        g! , (       d  f       g= f)zCTests stat command with a mix of encrypted and unencrypted objects.r{   rj   r|   rk   foo3rR   Nrl   rm   r~   r}   rn   rG   ro   c                    > TR                  ST/SSS9u  pTR                  [        T5      U 5        TR                  [        U 5        TR                  [        U 5        TR                  [
        R                  " S5      U 5        TR                  [        T5      U 5        TR                  [        U 5        TR                  [        U 5        TR                  SU 5        TR                  [        R                  " S5      U 5        TR                  [        T5      U 5        TR                  [        U 5        TR                  [        U 5        g)zRuns stat and validates output.r&   T)r(   rU   r   r   N)r,   r.   r9   r   r   r   r   r?   r   r   r   r   r   )r1   rZ   rs   rt   object3_urir/   re   s     r2   _StatExpectMixedFTestStat.test_stat_encrypted_object_wildcard.<locals>._StatExpectMixed   s    (=6:6: ( < 	d;'02F;5v>5<<WEvNd;'05v>8&Ak6*5<<WEvNd;'02F;5v>r5   )r<   r   r=   r   r   rX   r*   r   r   r   r   r   r9   r   r   rw   )r/   r"   r   rs   rt   r   re   s   `  @@@@r2   #test_stat_encrypted_object_wildcard,TestStat.test_stat_encrypted_object_wildcard   s	   }}']]
?A A""$J##z06-E3G $ IK ##z06-E3G $ IK ##z06-E $ GK {#CR(3.K
 
*: 4 6 7 
8 ^115? ? 6?$ -
8 
8 
8s   7$C$$
C2 N)__name__
__module____qualname____firstlineno____doc__r	   r
   r3   rB   rK   rN   r[   r_   rg   rx   r   r   __static_attributes__r   r5   r2   r   r   /   sy    +AB45-	5 C
-  #D	%H
BB+& FGK HK4-r5   r   )(r   
__future__r   r   r   r   gslib.cs_api_mapr   gslib.exceptionr   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser	   r
   gslib.tests.utilr   r+   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   gslib.utils.retry_utilr   GsUtilIntegrationTestCaser   r   r5   r2   <module>r      sr     & %  ' ( 2 ' ' ? @ 8 0 1 5 < 9 5 < 9 5 < 9 1 < 1 < % (Lx11 Lr5   