
    <e`(                        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
 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)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       */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(   [  r/   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?????r/   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 )Nr6   r   r   r   *   T   r2   
   r   )r   r   r   r9   r8   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 )
Nr6   r   r?   r   r@   r2   rA   rB   r   )r   r   r   r   lseekr   r   r8   rC   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   r2   r   rB   r?   )r   r   hasattrunittestSkipTestr   r   r9   r   rI   r7   r8   )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               r6   )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=   rD   rG   rN   rT   r.   r/   r"   r1   r1   7   s          ZT!U3331 1 431@ @ @* * *>. . ./ / />. . . . .r/   r1   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)
rJ   shutilrK   rL   rY   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''''r/   r.   )ra   rc   r   rb   s   ` r"   	decoratorz%skip_no_disk_space.<locals>.decorator   s.    	( 	( 	( 	( 	( 	( 	( r/   r.   )r   rb   rd   s   `` r"   skip_no_disk_spacere      s*    	 	 	 	 	 	 r/   c                   ^    e Zd Z eej                  Z eeedz            d             Z	dS )TestCopyfile      @c                 *   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 )Nr6         z           a)r   r   getsizer   rZ   copyfiler'   r   r   r8   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   re   r   r   ro   r.   r/   r"   rg   rg      sR        <  D s
++	= 	= ,+	= 	= 	=r/   rg   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            d             Z xZS )TestSocketSendfilec                 V    t                                                       d | _        d S N)superr#   threadr   	__class__s    r"   r#   zTestSocketSendfile.setUp   s    r/   c                     t                                                       | j        (| j                            | j                   d | _        d S d S rv   )rw   tearDownrx   jointimeoutry   s    r"   r|   zTestSocketSendfile.tearDown   sL    ;"KT\***DKKK #"r/   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~   Threadrx   startset)r   r   r   r   s   `  @r"   
tcp_serverzTestSocketSendfile.tcp_server   s    
	' 
	' 
	' 
	' 
	' 
	' !!%%%&cAAA		r/   rh   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.1r6   rj   rk   rl   )r   find_unused_portsocketcreate_serverr   create_connectionr   r   rr   r|   r   r   rm   r   r'   r8   r   )r   portr   clientr    r   s         r"   ro   zTestSocketSendfile.test_it   sr   -//!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,   rp   rq   r   r   r~   r#   r|   r   re   r   r   ro   __classcell__)rz   s   @r"   rt   rt      s        <  DG          * s
++= = ,+= = = = =r/   rt   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%   )	bufferingrP      xz*filesystem does not have largefile support)signalSIGXFSZSIG_IGNImportErrorAttributeErrorsysplatformr   strr   r   r   r   r   r   OSErrorOverflowErrorrK   rL   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,   rp   rq   r   r.   r/   r"   r   r     s        <  DDDr/   r   c                   .    e Zd Z eej                  ZdS )PyLargeFileTestN)r*   r+   r,   rp   pyior   r.   r/   r"   r   r     s        <	""DDDr/   r   c                  V    t          t                     t          t                     d S rv   )r   r   r'   r.   r/   r"   tearDownModuler     s    
6NNN
7OOOOOr/   __main__)#rU   r   r   r   rK   r   rZ   r   test.supportr   r   r   r   test.support.os_helperr   r   rq   _pyior   r   r'   r   r1   re   TestCaserg   skipIfrJ   rt   r   r   r   r   r*   mainr.   r/   r"   <module>r      se    
			  



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