
    s*                         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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  G d de	j*                        Zy)zTests for du command.    )absolute_import)print_function)division)unicode_literalsN)	SkipForS3)GenerationFromURI)ObjectToURI)UTF8)Retryc                        e Zd ZdZ fdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z ed      d        Zd Zd Zd Z xZS )TestDuz!Integration tests for du command.c                     t         t        |           t        j                  j                         | _        dt        j                  d<   y )N1
PYTHONUTF8)superr   setUposenvironcopy_old_environself	__class__s    &platform/gsutil/gslib/tests/test_du.pyr   zTestDu.setUp#   s1    	&$

)D"BJJ|    c                 T    t         t        |           | j                  t        _        y )N)r   r   tearDownr   r   r   r   s    r   r   zTestDu.tearDown(   s    	&$ """BJr   c                     | j                         }| j                  |dd      | j                  |dd      | j                  |dd      | j                  |dd      g}| j                  |d       ||fS )	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_subdirzTestDu._create_nested_subdir,   s    ""$JZ&4#+ 	 	- 	Z&4#* 	 	, 	Z&9#+ 	 	- 	Z&9#* 	 	,H 	
A.xr   c                 p      j                  d      t        t        dd       fd       } |        y )N   foor"         triestimeout_secsc                      j                  dt              gd      } j                  | dddt              d       y NduTreturn_stdoutr,   11  
	RunGsUtilsuriassertEqualstdoutobj_urir   s    r   _Checkz"TestDu.test_object.<locals>._CheckC   s7    ~~tT']34~Hf
v4=ABr   r%   r   AssertionErrorr   r@   r?   s   ` @r   test_objectzTestDu.test_object@   s:    0G
>3C 4C Hr   c                       j                          j                  d      t        t        dd       fd       } |        y )Nr*   r    r"   r,   r-   r.   c                      j                  dt              gd      } j                  | dddt              d       y r2   r9   )r>   r    r?   r   s    r   r@   z"TestDu.test_bucket.<locals>._CheckN   s8    ~~tT*%56d~Kf
v4=ABr   r$   r%   r   rB   )r   r@   r    r?   s   ` @@r   test_bucketzTestDu.test_bucketJ   sJ    ""$J:GG
>3C 4C Hr   c                 v      j                         \  t        t        dd       fd       } |        y)zBTests that subdirectory sizes are correctly calculated and listed.r,   r-   r.   c                     j                  dt              gd      } j                  t        | j	                               t        dddt        d         dddt        d	         dddt        d
         dddt        d         dddt              ddddt              dg             y )Nr3   Tr4      r6   r7   r   r#   r-      r,   	      /sub1材/sub2/   	   /sub1材/r:   r;   assertSetEqualset
splitlinesr>   r    r'   r   s    r   r@   z#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   rB   r   r@   r    r'   s   ` @@r   test_subdirszTestDu.test_subdirsU   s:    557J >3 4 Hr   c                       j                         } j                  |d       j                  |d      t        t        dd       fd       } |        y)	z6Tests running du with multiple command line arguments.r*   rF      foo2r,   r-   r.   c                      j                  dt              t              gd      } j                  t        | j	                               t        dddt              dddt              g             y )Nr3   Tr4   r,   r6   r7   r#   rR   )r>   obj_uri1obj_uri2r   s    r   r@   z&TestDu.test_multi_args.<locals>._Checkp   so    ~~hh
0  Ff

f!
"
X/X/ r   NrH   )r   r    r@   r]   r^   s   `  @@r   test_multi_argszTestDu.test_multi_argsj   s]    ""$J  J HH  J IH
>3 4 Hr   c                       j                          j                  d       j                  d      t        t        dd       fd       } |        y)	z)Tests total size listing via the -c flag.r*   rF      zebrar,   r-   r.   c                      j                  ddt              gd      } j                  t        | j	                               t        dddt              dddt              d	d
z  g             y )Nr3   z-cTr4   r,   r6   r7   rL   %-11s  total   rR   r>   r    r]   r^   r   s    r   r@   z!TestDu.test_total.<locals>._Check   ss    ~~tT4
+;<,0  2f

f!
"
X/X/q  r   NrH   r   r@   r    r]   r^   s   ` @@@r   
test_totalzTestDu.test_total}   ]    ""$J  J HH  J JH
>3	 4	 Hr   c                 p      j                  d      t        t        dd       fd       } |        y )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr+   r,   r-   r.   c                      j                  ddt              gd      } j                  | dddt              d       y )	Nr3   z-hTr4   z2 KiBr6   r7   r8   r9   r=   s    r   r@   z*TestDu.test_human_readable.<locals>._Check   s9    ~~tT4=9~Nf
vgGHr   rA   rC   s   ` @r   test_human_readablezTestDu.test_human_readable   s:    5G
>3I 4I Hr   c                       j                         \  } j                         \  }t        t        dd       fd       } |        y)z'Tests summary listing with the -s flag.r,   r-   r.   c                      j                  ddt              t              gd      } j                  t        | j	                               t        dddt              dddt              g             y Nr3   z-sTr4   rP   r6   r7   rR   )r>   bucket_uri1bucket_uri2r   s    r   r@   z#TestDu.test_summary.<locals>._Check   sz    ~~tK(  f 
f!
"
k!23k!23 r   NrW   )r   _r@   ro   rp   s   `  @@r   test_summaryzTestDu.test_summary   sK    //1NK//1NK >3
 4
 Hr   c                       j                         \  }} j                         \  }}t        |d      t        |d      t        t        dd       fd       } |        y)z9Tests summary listing with the -s flag on a subdirectory.u   sub1材r,   r-   r.   c            	          j                  ddgd      } j                  t        | j                               t        ddddddg             y rn   )r:   rS   rT   rU   )r>   r   subdir1subdir2s    r   r@   z*TestDu.test_subdir_summary.<locals>._Check   s`    ~~tT7G<,0  2f

f!
"
)) r   N)r(   r;   r   rB   )r   ro   rq   rp   r@   ru   rv   s   `    @@r   test_subdir_summaryzTestDu.test_subdir_summary   sc    //1NK//1NK;	*G;	*G >3 4 Hr   z#S3 lists versions in reverse order.c                      j                          j                  dd       j                  ddt                    t        t        dd       fd	       } |        t        t        dd       fd
       } |        y)z,Tests listing all versions with the -a flag.foor*   r   r[   )r    r!   r"   gs_idempotent_generationr,   r-   r.   c                      j                  dt              gd      } j                  | dddt              d       y )Nr3   Tr4   r#   r6   r7   r8   r9   )r>   r    object_uri2r   s    r   _Check1z&TestDu.test_versioned.<locals>._Check1   s9    ~~tT*%56d~Kf
v43DEFr   c                     j                  ddt              gd      } j                  t        | j	                               t        dddt              dj
                  d	ddt              dj
                  g             y )
Nr3   z-aTr4   r,   r6   r7   #r#   )r:   r;   rS   rT   rU   
generation)r>   r    object_uri1r|   r   s    r   _Check2z&TestDu.test_versioned.<locals>._Check2   s}    ~~tT4
+;<,0  2f

f!
"
 !4#4k6L6LM !4#4k6L6LM r   N)CreateVersionedBucketr%   urigenr   rB   )r   r}   r   r    r   r|   s   `  @@@r   test_versionedzTestDu.test_versioned   s     ++-J##z05-3 $ 5K ##!'!4	 $ 6K >3G 4G I >3 4 Ir   c                       j                          j                  d       j                  d      t        t        dd       fd       } |        y)	z,Tests outputting 0-endings with the -0 flag.r*   rF   ra   r,   r-   r.   c                      j                  ddt              gd      } j                  t        | j	                  d            t        dddt              d	ddt              d
dz  dg             y )Nr3   z-0cTr4    r,   r6   r7   rL   rc   rd    )r:   r;   rS   rT   splitre   s    r   r@   z(TestDu.test_null_endings.<locals>._Check   su    ~~tUD,<=,0  2f

fll4 
!
X/X/q " r   NrH   rf   s   ` @@@r   test_null_endingszTestDu.test_null_endings   rh   r   c                 v      j                         \  t        t        dd       fd       } |        y)z3Tests exclude pattern excluding certain file paths.r,   r-   r.   c                  >   j                  dddddt              gd      } j                  t        | j	                               t        ddd	t        d
         ddd	t        d         ddd	t              dddd	t              dg             y )Nr3   z-ez*sub2/five*u   *sub1材/fourTr4   rL   r6   r7   r   r#   r,   rO   rN   rQ   rR   rV   s    r   r@   z$TestDu.test_excludes.<locals>._Check  s    ~~}dO
  f 
f!
"
Xa[ 12Xa[ 12+,d:.>?&'j)9:	 r   NrW   rX   s   ` @@r   test_excludeszTestDu.test_excludes   s:    557J >3 4 Hr   c                       j                         \   j                  dj                  t                    t	        t
        dd       fd       } |        y)z&Tests file exclusion with the -X flag.u   *sub2/five*
*sub1材/fourr+   r,   r-   r.   c                  :   j                  ddt              gd      } j                  t        | j	                               t        dddt        d         d	ddt        d
         d	ddt              ddddt              dg             y )Nr3   z-XTr4   rL   r6   r7   r   r#   r,   rO   rN   rQ   rR   )r>   r    fpathr'   r   s    r   r@   z)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   rB   )r   r@   r    r   r'   s   ` @@@r   test_excludes_filezTestDu.test_excludes_file  s]    557J-44T:   <E >3
 4
 Hr   )__name__
__module____qualname____doc__r   r   r(   rD   rI   rY   r_   rg   rk   rr   rw   r   r   r   r   r   __classcell__)r   s   @r   r   r       sg    )#
# (	*&(** 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   