
    5\h(                        d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZ ddlZddlZdZedz   Z G d	 d
          Z G d de          Zd Z G d deej                  Z ej         eed           d           G d deej                              Zd Z G d deej                  Z G d deej                  Z d Z!e"dk    r ej#                     dS dS )z9Test largefile support on system where this makes sense.
    N)requires
bigmemtestrequires_resource)SHORT_TIMEOUT)socket_helper)TESTFNunlinkl    y* 2c                   *    e Zd Zd Zed             ZdS )LargeFileTestc                    t           j                            t                    rd}nd}|                     t          |          5 }t          j        |                                          t          j                 }|t          dz   k    r	 d d d            d S |dk    r|
                    d           |                    d           |                    t                     |
                    d           |                                 |                     t          j        |                                          t          j                 t          dz              d d d            d S # 1 swxY w Y   d S )Nr+bzw+b   r      z   a)ospathexistsr   openfstatfilenostatST_SIZEsizewriteseekflushassertEqual)selfmodefcurrent_sizes       =/opt/python-3.11.14/usr/lib/python3.11/test/test_largefile.pysetUpzLargeFileTest.setUp   s   7>>&!! 	DDDYYvt$$ 	I8AHHJJ//=LtAv%%	I 	I 	I 	I 	I 	I 	I 	I
 q  FF1IIIFF4LLLGGDMMMGGIIIRXahhjj11$,?aHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   AE*CE**E.1E.c                    |                      t          d          5  	 d d d            n# 1 swxY w Y   t          j        t                    t          j                 dk    s|                     d          t          t                     d S )Nwbr   z0File was not truncated by opening with mode "wb")r   r   r   r   r   failureExceptionr	   TESTFN2)clss    r#   tearDownClasszLargeFileTest.tearDownClass-   s    XXfd## 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	wvt|,11&& (8 9 9 9ws   *..N)__name__
__module____qualname__r$   classmethodr*        r#   r   r      sA        I I I(   [  r0   r   c                   ^    e Zd ZdZ eedd          d             Zd Zd Zd Z	d	 Z
d
 ZdS )TestFileMethodszWTest that each file function works as expected for large
    (i.e. > 2 GiB) files.
       F)r   memusedry_runc                 H   |                      t          d          5 }|                     t          |                                          t
          dz              |                     |                                t
          dz              d d d            d S # 1 swxY w Y   d S )Nrbr   )r   r   r   lenreadr   tell)r   _sizer!   s      r#   test_large_readzTestFileMethods.test_large_read>   s     YYvt$$ 	1S]]D1H555QVVXXtax000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   A.BBBc                     |                      t          j        t                    t          j                 t
          dz              d S )Nr   )r   r   r   r   r   r   )r   s    r#   test_osstatzTestFileMethods.test_osstatE   s1    6Q?????r0   c                    |                      t          d          5 }|                     |                                d           |                     |                    d          d           |                     |                                d           |                    d           |                     |                                d           |                    dd           |                     |                                d           |                    d           |                     |                                d           |                    dd           |                     |                                d           |                    dd           |                     |                                d           |                    dd           |                     |                                d           |                    dd           |                     |                                t          dz   dz              |                    dd           |                     |                                t          dz   d	z
             |                    t           dz
  d           |                     |                                d           |                    t                     |                     |                                t                     |                     |                    d          d
           |                    t           dz
  d           |                     |                    d          d           |                     |                                d           d d d            d S # 1 swxY w Y   d S )Nr7   r   r   r   *   T   r3   
   r   )r   r   r   r:   r9   r   r   r   r!   s     r#   test_seek_readzTestFileMethods.test_seek_readH   s4   YYvt$$ 	*QVVXXq)))QVVAYY---QVVXXq)))FF1IIIQVVXXq)))FF1aLLLQVVXXq)))FF2JJJQVVXXr***FF2qMMMQVVXXr***FF2qMMMQVVXXr***FF1aLLLQVVXXr***FF1aLLLQVVXXtax!|444FF3NNNQVVXXtax"}555FFD57AQVVXXq)))FF4LLLQVVXXt,,,QVVAYY---FFD57AQVVAYY---QVVXXq)))9	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   N%OOOc                    |                      t          d          5 }|                     t          j        |                                dd          d           |                     t          j        |                                dd          d           |                     t          j        |                                dd          d           |                     t          j        |                                dd          d           |                     t          j        |                                dd          t          dz   dz              |                     t          j        |                                dd          t          dz   dz
             |                     t          j        |                                t           dz
  d          d           |                     t          j        |                                t          d          t                     |                     |                    d          d	           d d d            d S # 1 swxY w Y   d S )
Nr7   r   r@   r   rA   r3   rB   rC   r   )r   r   r   r   lseekr   r   r9   rD   s     r#   
test_lseekzTestFileMethods.test_lseekg   s   YYvt$$ 
	.RXahhjj!Q77;;;RXahhjj"a88"===RXahhjj"a88"===RXahhjj!Q77<<<RXahhjj!Q77aBBBRXahhjj#q9946"9EEERXahhjj4%'1==qAAARXahhjj$::DAAAQVVAYY---
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	. 
	.s   H3II #I c                    |                      t          d          5 }t          |d          st          j        d          |                    dd           |                     |                                t          dz              t          dz
  }|                    |           |	                                 |                     |                                |           |                    dd           |                     |                                |           |dz  }|                    d           |	                    |           |                     |                                d           |                    dd           |                     |                                |           |                    d           |	                    d           |                     |                                d           |                    d           |                     t          |                                          d           d d d            d S # 1 swxY w Y   d S )	Nr   truncatez.open().truncate() not available on this systemr   r3   r   rC   r@   )r   r   hasattrunittestSkipTestr   r   r:   r   rJ   r8   r9   )r   r!   newsizes      r#   test_truncatezTestFileMethods.test_truncatet   s2   YYvu%% 	/1j)) :' )9 : : :FF1aLLLQVVXXtAv...RiGFF7OOOJJLLLQVVXXw///FF1aLLLQVVXXw/// qLGFF2JJJJJwQVVXXr***FF1aLLLQVVXXw/// FF1IIIJJqMMMQVVXXq)))FF1IIIS]]A...9	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   H5II"%I"c                     dD ]q}|                      t          d          5 }|                    |           |                     |                                           d d d            n# 1 swxY w Y   rd S )N)il               r7   )r   r   r   
assertTrueseekable)r   posr!   s      r#   test_seekablezTestFileMethods.test_seekable   s     - 	. 	.C64(( .As

---. . . . . . . . . . . . . . .	. 	.s   =A))A-	0A-	N)r+   r,   r-   __doc__r   r   r<   r>   rE   rH   rO   rU   r/   r0   r#   r2   r2   7   s          ZT!U3331 1 431@ @ @* * *>. . ./ / />. . . . .r0   r2   c                       fd}|S )Nc                       fd}|S )Nc                  4   t          t          d          st          j        d          t          j        t
          j                                                j        k     r-t          dz  dz            }t          j        d| d           | i |S )N
disk_usagezrequires shutil.disk_usagei   z	required z MiB of free disk space)
rK   shutilrL   rM   rZ   r   r   realpathfreeint)argskwargshsizefunr   requireds      r#   wrapperz6skip_no_disk_space.<locals>.decorator.<locals>.wrapper   s    6<00 F'(DEEE !1!1$!7!788=HHHtOd233'>>>>@ @ @3''''r0   r/   )rb   rd   r   rc   s   ` r#   	decoratorz%skip_no_disk_space.<locals>.decorator   s.    	( 	( 	( 	( 	( 	( 	( r0   r/   )r   rc   re   s   `` r#   skip_no_disk_spacerf      s*    	 	 	 	 	 	 r0   c                       e Zd Z eej                  Z eeedz             e	d          d                         Z
dS )TestCopyfile      @cpuc                 *   t           j                            t                    }t	          j        t          t                     |                     t           j                            t                    |           t          t          d          5 }|                     |	                    d          d           |
                    |dz
             |                     |	                                d           d d d            d S # 1 swxY w Y   d S )Nr7         z           a)r   r   getsizer   r[   copyfiler(   r   r   r9   r   )r   r   r!   s      r#   test_itzTestCopyfile.test_it   s   
 wv&&(((114888'4   	=AQVVAYY(<===FF4!8QVVXX';<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   A*DDDN)r+   r,   r-   staticmethodior   rf   r   r   r   rq   r/   r0   r#   rh   rh      sh        <  D s
++u	= 	=  ,+	= 	= 	=r0   rh   sendfilezsendfile not supportedc                        e Zd Z eej                  ZeZ fdZ fdZ	d Z
 eeedz             ed          d                         Z xZS )TestSocketSendfilec                 V    t                                                       d | _        d S N)superr$   threadr   	__class__s    r#   r$   zTestSocketSendfile.setUp   s    r0   c                     t                                                       | j        (| j                            | j                   d | _        d S d S rx   )ry   tearDownrz   jointimeoutr{   s    r#   r~   zTestSocketSendfile.tearDown   sL    ;"KT\***DKKK #"r0   c                      fd}t          j                    |                     j                   t          j        ||f           _         j                                                                          d S )Nc                    | 5  |                                  \  }}|                    j                   |5  t          t          d          5 }                    j                   	 |                    d          }|s$	 d d d            d d d            d d d            d S |                    |           Q# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   Ti   )accept
settimeoutr   r   r(   waitrecvr   )sockconn_r!   chunkeventr   s        r#   runz*TestSocketSendfile.tcp_server.<locals>.run   s    	' 	'++--a--- ' '4.. '!JJt|,,,' $		% 0 0$ #"' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'sd   4C*C4B;CC*%B;;B??CB?CC*C	C*C	C**C.1C.)targetr_   )	threadingEventr   r   Threadrz   startset)r   r   r   r   s   `  @r#   
tcp_serverzTestSocketSendfile.tcp_server   s    
	' 
	' 
	' 
	' 
	' 
	' !!%%%&cAAA		r0   ri   rj   c                    t          j                    }t          j        d|f          5 }|                     |           t          j        d|f          5 }t          t          d          5 }|                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 	                                 t          j                            t                    }|                     t          j                            t                    |           t          t          d          5 }|                     |                    d          d           |                    |dz
             |                     |                                d           d d d            d S # 1 swxY w Y   d S )N z	127.0.0.1r7   rl   rm   rn   )r   find_unused_portsocketcreate_serverr   create_connectionr   r   rt   r~   r   r   ro   r   r(   r9   r   )r   portr   clientr!   r   s         r#   rq   zTestSocketSendfile.test_it   st    -//!2t*-- 	'OOD!!!);*=>> '&&$'' '1OOA&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 	wv&&114888'4   	=AQVVAYY(<===FF4!8QVVXX';<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=sl   ,B<B%,BB%BB%BB%B<%B)	)B<,B)	-B<<C C A*GG
G)r+   r,   r-   rr   rs   r   r   r   r$   r~   r   rf   r   r   r   rq   __classcell__)r|   s   @r#   rv   rv      s        <  DG          * s
++u= =  ,+= = = = =r0   rv   c                     	 dd l } |                      | j        | j                   n# t          t          f$ r Y nw xY wt
          j        d d         dk    st
          j        dk    r't          ddt          t                    z             d S t          t          dd          }	 |                    d	           |                    d
           |                                 n)# t          t           f$ r t#          j        d          w xY w	 |                                 t)          t                     d S # |                                 t)          t                     w xY w)Nr      windarwin	largefilez-test requires %s bytes and a long time to runr&   )	bufferingrQ      xz*filesystem does not have largefile support)signalSIGXFSZSIG_IGNImportErrorAttributeErrorsysplatformr   strr   r   r   r   r   r   OSErrorOverflowErrorrL   rM   closer	   )r   r!   s     r#   setUpModuler      so    	fnfn5555(    |BQB5  CLH$<$<@3t99L	N 	N 	N 	N 	N +++	FF:GGDMMMGGIIII' 	9 	9 	9# %8 9 9 9	9 
 GGIII6NNNNN GGIII6NNNNs*   $' ;;%>C$ #D8 $&D

D8 8*E"c                   .    e Zd Z eej                  ZdS )CLargeFileTestN)r+   r,   r-   rr   rs   r   r/   r0   r#   r   r     s        <  DDDr0   r   c                   .    e Zd Z eej                  ZdS )PyLargeFileTestN)r+   r,   r-   rr   pyior   r/   r0   r#   r   r     s        <	""DDDr0   r   c                  V    t          t                     t          t                     d S rx   )r	   r   r(   r/   r0   r#   tearDownModuler      s    
6NNN
7OOOOOr0   __main__)$rV   r   r   r   rL   r   r[   r   test.supportr   r   r   r   r   test.support.os_helperr   r	   rs   _pyior   r   r(   r   r2   rf   TestCaserh   skipIfrK   rv   r   r   r   r   r+   mainr/   r0   r#   <module>r      sk    
			  



        @ @ @ @ @ @ @ @ @ @ & & & & & & & & & & & & 1 1 1 1 1 1 1 1 				     
3,       @b. b. b. b. b.m b. b. b.J  = = = = ==("3 = = =& WWR,,,.FGG3= 3= 3= 3= 3=(9 3= 3= HG3=l! ! !H! ! ! ! !_h&7 ! ! !# # # # #ox'8 # # #  
 zHMOOOOO r0   