
    0hh,                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJrJ	r	J
r
  SSKJr  SSKJr  SSKJrJr  SSKrSSKrSr\S-   r " S	 S
5      r " S S\5      rS r " S S\\R0                  5      r\R4                  " \" \S5      (       + S5       " S S\\R0                  5      5       rS r " S S\\R0                  5      r " S S\\R0                  5      rS r \!S:X  a  \RD                  " 5         gg)z9Test largefile support on system where this makes sense.
    N)requires
bigmemtestrequires_resource)SHORT_TIMEOUT)socket_helper)TESTFNunlinkl    y* 2c                   *    \ rS rSrS r\S 5       rSrg)LargeFileTest   c                    [         R                  R                  [        5      (       a  SnOSnU R	                  [        U5       n[         R
                  " UR                  5       5      R                  nU[        S-   :X  a
   S S S 5        g US:X  a  UR                  S5        UR                  S5        UR                  [        5        UR                  S5        UR                  5         U R                  [         R
                  " UR                  5       5      R                  [        S-   5        S S S 5        g ! , (       d  f       g = f)Nr+bzw+b   r      z   a)ospathexistsr   openfstatfilenost_sizesizewriteseekflushassertEqual)selfmodefcurrent_sizes       </opt/python-3.13.8/usr/lib/python3.13/test/test_largefile.pysetUpLargeFileTest.setUp   s    77>>&!!DDYYvt$88AHHJ/77LtAv% %$
 q FF1IFF4LGGDMGGIRXXahhj19946B %$$s   =D6
B#D66
Ec                     U R                  [        S5          S S S 5        [        R                  " [        5      R                  S:X  d  U R                  S5      e[        [        5        g ! , (       d  f       NW= f)Nwbr   z0File was not truncated by opening with mode "wb")r   r   r   statr   failureExceptionr	   TESTFN2)clss    r#   tearDownClassLargeFileTest.tearDownClass,   sV    XXfd# $wwv&&!+&& (8 9 9w $#s   A**
A8 N)__name__
__module____qualname____firstlineno__r$   classmethodr,   __static_attributes__r.       r#   r   r      s    C(  r5   r   c                   n    \ rS rSrSr\" \SSS9S 5       rS rS r	S	 r
S
 rS r\" \SSS9S 5       rSrg)TestFileMethods6   zOTest that each file function works as expected for large
(i.e. > 2 GiB) files.
   F)r   memusedry_runc                    U R                  [        S5       nU R                  [        UR	                  5       5      [
        S-   5        U R                  UR                  5       [
        S-   5        S S S 5        g ! , (       d  f       g = f)Nrbr   )r   r   r   lenreadr   tellr   _sizer!   s      r#   test_large_readTestFileMethods.test_large_read=   sX     YYvt$S]D1H5QVVXtax0 %$$s   AA88
Bc                 z    U R                  [        R                  " [        5      R                  [
        S-   5        g )Nr   )r   r   r(   r   r   r   )r   s    r#   test_osstatTestFileMethods.test_osstatD   s$    00$q&9r5   c                 H   U R                  [        S5       nU R                  UR                  5       S5        U R                  UR	                  S5      S5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       [        S-   S-   5        UR                  SS5        U R                  UR                  5       [        S-   S	-
  5        UR                  [        * S-
  S5        U R                  UR                  5       S5        UR                  [        5        U R                  UR                  5       [        5        U R                  UR	                  S5      S
5        UR                  [        * S-
  S5        U R                  UR	                  S5      S5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr=   r   r   r   *   T   r9   
   r   )r   r   r   r@   r?   r   r   r   r!   s     r#   test_seek_readTestFileMethods.test_seek_readG   s+   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                 N   U R                  [        S5       nU R                  [        R                  " UR                  5       SS5      S5        U R                  [        R                  " UR                  5       SS5      S5        U R                  [        R                  " UR                  5       SS5      S5        U R                  [        R                  " UR                  5       SS5      S5        U R                  [        R                  " UR                  5       SS5      [        S-   S-   5        U R                  [        R                  " UR                  5       SS5      [        S-   S-
  5        U R                  [        R                  " UR                  5       [        * S-
  S5      S5        U R                  [        R                  " UR                  5       [        S5      [        5        U R                  UR                  S5      S	5        S S S 5        g ! , (       d  f       g = f)
Nr=   r   rI   r   rJ   r9   rK   rL   r   )r   r   r   r   lseekr   r   r?   rM   s     r#   
test_lseekTestFileMethods.test_lseekf   sd   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   G6H
H$c                    U R                  [        S5       n[        US5      (       d  [        R                  " S5      eUR                  SS5        U R                  UR                  5       [        S-   5        [        S-
  nUR                  U5        UR                  5         U R                  UR                  5       U5        UR                  SS5        U R                  UR                  5       U5        US-  nUR                  S5        UR                  U5        U R                  UR                  5       S5        UR                  SS5        U R                  UR                  5       U5        UR                  S5        UR                  S5        U R                  UR                  5       S5        UR                  S5        U R                  [        UR                  5       5      S5        S S S 5        g ! , (       d  f       g = f)	Nr   truncatez.open().truncate() not available on this systemr   r9   r   rL   rI   )r   r   hasattrunittestSkipTestr   r   r@   r   rU   r>   r?   )r   r!   newsizes      r#   test_truncateTestFileMethods.test_truncates   sp   YYvu%1j))'' )9 : :FF1aLQVVXtAv.RiGFF7OJJLQVVXw/FF1aLQVVXw/ qLGFF2JJJwQVVXr*FF1aLQVVXw/ FF1IJJqMQVVXq)FF1I S]A.? &%%s   GG22
H c                     S HR  nU R                  [        S5       nUR                  U5        U R                  UR	                  5       5        S S S 5        MT     g ! , (       d  f       Mf  = f)N)il               r=   )r   r   r   
assertTrueseekable)r   posr!   s      r#   test_seekableTestFileMethods.test_seekable   sJ     -C64(As

- )( -((s   1A
A)	c                 f   U R                  [        S5       nU R                  UR                  S[        R
                  5      S5        U R                  [        UR                  5       5      [        S-   5        S S S 5        U R                  [        S5       nU R                  UR                  S[        R                  5      S5        U R                  [        UR                  5       5      [        S-
  5        S S S 5        U R                  [        S5       nU R                  UR                  S[        R                  5      [        S-
  5        U R                  [        UR                  5       5      S5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)	Nr=   r   r         r9      )r   r   r   r   r   SEEK_CURr>   r?   r   SEEK_SETSEEK_ENDrA   s      r#   test_seek_readall!TestFileMethods.test_seek_readall   s    YYvt$QVVAr{{3Q7S]D1H5 % YYvt$QVVB4b9S]D2I6 % YYvt$QVVB4dQh?S]A. %$ %$ %$ %$s&   A!E?A!FA!F"?
F
F"
F0r.   N)r/   r0   r1   r2   __doc__r   r   rC   rF   rN   rR   rZ   ra   rk   r4   r.   r5   r#   r7   r7   6   s[     T!U31 41:*>. /D. T!U3/ 4/r5   r7   c                    ^ ^ U U4S jnU$ )Nc                    >^  U UU4S jnU$ )Nc                  B  > [        [        S5      (       d  [        R                  " S5      e[        R                  " [
        R                  R                  T5      5      R                  T:  a+  [        TS-  S-  5      n[        R                  " SU S35      eT" U 0 UD6$ )N
disk_usagezrequires shutil.disk_usagei   z	required z MiB of free disk space)
rV   shutilrW   rX   rq   r   r   realpathfreeint)argskwargshsizefunr   requireds      r#   wrapper6skip_no_disk_space.<locals>.decorator.<locals>.wrapper   s    6<00''(DEE  !1!1$!78==HHtOd23''w&=>@ @'''r5   r.   )ry   r{   r   rz   s   ` r#   	decorator%skip_no_disk_space.<locals>.decorator   s    	( r5   r.   )r   rz   r}   s   `` r#   skip_no_disk_spacer      s    	 r5   c                   r    \ rS rSr\" \R                  5      r\" \\	S-  5      \
" S5      S 5       5       rSrg)TestCopyfile         @cpuc                    [         R                  R                  [        5      n[        R
                  " [        [        5        U R                  [         R                  R                  [        5      U5        [        [        S5       nU R                  UR                  S5      S5        UR                  US-
  5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr=         z           a)r   r   getsizer   rr   copyfiler*   r   r   r?   r   )r   r   r!   s      r#   test_itTestCopyfile.test_it   s    
 wwv&(148'4 AQVVAY(<=FF4!8QVVX';< !  s   AC%%
C3r.   N)r/   r0   r1   r2   staticmethodior   r   r   r   r   r   r4   r.   r5   r#   r   r      s<     D s
+u	=  ,	=r5   r   sendfilezsendfile not supportedc                      ^  \ rS rSr\" \R                  5      r\rU 4S jr	U 4S jr
S r\" \\S-  5      \" S5      S 5       5       rSrU =r$ )	TestSocketSendfile   c                 0   > [         TU ]  5         S U l        g N)superr$   threadr   	__class__s    r#   r$   TestSocketSendfile.setUp   s    r5   c                    > [         TU ]  5         U R                  b-  U R                  R                  U R                  5        S U l        g g r   )r   tearDownr   jointimeoutr   s    r#   r   TestSocketSendfile.tearDown   s:    ;;"KKT\\*DK #r5   c                    ^ ^ UU 4S jn[         R                  " 5       mUR                  T R                  5        [         R                  " X!4S9T l        T R
                  R                  5         TR                  5         g )Nc                   > U    U R                  5       u  pUR                  TR                  5        U   [        [        S5       nTR                  TR                  5         UR                  S5      nU(       d   S S S 5        S S S 5        S S S 5        g UR                  U5        ME  ! , (       d  f       O= fS S S 5        O! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)Nr'   i   )accept
settimeoutr   r   r*   waitrecvr   )sockconn_r!   chunkeventr   s        r#   run*TestSocketSendfile.tcp_server.<locals>.run   s    ++--4.!JJt||, $		% 0$" /T  	  /.TTT sF   0CC6B';CCB''
B51C8	C
C	C
C))targetrv   )	threadingEventr   r   Threadr   startset)r   r   r   r   s   `  @r#   
tcp_serverTestSocketSendfile.tcp_server   sS    
	' !%&&cA		r5   r   r   c                 Z   [         R                  " 5       n[        R                  " SU45       nU R	                  U5        [        R
                  " SU45       n[        [        S5       nUR                  U5        S S S 5        S S S 5        S S S 5        U R                  5         [        R                  R                  [        5      nU R                  [        R                  R                  [        5      U5        [        [        S5       nU R                  UR                  S5      S5        UR!                  US-
  5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       g = f)N z	127.0.0.1r=   r   r   r   )r   find_unused_portsocketcreate_serverr   create_connectionr   r   r   r   r   r   r   r   r*   r?   r   )r   portr   clientr!   r   s         r#   r   TestSocketSendfile.test_it   s     --/!!2t*-OOD!));*=>&&$'1OOA& ( ? .
 	wwv&148'4 AQVVAY(<=FF4!8QVVX';< !  (' ?> .- ! sH   *F
E9)E(;E9F
	AF(
E62E99
F	F


F
F*)r   )r/   r0   r1   r2   r   r   r   r   r   r$   r   r   r   r   r   r   r   r4   __classcell__)r   s   @r#   r   r      sQ     DG* s
+u=  ,=r5   r   c                  v    SS K n U R                  U R                  U R                  5        [
        R                  S S S:X  d  [
        R                  S:X  a  [        SS[        [        5      -  5        g [        [        SSS9n UR                  S	5        UR                  S
5        UR                  5          UR'                  5         [)        [        5        g ! [        [        4 a     Nf = f! [        [         4 a    ["        R$                  " S5      ef = f! UR'                  5         [)        [        5        f = f)Nr   rg   windarwin	largefilez-test requires %s bytes and a long time to runr'   )	bufferingr]      xz*filesystem does not have largefile support)signalSIGXFSZSIG_IGNImportErrorAttributeErrorsysplatformr   strr   r   r   r   r   r   OSErrorOverflowErrorrW   rX   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 !D8c                   8    \ rS rSr\" \R                  5      rSrg)CLargeFileTesti*  r.   N)r/   r0   r1   r2   r   r   r   r4   r.   r5   r#   r   r   *  s     Dr5   r   c                   8    \ rS rSr\" \R                  5      rSrg)PyLargeFileTesti.  r.   N)r/   r0   r1   r2   r   pyior   r4   r.   r5   r#   r   r   .  s    		"Dr5   r   c                  @    [        [        5        [        [        5        g r   )r	   r   r*   r.   r5   r#   tearDownModuler   2  s    
6N
7Or5   __main__)#rm   r   r   rW   r   rr   r   test.supportr   r   r   r   r   test.support.os_helperr   r	   r   _pyior   r   r*   r   r7   r   TestCaser   skipIfrV   r   r   r   r   r   r/   mainr.   r5   r#   <module>r      s    
 
     @ @ & & 1 	  
3, @v/m v/p==("3"3 =& 
WR,,.FG3=(9(9 3= H3=l!H!_h&7&7 !#ox'8'8 #
 zMMO r5   