
    s*                         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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\	R*                  5      rg)zTests for du command.    )absolute_import)print_function)division)unicode_literalsN)	SkipForS3)GenerationFromURI)ObjectToURI)UTF8)Retryc                      ^  \ rS rSrSrU 4S jrU 4S jrS rS rS r	S r
S	 rS
 rS rS rS r\" S5      S 5       rS rS rS rSrU =r$ )TestDu    z!Integration tests for du command.c                    > [         [        U ]  5         [        R                  R                  5       U l        S[        R                  S'   g )N1
PYTHONUTF8)superr   setUposenvironcopy_old_environself	__class__s    &platform/gsutil/gslib/tests/test_du.pyr   TestDu.setUp#   s1    	&$

)D"BJJ|    c                 T   > [         [        U ]  5         U R                  [        l        g )N)r   r   tearDownr   r   r   r   s    r   r   TestDu.tearDown(   s    	&$ """BJr   c           	          U R                  5       nU R                  USSS9U R                  USSS9U R                  USSS9U R                  USSS9/nU R                  US5        X4$ )	z>Creates a nested subdirectory for use by tests in this module.u   sub1材/fives   5five
bucket_uriobject_namecontentsu   sub1材/fours   fouru   sub1材/sub2/fiveu   sub1材/sub2/four   )CreateBucketCreateObjectAssertNObjectsInBucket)r   r#   obj_uriss      r   _create_nested_subdirTestDu._create_nested_subdir,   s    ""$JZ&4#+ 	 	- 	Z&4#* 	 	, 	Z&9#+ 	 	- 	Z&9#* 	 	,H 	
A.r   c                 f   ^ ^ T R                  SS9m[        [        SSS9UU 4S j5       nU" 5         g )N   foor%         triestimeout_secsc                     > TR                  S[        T5      /SS9n TR                  U S<S S[        T5      < S35        g NduTreturn_stdoutr0   11  
	RunGsUtilsuriassertEqualstdoutobj_urir   s    r   _Check"TestDu.test_object.<locals>._CheckC   s7    ~~tT']34~Hf
v4=ABr   r(   r   AssertionErrorr   rD   rC   s   ` @r   test_objectTestDu.test_object@   s:    0G
>3C 4C Hr   c                    ^ ^^ T R                  5       mT R                  TSS9m[        [        SSS9UUU 4S j5       nU" 5         g )Nr.   r#   r%   r0   r1   r2   c                     > TR                  S[        T5      /SS9n TR                  U S<S S[        T5      < S35        g r6   r=   )rB   r#   rC   r   s    r   rD   "TestDu.test_bucket.<locals>._CheckN   s8    ~~tT*%56d~Kf
v4=ABr   r'   r(   r   rG   )r   rD   r#   rC   s   ` @@r   test_bucketTestDu.test_bucketJ   sJ    ""$J:GG
>3C 4C Hr   c                 r   ^ ^^ T R                  5       u  mm[        [        SSS9UUU 4S j5       nU" 5         g)zBTests that subdirectory sizes are correctly calculated and listed.r0   r1   r2   c                    > TR                  S[        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        TS   5      < 3S<S S[        TS	   5      < 3S<S S[        TS
   5      < 3S<S S[        TS   5      < 3S<S S[        T5      < S3S<S S[        T5      < S3/5      5        g )Nr7   Tr8      r:   r;   r   r&   r1      r0   	      /sub1材/sub2/   	   /sub1材/r>   r?   assertSetEqualset
splitlinesrB   r#   r*   r   s    r   rD   #TestDu.test_subdirs.<locals>._CheckZ   s    ~~tT*%56d~Kf

f!
"
Xa[ 12Xa[ 12Xa[ 12Xa[ 12+,d:.>?&($z*:; 	r   Nr+   r   rG   r   rD   r#   r*   s   ` @@r   test_subdirsTestDu.test_subdirsU   s:    557J >3 4 Hr   c                    ^ ^^ T R                  5       nT R                  USS9mT R                  USS9m[        [        SSS9UUU 4S j5       nU" 5         g)	z6Tests running du with multiple command line arguments.r.   rL      foo2r0   r1   r2   c                     > TR                  S[        T5      [        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        T5      < 3S<S S[        T5      < 3/5      5        g )Nr7   Tr8   r0   r:   r;   r&   rZ   )rB   obj_uri1obj_uri2r   s    r   rD   &TestDu.test_multi_args.<locals>._Checkp   so    ~~hh
0  Ff

f!
"
X/X/ r   NrO   )r   r#   rD   rg   rh   s   `  @@r   test_multi_argsTestDu.test_multi_argsj   s]    ""$J  J HH  J IH
>3 4 Hr   c                    ^ ^^^ T R                  5       mT R                  TSS9mT R                  TSS9m[        [        SSS9UUUU 4S j5       nU" 5         g)	z)Tests total size listing via the -c flag.r.   rL      zebrar0   r1   r2   c                     > TR                  SS[        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        T5      < 3S<S S[        T5      < 3S	S
-  /5      5        g )Nr7   z-cTr8   r0   r:   r;   rT   %-11s  total   rZ   rB   r#   rg   rh   r   s    r   rD   !TestDu.test_total.<locals>._Check   ss    ~~tT4
+;<,0  2f

f!
"
X/X/q  r   NrO   r   rD   r#   rg   rh   s   ` @@@r   
test_totalTestDu.test_total}   ]    ""$J  J HH  J JH
>3	 4	 Hr   c                 f   ^ ^ T R                  SS9m[        [        SSS9UU 4S j5       nU" 5         g )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr/   r0   r1   r2   c                     > TR                  SS[        T5      /SS9n TR                  U S<S S[        T5      < S35        g )	Nr7   z-hTr8   z2 KiBr:   r;   r<   r=   rA   s    r   rD   *TestDu.test_human_readable.<locals>._Check   s9    ~~tT4=9~Nf
vgGHr   rF   rH   s   ` @r   test_human_readableTestDu.test_human_readable   s:    5G
>3I 4I Hr   c                    ^ ^^ T R                  5       u  mnT R                  5       u  mn[        [        SSS9UUU 4S j5       nU" 5         g)z'Tests summary listing with the -s flag.r0   r1   r2   c                     > TR                  SS[        T5      [        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        T5      < 3S<S S[        T5      < 3/5      5        g Nr7   z-sTr8   rX   r:   r;   rZ   )rB   bucket_uri1bucket_uri2r   s    r   rD   #TestDu.test_summary.<locals>._Check   sz    ~~tK(  f 
f!
"
k!23k!23 r   Nr`   )r   _rD   r   r   s   `  @@r   test_summaryTestDu.test_summary   sK    //1NK//1NK >3
 4
 Hr   c                    ^ ^^ T R                  5       u  pT R                  5       u  p2[        US5      m[        US5      m[        [        SSS9U UU4S j5       nU" 5         g)z9Tests summary listing with the -s flag on a subdirectory.u   sub1材r0   r1   r2   c            	         > TR                  SSTT/SS9n TR                  [        U R                  5       5      [        S<S ST< 3S<S ST< 3/5      5        g r~   )r>   r[   r\   r]   )rB   r   subdir1subdir2s    r   rD   *TestDu.test_subdir_summary.<locals>._Check   s`    ~~tT7G<,0  2f

f!
"
)) r   N)r+   r?   r   rG   )r   r   r   r   rD   r   r   s   `    @@r   test_subdir_summaryTestDu.test_subdir_summary   s_    //1NK//1NK;	*G;	*G >3 4 Hr   z#S3 lists versions in reverse order.c                 
  ^ ^^^ T R                  5       mT R                  TSSS9mT R                  TSS[        T5      S9m[        [        SSS9UUU 4S	 j5       nU" 5         [        [        SSS9UUUU 4S
 j5       nU" 5         g)z,Tests listing all versions with the -a flag.foor.   r"   re   )r#   r$   r%   gs_idempotent_generationr0   r1   r2   c                     > TR                  S[        T5      /SS9n TR                  U S<S S[        T5      < S35        g )Nr7   Tr8   r&   r:   r;   r<   r=   )rB   r#   object_uri2r   s    r   _Check1&TestDu.test_versioned.<locals>._Check1   s9    ~~tT*%56d~Kf
v43DEFr   c                  "  > TR                  SS[        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        T5      < STR
                  < 3S	<S S[        T5      < STR
                  < 3/5      5        g )
Nr7   z-aTr8   r0   r:   r;   #r&   )r>   r?   r[   r\   r]   
generation)rB   r#   object_uri1r   r   s    r   _Check2&TestDu.test_versioned.<locals>._Check2   s}    ~~tT4
+;<,0  2f

f!
"
 !4#4k6L6LM !4#4k6L6LM r   N)CreateVersionedBucketr(   urigenr   rG   )r   r   r   r#   r   r   s   `  @@@r   test_versionedTestDu.test_versioned   s     ++-J##z05-3 $ 5K ##!'!4	 $ 6K >3G 4G I >3 4 Ir   c                    ^ ^^^ T R                  5       mT R                  TSS9mT R                  TSS9m[        [        SSS9UUUU 4S j5       nU" 5         g)	z,Tests outputting 0-endings with the -0 flag.r.   rL   rm   r0   r1   r2   c                     > TR                  SS[        T5      /SS9n TR                  [        U R	                  S5      5      [        S<S S[        T5      < 3S	<S S[        T5      < 3S
S-  S/5      5        g )Nr7   z-0cTr8    r0   r:   r;   rT   ro   rp    )r>   r?   r[   r\   splitrq   s    r   rD   (TestDu.test_null_endings.<locals>._Check   su    ~~tUD,<=,0  2f

fll4 
!
X/X/q " r   NrO   rs   s   ` @@@r   test_null_endingsTestDu.test_null_endings   rv   r   c                 r   ^ ^^ T R                  5       u  mm[        [        SSS9UUU 4S j5       nU" 5         g)z3Tests exclude pattern excluding certain file paths.r0   r1   r2   c                  H  > TR                  SSSSS[        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S	[        TS
   5      < 3S<S S	[        TS   5      < 3S<S S	[        T5      < S3S<S S	[        T5      < S3/5      5        g )Nr7   z-ez*sub2/five*u   *sub1材/fourTr8   rT   r:   r;   r   r&   r0   rW   rV   rY   rZ   r^   s    r   rD   $TestDu.test_excludes.<locals>._Check  s    ~~}dO
  f 
f!
"
Xa[ 12Xa[ 12+,d:.>?&'j)9:	 r   Nr`   ra   s   ` @@r   test_excludesTestDu.test_excludes   s:    557J >3 4 Hr   c                    ^ ^^^ T R                  5       u  mmT R                  SR                  [        5      S9m[	        [
        SSS9UUUU 4S j5       nU" 5         g)z&Tests file exclusion with the -X flag.u   *sub2/five*
*sub1材/fourr/   r0   r1   r2   c                  D  > TR                  SST[        T5      /SS9n TR                  [        U R	                  5       5      [        S<S S[        TS   5      < 3S	<S S[        TS
   5      < 3S	<S S[        T5      < S3S<S S[        T5      < S3/5      5        g )Nr7   z-XTr8   rT   r:   r;   r   r&   r0   rW   rV   rY   rZ   )rB   r#   fpathr*   r   s    r   rD   )TestDu.test_excludes_file.<locals>._Check  s    ~~ud:.
/t  Ef

f!
"
Xa[ 12Xa[ 12+,d:.>?&'j)9:	 r   N)r+   CreateTempFileencoder
   r   rG   )r   rD   r#   r   r*   s   ` @@@r   test_excludes_fileTestDu.test_excludes_file  s]    557J-44T:   <E >3
 4
 Hr   )r   )__name__
__module____qualname____firstlineno____doc__r   r   r+   rI   rP   rb   rj   rt   rz   r   r   r   r   r   r   r   __static_attributes____classcell__)r   s   @r   r   r       sl    )#
# (	*&(** 23  4 D(, r   r   )r   
__future__r   r   r   r   r   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser   gslib.tests.utilr   r   r	   r?   gslib.utils.constantsr
   gslib.utils.retry_utilr   GsUtilIntegrationTestCaser    r   r   <module>r      sB     & %  ' 	 ' ' ? 8 0 & (FX// Fr   