
    -                     |   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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 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jL                        Z'y)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                       e Zd ZdZ ed       ed      d               Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ed      d        Zd Zy)TestStatz#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                     | j                         }| j                  |d      }| j                  ||j                  dt        |             | j	                  d|j
                  gd      }| j                  d|       y)	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_outputz#TestStat.test_versioned_stat_output2   s     ++-J&&*t&LN 	"0"<"<#/5n/E  G
 ^^V^%H%HI*.  0F 	MM#V,    c                    | j                  d      }| j                  dt        |      gd      }| j                  |j                  |       | j                  d|       | j
                  dk(  r| j                  t        j                  k(  r%| j                  d|       | j                  d	|       n/| j                  t        j                  k(  r| j                  d
|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       y)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_urir0   s      r1   test_stat_outputz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"r3   c                    | j                  d      }| j                  ddt        |      gd      }| j                  dt	        |             | j                  ddt        |d      gdd	
      }| j                  dt	        |             y )Nr    r5   -qr%   Tr&   r   junk   )r'   expected_status)r)   r+   r7   assertEquallenr>   s      r1   test_minus_q_statzTestStat.test_minus_q_stati   s    ""D"1J^^T64
+;<*.  0FQF$^^	vtJ/0  F 	QF$r3   c                     | j                  g dd       | j                  g dd       | j                  g dd       y )N)rB   r%   zgs://rD   )rE   )rB   r%   zgs://bucket/object)rB   r%   zfile://tmp/abc)r+   )r.   s    r1   test_stat_of_non_object_uriz$TestStat.test_stat_of_non_object_urit   s5    NN*AN>NN7NKNN3QNGr3   c                 .   | j                         }| j                  |dd       | j                  dt        |d      t        |d      gddd      \  }}| j	                  t
        t        |d      z  |       | j	                  d	t        |d      z  |       y )
N
notmissingr    r!   r#   r"   r%   missingrD   TrE   r'   return_stderr%s:CreateBucketr)   r+   r7   r-   r   r.   r!   r0   stderrs       r1   test_stat_one_missingzTestStat.test_stat_one_missingy       ""$J".#  % ^^		j)	$	j,	'	)  $ NFF 	MM(4
I+FFOMM%$z<88&Ar3   c                 .   | j                         }| j                  |dd       | j                  dt        |d      t        |d      gddd	      \  }}| j	                  t
        t        |d      z  |       | j	                  d
t        |d      z  |       y )NrL   r    rM   r%   zmissin*z
notmissin*rD   TrO   rQ   rR   rT   s       r1   test_stat_one_missing_wildcardz'TestStat.test_stat_one_missing_wildcard   rW   r3   c                     | j                  d      }| j                  |dd       t        |      d d dz   }| j                  d|g       t        |      d d d	z   }| j                  d|g       y )
Nzaaa-)bucket_name_prefixfoor    rM   z?/foor%   z*/foo)rS   r)   r7   r+   )r.   r!   stat_stringstat_string2s       r1   test_stat_bucket_wildcardz"TestStat.test_stat_bucket_wildcard   sx    ""f"=JNz"3B''1KNNFK()
#CR(72LNNFL)*r3   c                       j                         } j                  |dd       j                  |dd      t              d d dz   t        t        dd	       fd
       } |        y )Nfoo1r    rM   foo2*   rD   triestimeout_secsc                      j                  dgd      } j                  t              |        j                  t              |        y )Nr%   Tr&   )r+   r-   r7   )r0   object1_uriobject2_urir.   r^   s    r1   _Check1z3TestStat.test_stat_object_wildcard.<locals>._Check1   s@    ~~v{34~Hf
mmD%v.
mmD%v.r3   )rS   r)   r7   r   AssertionError)r.   r!   rm   rk   rl   r^   s   `  @@@r1   test_stat_object_wildcardz"TestStat.test_stat_object_wildcard   s    ""$J##z06-1 $ 3K ##z06-1 $ 3K {#CR(3.K >3/ 4/
 Ir3   z7S3 customer-supplied encryption keys are not supported.c                    | j                   t        j                  k(  rt        j                  d      S | j                         }| j                  |dt        t              }t        ddt        fg      5  | j                  dt        |      gd      }| j                  t        |       | j                  t        |       | j                  t        j                   d	      |       d
d
d
       | j                  dt        |      gd      }| j#                  t        |       | j#                  t        |       | j                  d|       | j                  t        j                   d	      |       y
# 1 sw Y   xY w)z,Tests stat command with an encrypted object.3gsutil does not support encryption with the XML APIr\   r!   r#   r"   encryption_keyGSUtilrs   r%   Tr&   asciiN	encrypted)r:   r   r;   r   skiprS   r)   r   r   r   r+   r7   r-   r   r   r   decoder=   )r.   r!   r?   r0   s       r1   test_stat_encrypted_objectz#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   3A0E--E6c                      j                   t        j                  k(  rt        j                  d      S  j                         } j                  |dt        t               j                  |dt        t               j                  |dt              t              dd d	z   t        d
dt        fg      5  t        t        dd       fd       } |        ddd       y# 1 sw Y   yxY w)zCTests stat command with a mix of encrypted and unencrypted objects.rq   rb   rr   rc   foo3rM   Nrd   re   rt   rs   rf   rD   rg   c                     j                  dgdd      \  } }j                  t              |        j                  t        |        j                  t        |        j                  t        j                  d      |        j                  t              |        j                  t        |        j                  t        |        j                  d|        j                  t        j                  d      |        j                  t              |        j                  t        |        j                  t        |        y)zRuns stat and validates output.r%   T)r'   rP   ru   rv   N)r+   r-   r7   r   r   r   rx   r=   r   r   r   r   r   )r0   rU   rk   rl   object3_urir.   r^   s     r1   _StatExpectMixedzFTestStat.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>r3   )r:   r   r;   r   rw   rS   r)   r   r   r   r   r   r7   r   r   rn   )r.   r!   r~   rk   rl   r}   r^   s   `  @@@@r1   #test_stat_encrypted_object_wildcardz,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   >&C--C6N)__name__
__module____qualname____doc__r	   r
   r2   r@   rH   rJ   rV   rY   r`   ro   ry   r    r3   r1   r   r   /   sy    +AB45-	5 C
-  #D	%H
BB+& FGK HK4-r3   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   r7   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   gslib.utils.retry_utilr   GsUtilIntegrationTestCaser   r   r3   r1   <module>r      sr     & %  ' ( 2 ' ' ? @ 8 0 1 5 < 9 5 < 9 5 < 9 1 < 1 < % (Lx11 Lr3   