
    daf(                        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j2                        Z ej6                   eed       d       G d deej2                               Zd Z G d deej2                        Z G d deej2                        Z d Z!e"dk(  r ejF                          yy)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y)LargeFileTestc                    t         j                  j                  t              rd}nd}| j	                  t        |      5 }t        j
                  |j                               t        j                     }|t        dz   k(  r
	 d d d        y |dk(  r|j                  d       |j                  d       |j                  t               |j                  d       |j                          | j                  t        j
                  |j                               t        j                     t        dz          d d d        y # 1 sw Y   y xY w)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       ./root/Python-3.12.4/Lib/test/test_largefile.pysetUpzLargeFileTest.setUp   s    77>>&!DDYYvt$ 	I88AHHJ/=LtAv%	I 	I
 q FF1IFF4LGGDMGGIRXXahhj1$,,?aH	I 	I 	Is   AD;
B(D;;Ec                     | j                  t        d      5  	 d d d        t        j                  t              t        j                     dk(  s| j                  d      t        t               y # 1 sw Y   WxY w)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# 		wwvt||,1&& (8 9 9w	 	s   A//A8N)__name__
__module____qualname__r$   classmethodr*        r#   r   r      s    I(  r0   r   c                   P    e Zd ZdZ eedd      d        Zd Zd Zd Z	d	 Z
d
 Zy)TestFileMethodszWTest that each file function works as expected for large
    (i.e. > 2 GiB) files.
       F)r   memusedry_runc                    | j                  t        d      5 }| j                  t        |j	                               t
        dz          | j                  |j                         t
        dz          d d d        y # 1 sw Y   y xY w)Nrbr   )r   r   r   lenreadr   tell)r   _sizer!   s      r#   test_large_readzTestFileMethods.test_large_read>   sa     YYvt$ 	1S]D1H5QVVXtax0	1 	1 	1s   AA88Bc                     | j                  t        j                  t              t        j                     t
        dz          y )Nr   )r   r   r   r   r   r   )r   s    r#   test_osstatzTestFileMethods.test_osstatE   s'    6Q?r0   c                 >   | j                  t        d      5 }| j                  |j                         d       | j                  |j	                  d      d       | j                  |j                         d       |j                  d       | j                  |j                         d       |j                  dd       | j                  |j                         d       |j                  d       | j                  |j                         d       |j                  dd       | j                  |j                         d       |j                  dd       | j                  |j                         d       |j                  dd       | j                  |j                         d       |j                  dd       | j                  |j                         t        dz   dz          |j                  dd       | j                  |j                         t        dz   d	z
         |j                  t         dz
  d       | j                  |j                         d       |j                  t               | j                  |j                         t               | j                  |j	                  d      d
       |j                  t         dz
  d       | j                  |j	                  d      d       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)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$ 	*QVVXq)QVVAY-QVVXq)FF1IQVVXq)FF1aLQVVXq)FF2JQVVXr*FF2qMQVVXr*FF2qMQVVXr*FF1aLQVVXr*FF1aLQVVXtax!|4FF3NQVVXtax"}5FFD57AQVVXq)FF4LQVVXt,QVVAY-FFD57AQVVAY-QVVXq)9	* 	* 	*s   K3LLc                 4   | j                  t        d      5 }| j                  t        j                  |j                         dd      d       | j                  t        j                  |j                         dd      d       | j                  t        j                  |j                         dd      d       | j                  t        j                  |j                         dd      d       | j                  t        j                  |j                         dd      t        dz   dz          | j                  t        j                  |j                         dd      t        dz   dz
         | j                  t        j                  |j                         t         dz
  d      d       | j                  t        j                  |j                         t        d      t               | j                  |j                  d      d	       d d d        y # 1 sw Y   y xY w)
Nr7   r   r@   r   rA   r3   rB   rC   r   )r   r   r   r   lseekr   r   r9   rD   s     r#   
test_lseekzTestFileMethods.test_lseekg   sm   YYvt$ 
	.RXXahhj!Q7;RXXahhj"a8"=RXXahhj"a8"=RXXahhj!Q7<RXXahhj!Q7aBRXXahhj#q946"9ERXXahhj4%'1=qARXXahhj$:DAQVVAY-
	. 
	. 
	.s   G.HHc                    | j                  t        d      5 }t        |d      st        j                  d      |j                  dd       | j                  |j                         t        dz          t        dz
  }|j                  |       |j                          | j                  |j                         |       |j                  dd       | j                  |j                         |       |dz  }|j                  d       |j                  |       | j                  |j                         d       |j                  dd       | j                  |j                         |       |j                  d       |j                  d       | j                  |j                         d       |j                  d       | j                  t        |j                               d       d d d        y # 1 sw Y   y xY w)	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   st   YYvu% 	/1j)'' )9 : :FF1aLQVVXtAv.RiGFF7OJJLQVVXw/FF1aLQVVXw/ qLGFF2JJJwQVVXr*FF1aLQVVXw/ FF1IJJqMQVVXq)FF1IS]A.9	/ 	/ 	/s   GG,,G5c                     dD ]Q  }| j                  t        d      5 }|j                  |       | j                  |j	                                d d d        S y # 1 sw Y   ^xY w)N)il               r7   )r   r   r   
assertTrueseekable)r   posr!   s      r#   test_seekablezTestFileMethods.test_seekable   sZ     - 	.C64( .As

-. .	.. .s   1AA!	N)r+   r,   r-   __doc__r   r   r<   r>   rE   rH   rO   rU   r/   r0   r#   r2   r2   7   s>     T!U31 41@*>./>.r0   r2   c                       fd}|S )Nc                       fd}|S )Nc                  0   t        t        d      st        j                  d      t        j                  t
        j                  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''(DEE  !1!1$!78==HHtOd23''w&=>@ @'''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                   j    e Zd Z eej
                        Z eeedz         e	d      d               Z
y)TestCopyfile      @cpuc                    t         j                  j                  t              }t	        j
                  t        t               | j                  t         j                  j                  t              |       t        t        d      5 }| j                  |j                  d      d       |j                  |dz
         | j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nr7         z           a)r   r   getsizer   r[   copyfiler(   r   r   r9   r   )r   r   r!   s      r#   test_itzTestCopyfile.test_it   s    
 wwv&(148'4  	=AQVVAY(<=FF4!8QVVX';<	= 	= 	=s   AC$$C-N)r+   r,   r-   staticmethodior   rf   r   r   r   rq   r/   r0   r#   rh   rh      s<     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                 0    t         |           d | _        y N)superr$   threadr   	__class__s    r#   r$   zTestSocketSendfile.setUp   s    r0   c                     t         |           | j                  -| j                  j                  | j                         d | _        y y rx   )ry   tearDownrz   jointimeoutr{   s    r#   r~   zTestSocketSendfile.tearDown   s:    ;;"KKT\\*DK #r0   c                       fd}t        j                         |j                   j                         t        j                  ||f       _         j
                  j                          j                          y )Nc                    | 5  | j                         \  }}|j                  j                         |5  t        t        d      5 }j                  j                         	 |j                  d      }|s	 d d d        d d d        d d d        y |j                  |       ?# 1 sw Y   nxY wd d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY w)Nr&   i   )accept
settimeoutr   r   r(   waitrecvr   )sockconn_r!   chunkeventr   s        r#   runz*TestSocketSendfile.tcp_server.<locals>.run   s     	'++-a- '4. '!JJt||, $		% 0$"' '	' 	' 	 ' ' ' ' '	' 	' 	'sF   1CB71B"7B7?CB""B+'B7.	C7C 	<CC)targetr_   )	threadingEventr   r   Threadrz   startset)r   r   r   r   s   `  @r#   
tcp_serverzTestSocketSendfile.tcp_server   sU    
	' !%&&cA		r0   ri   rj   c                 *   t        j                         }t        j                  d|f      5 }| j	                  |       t        j
                  d|f      5 }t        t        d      5 }|j                  |       d d d        d d d        d d d        | j                          t        j                  j                  t              }| j                  t        j                  j                  t              |       t        t        d      5 }| j                  |j                  d      d       |j!                  |dz
         | j                  |j                         d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   s>    --/!!2t*- 	'OOD!));*=> '&&$' '1OOA&''	'
 	wwv&148'4  	=AQVVAY(<=FF4!8QVVX';<	= 	=' '' '	' 	'	= 	=sH   )E=E1&E%8E1 E=AF	%E.*E11E:	6E==F	F)r+   r,   r-   rr   rs   r   r   r   r$   r~   r   rf   r   r   r   rq   __classcell__)r|   s   @r#   rv   rv      sQ     DG* s
+u=  ,=r0   rv   c                  r   	 dd l } | j                  | j                  | j                         t
        j                  d d dk(  st
        j                  dk(  rt        ddt        t              z         y t        t        dd      }	 |j                  d	       |j                  d
       |j                          	 |j'                          t)        t               y # t        t        f$ r Y w xY w# t        t         f$ r t#        j$                  d      w xY w# |j'                          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      s     	fnnfnn5 ||BQ5 CLLH$<@3t9L	N +	FF:GGDMGGI
 GGI6N5 ( * ' 	9## %8 9 9	9 GGI6Ns)   *C 2C- C*)C*-%DD !D6c                   0    e Zd Z eej
                        Zy)CLargeFileTestN)r+   r,   r-   rr   rs   r   r/   r0   r#   r   r     s     Dr0   r   c                   0    e Zd Z eej
                        Zy)PyLargeFileTestN)r+   r,   r-   rr   pyior   r/   r0   r#   r   r     s    		"Dr0   r   c                  @    t        t               t        t               y rx   )r	   r   r(   r/   r0   r#   tearDownModuler      s    
6N
7Or0   __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      s   
  
     @ @ & & 1 	  
3, @b.m b.J==("3"3 =& WR,,.FG3=(9(9 3= H3=l!H!_h&7&7 !#ox'8'8 #
 zHMMO r0   